diff options
author | Pierre Rossi <pierre.rossi@digia.com> | 2014-02-12 19:25:57 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-04-02 00:07:52 +0200 |
commit | c5431da0b11b2b73abee62751565a7d20757040f (patch) | |
tree | e4caffcc91a361d937f6dfa2720f4979e0cee33b /src/webengine/api/qquickwebengineview.cpp | |
parent | d13d953feceb2e72959f7b9aaf45720dcae49e8a (diff) |
Make WebUI popups work with QtQuick
This is used by popups for select elements and date pickers among
other things. We can keep using the same RenderWidgetHostViewQtDelegate
implementations for that purpose, and query QPA to decide if they
should be wrapped into their own QQuickWindow.
Longer term, we might want to optionally delegate that functionality
to QML.
Change-Id: I88540ca32a9a707d380dfbf486b7f7806b5b65ff
Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com>
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) |