summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichal Klocek <michal.klocek@qt.io>2021-01-22 12:04:48 +0100
committerMichal Klocek <michal.klocek@qt.io>2021-02-16 23:56:43 +0100
commit1a2db07cac97db7c3609cf223e807fa62e178a9f (patch)
tree70f366bce0cc2c4688dbb67e227c066db837c37b
parent8160f4ffa0ad4db9cc842fb881aeaa6321210ac7 (diff)
downloadqtwebengine-1a2db07cac97db7c3609cf223e807fa62e178a9f.tar.gz
Fix mad popup qquickwindows on wayland
On wayland with weston the popup quickwindow should have parent otherwise it gets into 'mad' mode and jumps around the screen. This also fixes similar issue on some embedded x11 setups. Adding parent brakes positioning of popups, but the fix is done in followup patch. This patch also has a regression, closing application during opened comobox will cause crash, however before this patch application simply did not remove render process or "hanged" on exit. This issue is also handled in follow up patches. Change-Id: I876b9a5b58a731eee95f30a52a3c2705730631da Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
-rw-r--r--src/webengine/api/qquickwebengineview.cpp3
-rw-r--r--src/webengine/render_widget_host_view_qt_delegate_quickwindow.cpp6
-rw-r--r--src/webengine/render_widget_host_view_qt_delegate_quickwindow.h3
3 files changed, 7 insertions, 5 deletions
diff --git a/src/webengine/api/qquickwebengineview.cpp b/src/webengine/api/qquickwebengineview.cpp
index 195833fe7..1bb89ac68 100644
--- a/src/webengine/api/qquickwebengineview.cpp
+++ b/src/webengine/api/qquickwebengineview.cpp
@@ -220,7 +220,8 @@ RenderWidgetHostViewQtDelegate *QQuickWebEngineViewPrivate::CreateRenderWidgetHo
const bool hasWindowCapability = QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::MultipleWindows);
RenderWidgetHostViewQtDelegateQuick *quickDelegate = new RenderWidgetHostViewQtDelegateQuick(client, /*isPopup = */ true);
if (hasWindowCapability) {
- RenderWidgetHostViewQtDelegateQuickWindow *wrapperWindow = new RenderWidgetHostViewQtDelegateQuickWindow(quickDelegate);
+ RenderWidgetHostViewQtDelegateQuickWindow *wrapperWindow =
+ new RenderWidgetHostViewQtDelegateQuickWindow(quickDelegate, q->window());
wrapperWindow->setVirtualParent(q);
quickDelegate->setParentItem(wrapperWindow->contentItem());
return wrapperWindow;
diff --git a/src/webengine/render_widget_host_view_qt_delegate_quickwindow.cpp b/src/webengine/render_widget_host_view_qt_delegate_quickwindow.cpp
index 3192197d0..b847e35bd 100644
--- a/src/webengine/render_widget_host_view_qt_delegate_quickwindow.cpp
+++ b/src/webengine/render_widget_host_view_qt_delegate_quickwindow.cpp
@@ -44,9 +44,9 @@
namespace QtWebEngineCore {
-RenderWidgetHostViewQtDelegateQuickWindow::RenderWidgetHostViewQtDelegateQuickWindow(RenderWidgetHostViewQtDelegateQuick *realDelegate)
- : m_realDelegate(realDelegate)
- , m_virtualParent(nullptr)
+RenderWidgetHostViewQtDelegateQuickWindow::RenderWidgetHostViewQtDelegateQuickWindow(
+ RenderWidgetHostViewQtDelegateQuick *realDelegate, QWindow *parent)
+ : QQuickWindow(parent), m_realDelegate(realDelegate), m_virtualParent(nullptr)
{
setFlags(Qt::Tool | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint | Qt::WindowDoesNotAcceptFocus);
}
diff --git a/src/webengine/render_widget_host_view_qt_delegate_quickwindow.h b/src/webengine/render_widget_host_view_qt_delegate_quickwindow.h
index 647b014c5..555e56484 100644
--- a/src/webengine/render_widget_host_view_qt_delegate_quickwindow.h
+++ b/src/webengine/render_widget_host_view_qt_delegate_quickwindow.h
@@ -52,7 +52,8 @@ namespace QtWebEngineCore {
class RenderWidgetHostViewQtDelegateQuickWindow : public QQuickWindow , public RenderWidgetHostViewQtDelegate {
public:
- RenderWidgetHostViewQtDelegateQuickWindow(RenderWidgetHostViewQtDelegateQuick *realDelegate);
+ RenderWidgetHostViewQtDelegateQuickWindow(RenderWidgetHostViewQtDelegateQuick *realDelegate,
+ QWindow *parent);
~RenderWidgetHostViewQtDelegateQuickWindow();
void initAsPopup(const QRect&) override;