From 75fd4b4669afa9c699b35cd7e0f88f402294c1be Mon Sep 17 00:00:00 2001 From: Johan Klokkhammer Helsing Date: Tue, 11 Feb 2020 15:45:32 +0100 Subject: [PATCH] Client: Workaround for QPlatformWindow::setVisible(true) being called twice Fixes a crash. Otherwise we created two shell surface objects in some cases. Change-Id: Ieded56261061da6acf27ccabba81c8f578ca1596 Reviewed-by: Pier Luigi Fiorini --- src/plugins/platforms/wayland/qwaylandwindow.cpp | 5 +++++ src/plugins/platforms/wayland/qwaylandwindow_p.h | 1 + 2 files changed, 6 insertions(+) diff --git a/src/plugins/platforms/wayland/qwaylandwindow.cpp b/src/plugins/platforms/wayland/qwaylandwindow.cpp index c8a01dc2e3f..3a335563c93 100644 --- a/src/plugins/platforms/wayland/qwaylandwindow.cpp +++ b/src/plugins/platforms/wayland/qwaylandwindow.cpp @@ -414,6 +414,11 @@ QPlatformScreen *QWaylandWindow::calculateScreenFromSurfaceEvents() const void QWaylandWindow::setVisible(bool visible) { + // Workaround for issue where setVisible may be called with the same value twice + if (lastVisible == visible) + return; + lastVisible = visible; + if (visible) { if (window()->type() == Qt::Popup || window()->type() == Qt::ToolTip) activePopups << this; diff --git a/src/plugins/platforms/wayland/qwaylandwindow_p.h b/src/plugins/platforms/wayland/qwaylandwindow_p.h index 823e4a9701b..352df89daf6 100644 --- a/src/plugins/platforms/wayland/qwaylandwindow_p.h +++ b/src/plugins/platforms/wayland/qwaylandwindow_p.h @@ -270,6 +270,7 @@ private: void handleScreensChanged(); bool mInResizeFromApplyConfigure = false; + bool lastVisible = false; QRect mLastExposeGeometry; static const wl_callback_listener callbackListener;