summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDavid Redondo <qt@david-redondo.de>2023-04-27 15:22:26 +0200
committerDavid Redondo <qt@david-redondo.de>2023-05-17 10:19:06 +0200
commit07cf229f53ab15bb87b943aa07617681a6088d53 (patch)
tree326aa7ebcada2d00cf563b20c60e154d90d08067 /src
parent851a01767850b49b4c691a1694252530857e8518 (diff)
downloadqtwayland-07cf229f53ab15bb87b943aa07617681a6088d53.tar.gz
Properly clean up screens during reconnect
Otherwise the old screens are left dangling. Also create a placeholder screen so the windows get assigned a valid screen upon reconnect. Change-Id: Iea5d1da6f32be5e87464412447ae1449d91d8e75 Reviewed-by: David Edmundson <davidedmundson@kde.org>
Diffstat (limited to 'src')
-rw-r--r--src/client/qwaylanddisplay.cpp9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp
index b7e212ab..911004f8 100644
--- a/src/client/qwaylanddisplay.cpp
+++ b/src/client/qwaylanddisplay.cpp
@@ -420,6 +420,12 @@ void QWaylandDisplay::reconnect()
qDeleteAll(mWaitingScreens);
mWaitingScreens.clear();
+ const auto screens = std::exchange(mScreens, {});
+ ensureScreen();
+ for (QWaylandScreen *screen : screens) {
+ QWindowSystemInterface::handleScreenRemoved(screen);
+ }
+
// mCompositor
mShm.reset();
mCursorThemes.clear();
@@ -449,9 +455,6 @@ void QWaylandDisplay::reconnect()
qDeleteAll(std::exchange(mInputDevices, {}));
mLastInputDevice = nullptr;
- auto screens = mScreens;
- mScreens.clear();
-
for (const RegistryGlobal &global : mGlobals) {
emit globalRemoved(global);
}