diff options
Diffstat (limited to 'src/webengine/api/qquickwebengineview.cpp')
-rw-r--r-- | src/webengine/api/qquickwebengineview.cpp | 31 |
1 files changed, 29 insertions, 2 deletions
diff --git a/src/webengine/api/qquickwebengineview.cpp b/src/webengine/api/qquickwebengineview.cpp index 27282e111..f9a47a618 100644 --- a/src/webengine/api/qquickwebengineview.cpp +++ b/src/webengine/api/qquickwebengineview.cpp @@ -47,6 +47,7 @@ #include "qquickwebengineloadrequest_p.h" #include "qquickwebenginenewviewrequest_p.h" #include "render_widget_host_view_qt_delegate_quick.h" +#include "render_widget_host_view_qt_delegate_quickwindow.h" #include "ui_delegates_manager.h" #include "web_contents_adapter.h" #include "web_engine_error.h" @@ -61,6 +62,8 @@ #include <QQmlEngine> #include <private/qqmlmetatype_p.h> +#include <private/qguiapplication_p.h> +#include <qpa/qplatformintegration.h> QT_BEGIN_NAMESPACE @@ -119,8 +122,32 @@ UIDelegatesManager *QQuickWebEngineViewPrivate::ui() RenderWidgetHostViewQtDelegate *QQuickWebEngineViewPrivate::CreateRenderWidgetHostViewQtDelegate(RenderWidgetHostViewQtDelegateClient *client, RenderingMode mode) { if (mode == HardwareAccelerationMode) - return new RenderWidgetHostViewQtDelegateQuick(client); - return new RenderWidgetHostViewQtDelegateQuickPainted(client); + return new RenderWidgetHostViewQtDelegateQuick(client, /*isPopup = */ false); + return new RenderWidgetHostViewQtDelegateQuickPainted(client, false); +} + +RenderWidgetHostViewQtDelegate *QQuickWebEngineViewPrivate::CreateRenderWidgetHostViewQtDelegateForPopup(RenderWidgetHostViewQtDelegateClient *client, WebContentsAdapterClient::RenderingMode mode) +{ + Q_Q(QQuickWebEngineView); + const bool hasWindowCapability = QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::MultipleWindows); + if (mode == HardwareAccelerationMode) { + RenderWidgetHostViewQtDelegateQuick *quickDelegate = new RenderWidgetHostViewQtDelegateQuick(client, /*isPopup = */true); + if (hasWindowCapability) { + RenderWidgetHostViewQtDelegateQuickWindow *wrapperWindow = new RenderWidgetHostViewQtDelegateQuickWindow(quickDelegate, q); + quickDelegate->setParentItem(wrapperWindow->contentItem()); + return wrapperWindow; + } + quickDelegate->setParentItem(q); + return quickDelegate; + } + RenderWidgetHostViewQtDelegateQuickPainted *paintedDelegate = new RenderWidgetHostViewQtDelegateQuickPainted(client, /*isPopup = */true); + if (hasWindowCapability) { + RenderWidgetHostViewQtDelegateQuickWindow *wrapperWindow = new RenderWidgetHostViewQtDelegateQuickWindow(paintedDelegate, q); + paintedDelegate->setParentItem(wrapperWindow->contentItem()); + return wrapperWindow; + } + paintedDelegate->setParentItem(q); + return paintedDelegate; } bool QQuickWebEngineViewPrivate::contextMenuRequested(const WebEngineContextMenuData &data) |