diff options
author | David Redondo <qt@david-redondo.de> | 2023-04-27 15:22:26 +0200 |
---|---|---|
committer | David Redondo <qt@david-redondo.de> | 2023-05-17 10:19:06 +0200 |
commit | 07cf229f53ab15bb87b943aa07617681a6088d53 (patch) | |
tree | 326aa7ebcada2d00cf563b20c60e154d90d08067 /src | |
parent | 851a01767850b49b4c691a1694252530857e8518 (diff) | |
download | qtwayland-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.cpp | 9 |
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); } |