diff --git a/src/core/web_contents_adapter.cpp b/src/core/web_contents_adapter.cpp index 1e0d261da882c552e613961d9c41f4912eba3ea4..a01164f1ad9b603c7975bbc9a53104591740055b 100644 --- a/src/core/web_contents_adapter.cpp +++ b/src/core/web_contents_adapter.cpp @@ -800,6 +800,12 @@ void WebContentsAdapter::inspectElementAt(const QPoint &location) } } +void WebContentsAdapter::exitFullScreen() +{ + Q_D(WebContentsAdapter); + d->webContents->ExitFullscreen(); +} + void WebContentsAdapter::wasShown() { Q_D(WebContentsAdapter); diff --git a/src/core/web_contents_adapter.h b/src/core/web_contents_adapter.h index 1e78f8e775a4187d9bb92b8416cadc5ccb716d04..ca2f32ebee9c31d91efd68f3968d6c20137dd513 100644 --- a/src/core/web_contents_adapter.h +++ b/src/core/web_contents_adapter.h @@ -126,6 +126,7 @@ public: void executeMediaPlayerActionAt(const QPoint &location, MediaPlayerAction action, bool enable); void inspectElementAt(const QPoint &location); + void exitFullScreen(); void wasShown(); void wasHidden(); diff --git a/src/webengine/api/qquickwebengineview.cpp b/src/webengine/api/qquickwebengineview.cpp index 9a8a6ccb39da60995ed95b07e1981c27bd2194f2..e123bda8feabf68be77c01aa2580637624ea5797 100644 --- a/src/webengine/api/qquickwebengineview.cpp +++ b/src/webengine/api/qquickwebengineview.cpp @@ -266,6 +266,11 @@ bool QQuickWebEngineViewPrivate::contextMenuRequested(const WebEngineContextMenu QObject::connect(item, &MenuItemHandler::triggered, [q] { q->triggerWebAction(QQuickWebEngineView::CopyImageToClipboard); }); ui()->addMenuItem(item, QObject::tr("Copy Image")); } + if (isFullScreen()) { + item = new MenuItemHandler(menu); + QObject::connect(item, &MenuItemHandler::triggered, [q] { q->triggerWebAction(QQuickWebEngineView::ExitFullScreen); }); + ui()->addMenuItem(item, QObject::tr("Exit Full Screen Mode")); + } // FIXME: expose the context menu data as an attached property to make this more useful if (contextMenuExtraItems) { @@ -1292,6 +1297,9 @@ void QQuickWebEngineView::triggerWebAction(WebAction action) case InspectElement: d->adapter->inspectElementAt(d->contextMenuData.pos); break; + case ExitFullScreen: + d->adapter->exitFullScreen(); + break; default: Q_UNREACHABLE(); } diff --git a/src/webengine/api/qquickwebengineview_p.h b/src/webengine/api/qquickwebengineview_p.h index 934303722f921d1d097eb8becc76a69d100df9d5..c7625d209a0dffb933b8890a7b3e4e6036dc7132 100644 --- a/src/webengine/api/qquickwebengineview_p.h +++ b/src/webengine/api/qquickwebengineview_p.h @@ -224,6 +224,7 @@ public: DownloadMediaToDisk, InspectElement, + ExitFullScreen, WebActionCount }; diff --git a/src/webenginewidgets/api/qwebenginepage.cpp b/src/webenginewidgets/api/qwebenginepage.cpp index 1cf51df72db7a5c87e32af7c385fc40875641690..472e9587114a265e2f8f05147ea8a5e6bfdb5ddf 100644 --- a/src/webenginewidgets/api/qwebenginepage.cpp +++ b/src/webenginewidgets/api/qwebenginepage.cpp @@ -595,6 +595,9 @@ QAction *QWebEnginePage::action(WebAction action) const case InspectElement: text = tr("Inspect Element"); break; + case ExitFullScreen: + text = tr("Exit Full Screen Mode"); + break; default: break; } @@ -762,6 +765,9 @@ void QWebEnginePage::triggerAction(WebAction action, bool) case InspectElement: d->adapter->inspectElementAt(d->m_menuData.pos); break; + case ExitFullScreen: + d->adapter->exitFullScreen(); + break; default: Q_UNREACHABLE(); } @@ -968,6 +974,8 @@ QMenu *QWebEnginePage::createStandardContextMenu() } else if (contextMenuData.mediaType == WebEngineContextMenuData::MediaTypeCanvas) { menu->addAction(QWebEnginePage::action(CopyImageToClipboard)); } + if (d->isFullScreen()) + menu->addAction(QWebEnginePage::action(ExitFullScreen)); return menu; } diff --git a/src/webenginewidgets/api/qwebenginepage.h b/src/webenginewidgets/api/qwebenginepage.h index c324f37373a4b9662beece892fb4df0bbe708674..d027998ee1a36ecb36e88aad9d40b51cb1e107ba 100644 --- a/src/webenginewidgets/api/qwebenginepage.h +++ b/src/webenginewidgets/api/qwebenginepage.h @@ -107,6 +107,7 @@ public: DownloadMediaToDisk, InspectElement, + ExitFullScreen, WebActionCount };