summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/application.cpp2
-rw-r--r--src/mainview.cpp9
-rw-r--r--src/webpage.cpp30
-rw-r--r--src/webpage.h37
-rw-r--r--src/webview.cpp83
-rw-r--r--src/webview.h5
6 files changed, 137 insertions, 29 deletions
diff --git a/src/application.cpp b/src/application.cpp
index 60d5ee48..cc34d946 100644
--- a/src/application.cpp
+++ b/src/application.cpp
@@ -97,7 +97,7 @@ int Application::newInstance()
{
for (int i = 0; i < args->count(); ++i)
{
- loadUrl(args->arg(i), Rekonq::NewTab);
+ loadUrl(args->arg(i), Rekonq::NewTab);
}
args->clear();
}
diff --git a/src/mainview.cpp b/src/mainview.cpp
index f059e42b..bc33c1c0 100644
--- a/src/mainview.cpp
+++ b/src/mainview.cpp
@@ -309,9 +309,12 @@ void MainView::slotCurrentChanged(int index)
this, SIGNAL(loadProgress(int)));
}
- connect(webView->page(), SIGNAL(statusBarMessage(const QString&)), this, SIGNAL(showStatusBarMessage(const QString&)));
- connect(webView->page(), SIGNAL(linkHovered(const QString&, const QString&, const QString&)), this, SIGNAL(linkHovered(const QString&)));
- connect(webView, SIGNAL(loadProgress(int)), this, SIGNAL(loadProgress(int)));
+ connect(webView->page(), SIGNAL(statusBarMessage(const QString&)),
+ this, SIGNAL(showStatusBarMessage(const QString&)));
+ connect(webView->page(), SIGNAL(linkHovered(const QString&, const QString&, const QString&)),
+ this, SIGNAL(linkHovered(const QString&)));
+ connect(webView, SIGNAL(loadProgress(int)),
+ this, SIGNAL(loadProgress(int)));
emit setCurrentTitle(webView->title());
m_urlBars->setCurrentIndex(index);
diff --git a/src/webpage.cpp b/src/webpage.cpp
index bb6f0d9c..771b7f04 100644
--- a/src/webpage.cpp
+++ b/src/webpage.cpp
@@ -73,6 +73,8 @@
WebPage::WebPage(QObject *parent)
: QWebPage(parent)
+ , m_keyboardModifiers(Qt::NoModifier)
+ , m_pressedButtons(Qt::NoButton)
{
setForwardUnsupportedContent(true);
@@ -84,6 +86,34 @@ WebPage::WebPage(QObject *parent)
}
+bool WebPage::acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest &request, NavigationType type)
+{
+ if (m_keyboardModifiers & Qt::ControlModifier || m_pressedButtons == Qt::MidButton)
+ {
+ Application::instance()->loadUrl(request.url(), Rekonq::NewTab);
+ m_keyboardModifiers = Qt::NoModifier;
+ m_pressedButtons = Qt::NoButton;
+ return false;
+ }
+
+ if (frame == mainFrame())
+ {
+ return QWebPage::acceptNavigationRequest(frame, request, type);
+ }
+ else
+ {
+ // if frame doesn't exists (perhaps) we are pointing to a blank target..
+ if (!frame)
+ {
+ Application::instance()->loadUrl(request.url(), Rekonq::NewTab);
+ return false;
+ }
+ }
+
+ return QWebPage::acceptNavigationRequest(frame, request, type);
+}
+
+
WebPage *WebPage::createWindow(QWebPage::WebWindowType type)
{
kDebug() << "WebPage createWindow slot";
diff --git a/src/webpage.h b/src/webpage.h
index cdfb8f00..6a74c7bf 100644
--- a/src/webpage.h
+++ b/src/webpage.h
@@ -50,21 +50,42 @@ public slots:
protected:
WebPage *createWindow(WebWindowType type);
virtual WebPage *newWindow(WebWindowType type);
-
- QString chooseFile(QWebFrame *frame, const QString &suggestedFile);
- void javaScriptAlert(QWebFrame *frame, const QString &msg);
- bool javaScriptConfirm(QWebFrame *frame, const QString &msg);
- bool javaScriptPrompt(QWebFrame *frame, const QString &msg, const QString &defaultValue, QString *result);
+ virtual bool acceptNavigationRequest(QWebFrame *frame,
+ const QNetworkRequest &request,
+ NavigationType type);
+
+ QString chooseFile(QWebFrame *frame,
+ const QString &suggestedFile);
+
+ void javaScriptAlert(QWebFrame *frame,
+ const QString &msg);
+
+ bool javaScriptConfirm(QWebFrame *frame,
+ const QString &msg);
+
+ bool javaScriptPrompt(QWebFrame *frame,
+ const QString &msg,
+ const QString &defaultValue, QString *result);
+
+ QObject *createPlugin(const QString &classId,
+ const QUrl &url,
+ const QStringList &paramNames,
+ const QStringList &paramValues);
- QObject *createPlugin(const QString &classId, const QUrl &url, const QStringList &paramNames, const QStringList &paramValues);
-
-protected Q_SLOTS:
+
+protected Q_SLOTS:
virtual void slotHandleUnsupportedContent(QNetworkReply *reply);
virtual void slotDownloadRequested(const QNetworkRequest &request);
private:
+ friend class WebView;
+
void viewErrorPage(QNetworkReply *);
+
+ // keyboard/mouse modifiers
+ Qt::KeyboardModifiers m_keyboardModifiers;
+ Qt::MouseButtons m_pressedButtons;
};
#endif
diff --git a/src/webview.cpp b/src/webview.cpp
index ec747b36..e39cdacb 100644
--- a/src/webview.cpp
+++ b/src/webview.cpp
@@ -170,6 +170,20 @@ void WebView::contextMenuEvent(QContextMenuEvent *event)
a->setShortcut(KStandardShortcut::paste().primary());
menu.addAction(a);
+ menu.addSeparator();
+
+ a = new KAction(i18n("Google Search"), this);
+ a->setIcon(Application::icon(KUrl("http://www.google.com")));
+ a->setData("gg:");
+ connect(a, SIGNAL(triggered(bool)), this, SLOT(slotGooWikiSearch()));
+ menu.addAction(a);
+
+ a = new KAction(i18n("Wikipedia Search"), this);
+ a->setIcon(Application::icon(KUrl("http://wikipedia.org")));
+ a->setData("wk:");
+ connect(a, SIGNAL(triggered(bool)), this, SLOT(slotGooWikiSearch()));
+ menu.addAction(a);
+
// TODO Add translate, show translation
}
else if (result.isContentEditable())
@@ -191,7 +205,34 @@ void WebView::contextMenuEvent(QContextMenuEvent *event)
a->setShortcut(KStandardShortcut::copy().primary());
menu.addAction(a);
- // TODO Add search with google, wikipedia, show translation
+ menu.addSeparator();
+
+ a = new KAction(i18n("Google Search"), this);
+ a->setIcon(Application::icon(KUrl("http://www.google.com")));
+ a->setData("gg:");
+ connect(a, SIGNAL(triggered(bool)), this, SLOT(slotGooWikiSearch()));
+ menu.addAction(a);
+
+ a = new KAction(i18n("Wikipedia Search"), this);
+ a->setIcon(Application::icon(KUrl("http://wikipedia.org")));
+ a->setData("wk:");
+ connect(a, SIGNAL(triggered(bool)), this, SLOT(slotGooWikiSearch()));
+ menu.addAction(a);
+
+ // TODO Add translate, show translation
+ }
+ else if (!result.pixmap().isNull())
+ {
+ menu.addSeparator();
+
+ // TODO Add "View Image" && remove copy_this_image action
+ a = pageAction(QWebPage::DownloadImageToDisk);
+ a->setIcon(KIcon("document-save"));
+ menu.addAction(a);
+
+ a = pageAction(QWebPage::CopyImageToClipboard);
+ a->setIcon(KIcon("edit-copy"));
+ menu.addAction(a);
}
else
{
@@ -207,20 +248,6 @@ void WebView::contextMenuEvent(QContextMenuEvent *event)
menu.addAction(mainwindow->actionByName("history_back"));
menu.addAction(mainwindow->actionByName("history_forward"));
menu.addAction(mainwindow->actionByName("view_redisplay"));
-
- if (!result.pixmap().isNull())
- {
- menu.addSeparator();
-
- // TODO Add "View Image" && remove copy_this_image action
- a = pageAction(QWebPage::DownloadImageToDisk);
- a->setIcon(KIcon("document-save"));
- menu.addAction(a);
-
- a = pageAction(QWebPage::CopyImageToClipboard);
- a->setIcon(KIcon("edit-copy"));
- menu.addAction(a);
- }
menu.addSeparator();
@@ -271,6 +298,9 @@ void WebView::keyPressEvent(QKeyEvent *event)
void WebView::mousePressEvent(QMouseEvent *event)
{
+ m_page->m_pressedButtons = event->buttons();
+ m_page->m_keyboardModifiers = event->modifiers();
+
switch(event->button())
{
case Qt::XButton1:
@@ -283,3 +313,26 @@ void WebView::mousePressEvent(QMouseEvent *event)
QWebView::mousePressEvent(event);
};
}
+
+
+void WebView::wheelEvent(QWheelEvent *event)
+{
+ if (QApplication::keyboardModifiers() & Qt::ControlModifier)
+ {
+ int numDegrees = event->delta() / 8;
+ int numSteps = numDegrees / 15;
+ setTextSizeMultiplier(textSizeMultiplier() + numSteps * 0.1);
+ event->accept();
+ return;
+ }
+ QWebView::wheelEvent(event);
+}
+
+
+void WebView::slotGooWikiSearch()
+{
+ KAction *a = qobject_cast<KAction*>(sender());
+ QString search = a->data().toString() + selectedText();
+ KUrl urlSearch = KUrl::fromEncoded(search.toUtf8());
+ Application::instance()->loadUrl(urlSearch, Rekonq::NewTab);
+}
diff --git a/src/webview.h b/src/webview.h
index 4efb2733..ffdc874c 100644
--- a/src/webview.h
+++ b/src/webview.h
@@ -58,13 +58,14 @@ protected:
* to make switch tab
*/
void keyPressEvent(QKeyEvent *event);
+ void wheelEvent(QWheelEvent *event);
-
private slots:
void setProgress(int progress);
void loadFinished();
void setStatusBarText(const QString &string);
-
+ void slotGooWikiSearch();
+
private:
WebPage *m_page;