diff options
author | Peter Varga <pvarga@inf.u-szeged.hu> | 2016-07-13 17:28:15 +0200 |
---|---|---|
committer | Peter Varga <pvarga@inf.u-szeged.hu> | 2016-08-02 14:08:32 +0000 |
commit | 9b8c1020f2752ab5095086577ab98fa80926c43d (patch) | |
tree | a0780e2dd66d2dd3eeff727cf81d97c0632aa36a /src/webenginewidgets/api | |
parent | ea616d1047325fed629eb3bfef85550daff56ff7 (diff) |
Add View Source API and make the feature available from context menu
[ChangeLog][QtWebEngineQML][QQuickWebEngineView] View Source feature is
now supported
[ChangeLog][QtWebEngineWidgets][QWebEnginePage] View Source feature is
now supported
Change-Id: Icc16da71fc6ec95880897fc9744dd8be8c004e00
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'src/webenginewidgets/api')
-rw-r--r-- | src/webenginewidgets/api/qwebenginepage.cpp | 46 | ||||
-rw-r--r-- | src/webenginewidgets/api/qwebenginepage.h | 4 |
2 files changed, 50 insertions, 0 deletions
diff --git a/src/webenginewidgets/api/qwebenginepage.cpp b/src/webenginewidgets/api/qwebenginepage.cpp index 3f2323334..be5a39e83 100644 --- a/src/webenginewidgets/api/qwebenginepage.cpp +++ b/src/webenginewidgets/api/qwebenginepage.cpp @@ -81,6 +81,7 @@ #include <QMimeData> #include <QStandardPaths> #include <QStyle> +#include <QTimer> #include <QUrl> QT_BEGIN_NAMESPACE @@ -422,6 +423,9 @@ void QWebEnginePagePrivate::updateAction(QWebEnginePage::WebAction action) const case QWebEnginePage::ReloadAndBypassCache: enabled = !isLoading; break; + case QWebEnginePage::ViewSource: + enabled = adapter->canViewSource(); + break; default: break; } @@ -437,6 +441,7 @@ void QWebEnginePagePrivate::updateNavigationActions() updateAction(QWebEnginePage::Stop); updateAction(QWebEnginePage::Reload); updateAction(QWebEnginePage::ReloadAndBypassCache); + updateAction(QWebEnginePage::ViewSource); } #ifndef QT_NO_ACTION @@ -931,6 +936,9 @@ QAction *QWebEnginePage::action(WebAction action) const case SavePage: text = tr("Save &Page"); break; + case ViewSource: + text = tr("&View Page Source"); + break; case NoWebAction: case WebActionCount: Q_UNREACHABLE(); @@ -1121,6 +1129,17 @@ void QWebEnginePage::triggerAction(WebAction action, bool) case SavePage: d->adapter->save(); break; + case ViewSource: + // This is a workaround to make the ViewSource action working in a context menu. + // The WebContentsAdapter::viewSource() method deletes a + // RenderWidgetHostViewQtDelegateWidget instance which passes the control to the event + // loop. If the QMenu::aboutToHide() signal is connected to the QObject::deleteLater() + // slot the QMenu is deleted by the event handler while the ViewSource action is still not + // completed. This may lead to a crash. To avoid this the WebContentsAdapter::viewSource() + // method is called indirectly via the QTimer::singleShot() function which schedules the + // the viewSource() call after the QMenu's destruction. + QTimer::singleShot(0, this, [d](){ d->adapter->viewSource(); }); + break; case NoWebAction: break; case WebActionCount: @@ -1378,6 +1397,8 @@ QMenu *QWebEnginePage::createStandardContextMenu() action = new QAction(QIcon::fromTheme(QStringLiteral("view-refresh")), tr("&Reload"), menu); connect(action, &QAction::triggered, d->view, &QWebEngineView::reload); menu->addAction(action); + + menu->addAction(QWebEnginePage::action(ViewSource)); } else { menu->addAction(QWebEnginePage::action(Copy)); menu->addAction(QWebEnginePage::action(Unselect)); @@ -1788,6 +1809,31 @@ const QWebEngineContextMenuData &QWebEnginePage::contextMenuData() const return d->contextData; } +/*! + \since 5.8 + + Shows the source of the current page in a new tab. + + \sa canViewSource +*/ +void QWebEnginePage::viewSource() +{ + triggerAction(QWebEnginePage::ViewSource); +} + +/*! + \property QWebEnginePage::canViewSource + \brief whether the source for the current page can be viewed. + \since 5.8 + + \sa viewSource() +*/ +bool QWebEnginePage::canViewSource() const +{ + Q_D(const QWebEnginePage); + return d->adapter->canViewSource(); +} + QT_END_NAMESPACE #include "moc_qwebenginepage.cpp" diff --git a/src/webenginewidgets/api/qwebenginepage.h b/src/webenginewidgets/api/qwebenginepage.h index ad32f169d..bb46cd9fb 100644 --- a/src/webenginewidgets/api/qwebenginepage.h +++ b/src/webenginewidgets/api/qwebenginepage.h @@ -81,6 +81,7 @@ class QWEBENGINEWIDGETS_EXPORT QWebEnginePage : public QObject { Q_PROPERTY(QPointF scrollPosition READ scrollPosition NOTIFY scrollPositionChanged) Q_PROPERTY(bool audioMuted READ isAudioMuted WRITE setAudioMuted NOTIFY audioMutedChanged) Q_PROPERTY(bool recentlyAudible READ recentlyAudible NOTIFY recentlyAudibleChanged) + Q_PROPERTY(bool canViewSource READ canViewSource) public: enum WebAction { @@ -124,6 +125,7 @@ public: Unselect, SavePage, OpenLinkInNewBackgroundTab, + ViewSource, WebActionCount }; @@ -279,6 +281,8 @@ public: #endif const QWebEngineContextMenuData &contextMenuData() const; + void viewSource(); + bool canViewSource() const; Q_SIGNALS: void loadStarted(); |