bf173231d5
Fix inverse repeat rate implementation
49 lines
2.0 KiB
Diff
49 lines
2.0 KiB
Diff
From 962b9be7992cef672cb6307af5653c97382c334f Mon Sep 17 00:00:00 2001
|
|
From: Johan Klokkhammer Helsing <johan.helsing@qt.io>
|
|
Date: Fri, 1 Nov 2019 11:24:26 +0100
|
|
Subject: Client: Fix crash when showing a child window with a hidden parent
|
|
|
|
[ChangeLog][QPA plugin] Fixed a crash when showing a window with a hidden
|
|
parent.
|
|
|
|
Now we just avoid creating the subsurface, so nothing is shown. Seems to be
|
|
the same behavior as on xcb.
|
|
|
|
Fixes: QTBUG-79674
|
|
Change-Id: Ia46fcd9a0da5aad4704816a41515cb1e128ac65f
|
|
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
|
|
|
|
diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp
|
|
index 78524f6f..27e38ccf 100644
|
|
--- a/src/client/qwaylanddisplay.cpp
|
|
+++ b/src/client/qwaylanddisplay.cpp
|
|
@@ -109,6 +109,10 @@ struct ::wl_region *QWaylandDisplay::createRegion(const QRegion &qregion)
|
|
return nullptr;
|
|
}
|
|
|
|
+ // Make sure we don't pass NULL surfaces to libwayland (crashes)
|
|
+ Q_ASSERT(parent->object());
|
|
+ Q_ASSERT(window->object());
|
|
+
|
|
return mSubCompositor->get_subsurface(window->object(), parent->object());
|
|
}
|
|
|
|
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
|
|
index 8d34afd1..7098568b 100644
|
|
--- a/src/client/qwaylandwindow.cpp
|
|
+++ b/src/client/qwaylandwindow.cpp
|
|
@@ -124,9 +124,10 @@ void QWaylandWindow::initWindow()
|
|
if (shouldCreateSubSurface()) {
|
|
Q_ASSERT(!mSubSurfaceWindow);
|
|
|
|
- QWaylandWindow *p = static_cast<QWaylandWindow *>(QPlatformWindow::parent());
|
|
- if (::wl_subsurface *ss = mDisplay->createSubSurface(this, p)) {
|
|
- mSubSurfaceWindow = new QWaylandSubSurface(this, p, ss);
|
|
+ auto *parent = static_cast<QWaylandWindow *>(QPlatformWindow::parent());
|
|
+ if (parent->object()) {
|
|
+ if (::wl_subsurface *subsurface = mDisplay->createSubSurface(this, parent))
|
|
+ mSubSurfaceWindow = new QWaylandSubSurface(this, parent, subsurface);
|
|
}
|
|
} else if (shouldCreateShellSurface()) {
|
|
Q_ASSERT(!mShellSurface);
|