summaryrefslogtreecommitdiff
path: root/src/webview.cpp
diff options
context:
space:
mode:
authorAndrea Diamantini <adjam7@gmail.com>2009-09-03 02:21:50 +0200
committerAndrea Diamantini <adjam7@gmail.com>2009-09-03 02:21:50 +0200
commit3f18990c5ed8bb30b762b5520062dbda8f700c22 (patch)
tree208b01be6be9c473acef2cddeca6cf6ffd352a63 /src/webview.cpp
parent- A better print slot (diff)
downloadrekonq-3f18990c5ed8bb30b762b5520062dbda8f700c22.tar.xz
Improved contextual menu following my ideas and Henry de Valence
suggestions.
Diffstat (limited to 'src/webview.cpp')
-rw-r--r--src/webview.cpp177
1 files changed, 82 insertions, 95 deletions
diff --git a/src/webview.cpp b/src/webview.cpp
index 6cf6afbf..85e0e996 100644
--- a/src/webview.cpp
+++ b/src/webview.cpp
@@ -110,6 +110,7 @@ void WebView::contextMenuEvent(QContextMenuEvent *event)
KMenu menu(this);
QAction *a;
+ // is a link?
if (!result.linkUrl().isEmpty())
{
// link actions
@@ -125,84 +126,40 @@ void WebView::contextMenuEvent(QContextMenuEvent *event)
a = pageAction(QWebPage::CopyLinkToClipboard);
a->setIcon(KIcon("edit-copy"));
menu.addAction(a);
-
- 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 if (result.isContentEditable() && result.isContentSelected())
+
+ // is content editable && selected? Add CUT
+ if (result.isContentEditable() && result.isContentSelected())
{
// actions for text selected in field
a = pageAction(QWebPage::Cut);
a->setIcon(KIcon("edit-cut"));
a->setShortcut(KStandardShortcut::cut().primary());
menu.addAction(a);
-
+ }
+
+ // is content selected) Add COPY
+ if(result.isContentSelected())
+ {
a = pageAction(QWebPage::Copy);
a->setIcon(KIcon("edit-copy"));
a->setShortcut(KStandardShortcut::copy().primary());
menu.addAction(a);
-
- a = pageAction(QWebPage::Paste);
- a->setIcon(KIcon("edit-paste"));
- a->setShortcut(KStandardShortcut::paste().primary());
- menu.addAction(a);
-
- menu.addSeparator();
-
- KConfig config("kuriikwsfilterrc"); //Share with konqueror
- KConfigGroup cg = config.group("General");
- QStringList favoriteEngines;
- favoriteEngines << "wikipedia" << "google"; //defaults
- favoriteEngines = cg.readEntry("FavoriteSearchEngines", favoriteEngines);
- QString keywordDelimiter = cg.readEntry("KeywordDelimiter", ":");
- KService::Ptr service;
- KUriFilterData data;
- foreach (const QString &engine, favoriteEngines)
- {
- service = KService::serviceByDesktopPath(QString("searchproviders/%1.desktop").arg(engine));
- const QString searchProviderPrefix = *(service->property("Keys").toStringList().begin()) + keywordDelimiter;
- data.setData(searchProviderPrefix + "some keyword");
- a = new KAction(i18n("Search with ")+service->name(), this);
- a->setIcon(Application::icon(KUrl(data.uri())));
- a->setData(searchProviderPrefix);
- connect(a, SIGNAL(triggered(bool)), this, SLOT(slotSearch()));
- menu.addAction(a);
- }
-
-
- // TODO Add translate, show translation
}
- else if (result.isContentEditable())
+
+ // is content editable? Add PASTE
+ if(result.isContentEditable())
{
- // actions for a not selected field or a void field
- // WARNING: why it doesn't automatically select a field?
- // Why the paste action is disabled?
-
a = pageAction(QWebPage::Paste);
a->setIcon(KIcon("edit-paste"));
a->setShortcut(KStandardShortcut::paste().primary());
menu.addAction(a);
}
- else if (result.isContentSelected())
- {
- // actions for text selected in page
- a = pageAction(QWebPage::Copy);
- a->setIcon(KIcon("edit-copy"));
- a->setShortcut(KStandardShortcut::copy().primary());
- menu.addAction(a);
-
- menu.addSeparator();
+
+ // is content selected? Add SEARCH actions
+ if(result.isContentSelected())
+ {
+ KActionMenu *searchMenu = new KActionMenu(i18n("Search with..."), this);
KConfig config("kuriikwsfilterrc"); //Share with konqueror
KConfigGroup cg = config.group("General");
@@ -212,21 +169,28 @@ void WebView::contextMenuEvent(QContextMenuEvent *event)
QString keywordDelimiter = cg.readEntry("KeywordDelimiter", ":");
KService::Ptr service;
KUriFilterData data;
+
foreach (const QString &engine, favoriteEngines)
{
- service = KService::serviceByDesktopPath(QString("searchproviders/%1.desktop").arg(engine));
- const QString searchProviderPrefix = *(service->property("Keys").toStringList().begin()) + keywordDelimiter;
- data.setData(searchProviderPrefix + "some keyword");
- a = new KAction(i18n("Search with %1", service->name()), this);
- a->setIcon(Application::icon(KUrl(data.uri())));
- a->setData(searchProviderPrefix);
- connect(a, SIGNAL(triggered(bool)), this, SLOT(slotSearch()));
- menu.addAction(a);
+ if(!engine.isNull())
+ {
+ service = KService::serviceByDesktopPath(QString("searchproviders/%1.desktop").arg(engine));
+ const QString searchProviderPrefix = *(service->property("Keys").toStringList().begin()) + keywordDelimiter;
+ data.setData(searchProviderPrefix + "some keyword");
+ a = new KAction(service->name(), this);
+ a->setIcon(Application::icon(KUrl(data.uri())));
+ a->setData(searchProviderPrefix);
+ connect(a, SIGNAL(triggered(bool)), this, SLOT(slotSearch()));
+ searchMenu->addAction(a);
+ }
}
-
- // TODO Add translate, show translation
+ menu.addAction(searchMenu);
+ menu.addSeparator();
+ // TODO Add translate, show translation
}
- else if (!result.pixmap().isNull())
+
+ // is an image?
+ if (!result.pixmap().isNull())
{
menu.addSeparator();
@@ -238,37 +202,54 @@ void WebView::contextMenuEvent(QContextMenuEvent *event)
a = pageAction(QWebPage::CopyImageToClipboard);
a->setIcon(KIcon("edit-copy"));
menu.addAction(a);
+
+ menu.addSeparator();
}
- else
- {
- //page actions
- menu.addAction(mainwindow->actionByName("new_tab"));
-
- if(mainwindow->isFullScreen())
- {
- menu.addAction(mainwindow->actionByName("fullscreen"));
- }
+ // last (but not less) actions..
+ if(result.linkUrl().isEmpty())
+ {
+ // page action
+ menu.addAction(mainwindow->actionByName("new_tab"));
menu.addSeparator();
+ }
+
+ QWebHistory *history = page()->history();
+ if(history->canGoBack())
+ {
+ a = pageAction(QWebPage::Back);
+ a->setIcon(KIcon("go-previous"));
+ menu.addAction(a);
+ }
+
+ if(history->canGoForward())
+ {
+ a = pageAction(QWebPage::Forward);
+ a->setIcon(KIcon("go-next"));
+ menu.addAction(a);
+ }
- menu.addAction(mainwindow->actionByName("history_back"));
- menu.addAction(mainwindow->actionByName("history_forward"));
- menu.addAction(mainwindow->actionByName("view_redisplay"));
-
- KActionMenu *frameMenu = new KActionMenu(i18n("Frame"), this);
+ 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);
- menu.addAction(frameMenu);
-
+ 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);
+ menu.addAction(frameMenu);
+
+ // empty space actions
+ if(result.linkUrl().isEmpty())
+ {
menu.addSeparator();
+ menu.addAction(mainwindow->actionByName(KStandardAction::name(KStandardAction::SaveAs)));
+
menu.addAction(mainwindow->actionByName("page_source"));
QAction *addBookmarkAction = Application::bookmarkProvider()->actionByName("rekonq_add_bookmark");
menu.addAction(addBookmarkAction);
@@ -282,6 +263,12 @@ void WebView::contextMenuEvent(QContextMenuEvent *event)
}
}
+ if(mainwindow->isFullScreen())
+ {
+ menu.addSeparator();
+ menu.addAction(mainwindow->actionByName("fullscreen"));
+ }
+
menu.exec(mapToGlobal(event->pos()));
}