diff options
-rw-r--r-- | src/webview.cpp | 49 | ||||
-rw-r--r-- | src/webview.h | 4 |
2 files changed, 34 insertions, 19 deletions
diff --git a/src/webview.cpp b/src/webview.cpp index 21a24c4f..97f19d78 100644 --- a/src/webview.cpp +++ b/src/webview.cpp @@ -101,7 +101,6 @@ void WebView::setStatusBarText(const QString &string) m_statusBarText = string; } - void WebView::contextMenuEvent(QContextMenuEvent *event) { QWebHitTestResult result = page()->mainFrame()->hitTestContent(event->pos()); @@ -123,7 +122,7 @@ void WebView::contextMenuEvent(QContextMenuEvent *event) a->setData(result.linkUrl()); connect(a, SIGNAL(triggered(bool)), this, SLOT(openLinkInNewWindow())); menu.addAction(a); - + a = pageAction(QWebPage::DownloadLinkToDisk); a->setIcon(KIcon("document-save")); menu.addAction(a); @@ -132,7 +131,7 @@ void WebView::contextMenuEvent(QContextMenuEvent *event) a->setIcon(KIcon("edit-copy")); menu.addAction(a); } - + // is content editable && selected? Add CUT if (result.isContentEditable() && result.isContentSelected()) { @@ -142,7 +141,7 @@ void WebView::contextMenuEvent(QContextMenuEvent *event) a->setShortcut(KStandardShortcut::cut().primary()); menu.addAction(a); } - + // is content selected) Add COPY if(result.isContentSelected()) { @@ -151,7 +150,7 @@ void WebView::contextMenuEvent(QContextMenuEvent *event) a->setShortcut(KStandardShortcut::copy().primary()); menu.addAction(a); } - + // is content editable? Add PASTE if(result.isContentEditable()) { @@ -160,10 +159,10 @@ void WebView::contextMenuEvent(QContextMenuEvent *event) a->setShortcut(KStandardShortcut::paste().primary()); menu.addAction(a); } - + // is content selected? Add SEARCH actions if(result.isContentSelected()) - { + { KActionMenu *searchMenu = new KActionMenu(i18n("Search with"), this); KConfig config("kuriikwsfilterrc"); //Share with konqueror @@ -174,7 +173,7 @@ void WebView::contextMenuEvent(QContextMenuEvent *event) QString keywordDelimiter = cg.readEntry("KeywordDelimiter", ":"); KService::Ptr service; KUriFilterData data; - + Q_FOREACH(const QString &engine, favoriteEngines) { if(!engine.isEmpty()) @@ -191,10 +190,9 @@ void WebView::contextMenuEvent(QContextMenuEvent *event) } menu.addAction(searchMenu); menu.addSeparator(); - // TODO Add translate, show translation } - + // is an image? if (!result.pixmap().isNull()) { @@ -216,11 +214,28 @@ void WebView::contextMenuEvent(QContextMenuEvent *event) if(result.linkUrl().isEmpty()) { // page action - menu.addAction(mainwindow->actionByName("new_tab")); - menu.addAction(mainwindow->actionByName("new_window")); + if (selectedText().startsWith("http://") || selectedText().startsWith("https://")) + { + //open selected text url in a new tab + a = new KAction(KIcon("tab-new"), i18n("Open in New &Tab: "+selectedText().toUtf8()), this); + a->setData(QUrl(selectedText())); + connect(a, SIGNAL(triggered(bool)), this, SLOT(openLinkInNewTab())); + menu.addAction(a); + + //open selected text url in a new window + a = new KAction(KIcon("window-new"), i18n("Open in New &Window: "+selectedText().toUtf8()), this); + a->setData(QUrl(selectedText())); + connect(a, SIGNAL(triggered(bool)), this, SLOT(openLinkInNewWindow())); + menu.addAction(a); + } + else + { + menu.addAction(mainwindow->actionByName("new_tab")); + menu.addAction(mainwindow->actionByName("new_window")); + } menu.addSeparator(); } - + QWebHistory *history = page()->history(); if(history->canGoBack()) { @@ -228,7 +243,7 @@ void WebView::contextMenuEvent(QContextMenuEvent *event) a->setIcon(KIcon("go-previous")); menu.addAction(a); } - + if(history->canGoForward()) { a = pageAction(QWebPage::Forward); @@ -237,14 +252,14 @@ void WebView::contextMenuEvent(QContextMenuEvent *event) } menu.addAction(mainwindow->actionByName("view_redisplay")); - + KActionMenu *frameMenu = new KActionMenu(i18n("Current Frame"), this); a = pageAction(QWebPage::OpenFrameInNewWindow); a->setText(i18n("Open in New Tab")); a->setIcon(KIcon("view-right-new")); frameMenu->addAction(a); - + a = new KAction( KIcon("document-print-frame"), i18n("Print Frame"), this); connect(a, SIGNAL(triggered()), this, SLOT(printFrame())); frameMenu->addAction(a); @@ -302,7 +317,7 @@ void WebView::mousePressEvent(QMouseEvent *event) { m_page->m_pressedButtons = event->buttons(); m_page->m_keyboardModifiers = event->modifiers(); - + switch(event->button()) { case Qt::XButton1: diff --git a/src/webview.h b/src/webview.h index a132a193..baf8f9f5 100644 --- a/src/webview.h +++ b/src/webview.h @@ -45,7 +45,7 @@ class WebView : public QWebView public: explicit WebView(QWidget *parent = 0); - + WebPage *page(); KUrl url() const; QString lastStatusBarText() const; @@ -73,7 +73,7 @@ private slots: void slotLoadFinished(bool); void printFrame(); - + void openLinkInNewWindow(); void openLinkInNewTab(); |