diff options
author | Allan Sandfeld Jensen <allan.jensen@theqtcompany.com> | 2015-05-12 10:45:23 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@theqtcompany.com> | 2015-05-27 14:08:44 +0000 |
commit | e4361807da9db0609697e7a650947dbf26321cdc (patch) | |
tree | 12cfad7238c9ede5703b748a5c42cbf73757472b /src | |
parent | 7b02ee95f90a5fa14a9abf3b63d2c84440d76a7b (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.cpp | 9 | ||||
-rw-r--r-- | src/webengine/ui_delegates_manager.cpp | 21 | ||||
-rw-r--r-- | src/webengine/ui_delegates_manager.h | 12 | ||||
-rw-r--r-- | src/webenginewidgets/api/qwebenginepage.cpp | 4 |
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); |