summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@theqtcompany.com>2015-05-12 10:45:23 +0200
committerAllan Sandfeld Jensen <allan.jensen@theqtcompany.com>2015-05-27 14:08:44 +0000
commite4361807da9db0609697e7a650947dbf26321cdc (patch)
tree12cfad7238c9ede5703b748a5c42cbf73757472b /src
parent7b02ee95f90a5fa14a9abf3b63d2c84440d76a7b (diff)
Make QQuick contextmenu actions behave like widget counterparts
Updates a two of the context menu actions so they behave like the updated actions in qtwebenginewidgets. Also improves the default label of OpenInThisWindow, since by default there are no other windows. Change-Id: Iac0dc23e8f31598296cba87f93503cefd926983f Reviewed-by: Andras Becsi <andras.becsi@theqtcompany.com>
Diffstat (limited to 'src')
-rw-r--r--src/webengine/api/qquickwebengineview.cpp9
-rw-r--r--src/webengine/ui_delegates_manager.cpp21
-rw-r--r--src/webengine/ui_delegates_manager.h12
-rw-r--r--src/webenginewidgets/api/qwebenginepage.cpp4
4 files changed, 42 insertions, 4 deletions
diff --git a/src/webengine/api/qquickwebengineview.cpp b/src/webengine/api/qquickwebengineview.cpp
index d9fa735d2..11e4d018c 100644
--- a/src/webengine/api/qquickwebengineview.cpp
+++ b/src/webengine/api/qquickwebengineview.cpp
@@ -179,6 +179,11 @@ bool QQuickWebEngineViewPrivate::contextMenuRequested(const WebEngineContextMenu
// Populate our menu
MenuItemHandler *item = 0;
+ if (!data.linkText.isEmpty() && data.linkUrl.isValid()) {
+ item = new NavigateMenuItem(menu, adapter, data.linkUrl);
+ ui()->addMenuItem(item, QObject::tr("Follow link"));
+ }
+
if (data.selectedText.isEmpty()) {
item = new MenuItemHandler(menu);
QObject::connect(item, &MenuItemHandler::triggered, q, &QQuickWebEngineView::goBack);
@@ -197,9 +202,7 @@ bool QQuickWebEngineViewPrivate::contextMenuRequested(const WebEngineContextMenu
}
if (!data.linkText.isEmpty() && data.linkUrl.isValid()) {
- item = new NavigateMenuItem(menu, adapter, data.linkUrl);
- ui()->addMenuItem(item, QObject::tr("Navigate to..."));
- item = new CopyMenuItem(menu, data.linkUrl.toString());
+ item = new CopyLinkMenuItem(menu, data.linkUrl, data.linkText);
ui()->addMenuItem(item, QObject::tr("Copy link address"));
}
diff --git a/src/webengine/ui_delegates_manager.cpp b/src/webengine/ui_delegates_manager.cpp
index 48466bfe2..70b14cd47 100644
--- a/src/webengine/ui_delegates_manager.cpp
+++ b/src/webengine/ui_delegates_manager.cpp
@@ -44,6 +44,7 @@
#include <QClipboard>
#include <QFileInfo>
#include <QGuiApplication>
+#include <QMimeData>
#include <QQmlContext>
#include <QQmlEngine>
#include <QQmlProperty>
@@ -121,6 +122,26 @@ void CopyMenuItem::onTriggered()
qApp->clipboard()->setText(m_textToCopy);
}
+CopyLinkMenuItem::CopyLinkMenuItem(QObject *parent, const QUrl &url, const QString &title)
+ : MenuItemHandler(parent)
+ , m_url(url)
+ , m_title(title)
+{
+ connect(this, &MenuItemHandler::triggered, this, &CopyLinkMenuItem::onTriggered);
+}
+
+void CopyLinkMenuItem::onTriggered()
+{
+ QString urlString = m_url.toString(QUrl::FullyEncoded);
+ QString title = m_title.toHtmlEscaped();
+ QMimeData *data = new QMimeData();
+ data->setText(urlString);
+ QString html = QStringLiteral("<a href=\"") + urlString + QStringLiteral("\">") + title + QStringLiteral("</a>");
+ data->setHtml(html);
+ data->setUrls(QList<QUrl>() << m_url);
+ qApp->clipboard()->setMimeData(data);
+}
+
NavigateMenuItem::NavigateMenuItem(QObject *parent, const QExplicitlySharedDataPointer<WebContentsAdapter> &adapter, const QUrl &targetUrl)
: MenuItemHandler(parent)
, m_adapter(adapter)
diff --git a/src/webengine/ui_delegates_manager.h b/src/webengine/ui_delegates_manager.h
index 745ae0dfd..648d71c12 100644
--- a/src/webengine/ui_delegates_manager.h
+++ b/src/webengine/ui_delegates_manager.h
@@ -97,6 +97,18 @@ private:
QString m_textToCopy;
};
+class CopyLinkMenuItem : public MenuItemHandler {
+ Q_OBJECT
+public:
+ CopyLinkMenuItem(QObject *parent, const QUrl &url, const QString &title);
+
+private:
+ void onTriggered();
+
+ const QUrl m_url;
+ const QString m_title;
+};
+
class NavigateMenuItem : public MenuItemHandler {
Q_OBJECT
public:
diff --git a/src/webenginewidgets/api/qwebenginepage.cpp b/src/webenginewidgets/api/qwebenginepage.cpp
index 9340bf3aa..bc0a97f97 100644
--- a/src/webenginewidgets/api/qwebenginepage.cpp
+++ b/src/webenginewidgets/api/qwebenginepage.cpp
@@ -962,7 +962,9 @@ QMenu *QWebEnginePage::createStandardContextMenu()
QAction *action = 0;
WebEngineContextMenuData contextMenuData(d->m_menuData);
if (!contextMenuData.linkText.isEmpty() && contextMenuData.linkUrl.isValid()) {
- menu->addAction(QWebEnginePage::action(OpenLinkInThisWindow));
+ action = QWebEnginePage::action(OpenLinkInThisWindow);
+ action->setText(tr("Follow Link"));
+ menu->addAction(action);
}
if (contextMenuData.selectedText.isEmpty()) {
action = new QAction(QIcon::fromTheme(QStringLiteral("go-previous")), tr("&Back"), menu);