summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohan Klokkhammer Helsing <johan.helsing@qt.io>2019-06-05 13:10:38 +0200
committerJohan Klokkhammer Helsing <johan.helsing@qt.io>2019-06-06 08:53:52 +0200
commit2e4246ee71dd6689d3731e380f393185a1e3bd8e (patch)
treea35667ed2c826e8f3c363674474c56c0723d6af8
parent06cccc30c09830fe75f5757d9eae74f326af03e9 (diff)
Client: Don't add all windows to activePopupsv5.12.45.12.4
Neither Qt::ToolTip nor Qt::Popup are single bits in Qt::WindowFlags, and do in fact include Qt::Window. This meant that when we or'ed them and did a bitwise and with QWindow::type(), we would match more types than just Qt::Popup and Qt::ToolTip. We would for instance get any Qt::Window as well, which meant the main window would be added to activePopups, leading to strange things happening, such as crashes and the main window closing unexpectedly. [ChangeLog][QPA plugin] Fixed a crash when closing multiple popups at once. Fixes: QTBUG-76124 Change-Id: I1a6a59e161a436604a7ac8ab824396481dc99a20 Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io> (cherry picked from commit af9ec8a76d7e62444fadb518256fc58723fe5186)
-rw-r--r--dist/changes-5.12.41
-rw-r--r--src/client/qwaylandwindow.cpp2
2 files changed, 2 insertions, 1 deletions
diff --git a/dist/changes-5.12.4 b/dist/changes-5.12.4
index 0fb38030..672b9a7c 100644
--- a/dist/changes-5.12.4
+++ b/dist/changes-5.12.4
@@ -37,3 +37,4 @@ information about a particular change.
parent.
- Fixed a protocol error when an application tried to render to a window
before a shell or sub-surface was created.
+ - Fixed a crash when closing multiple popups at once.
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
index 58e0fc58..cecdbda9 100644
--- a/src/client/qwaylandwindow.cpp
+++ b/src/client/qwaylandwindow.cpp
@@ -393,7 +393,7 @@ QWaylandScreen *QWaylandWindow::calculateScreenFromSurfaceEvents() const
void QWaylandWindow::setVisible(bool visible)
{
if (visible) {
- if (window()->type() & (Qt::Popup | Qt::ToolTip))
+ if (window()->type() == Qt::Popup || window()->type() == Qt::ToolTip)
activePopups << this;
initWindow();
mDisplay->flushRequests();