hc
2024-08-16 94ba65e25ce534ec0515708c9e0835242345bc7b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
From ca05a6cec7ef6fb5d55eb1a81869b53076d29d4e Mon Sep 17 00:00:00 2001
From: Jeffy Chen <jeffy.chen@rock-chips.com>
Date: Fri, 6 Mar 2020 17:20:40 +0800
Subject: [PATCH 19/31] qscreen: Update toplevel windows' screen when needed
 
Update toplevel windows' screen when creating new primary screen, since
we cleared it during destroying the old one.
 
Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
---
 src/gui/kernel/qscreen.cpp | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)
 
diff --git a/src/gui/kernel/qscreen.cpp b/src/gui/kernel/qscreen.cpp
index e33d77c1..90c1fae7 100644
--- a/src/gui/kernel/qscreen.cpp
+++ b/src/gui/kernel/qscreen.cpp
@@ -74,7 +74,23 @@ QScreen::QScreen(QPlatformScreen *screen)
     : QObject(*new QScreenPrivate(), nullptr)
 {
     Q_D(QScreen);
+    QScreen *primaryScreen = QGuiApplication::primaryScreen();
+
     d->setPlatformScreen(screen);
+
+    if (primaryScreen)
+        return;
+
+    // Move any leftover windows to this new screen
+    const auto allWindows = QGuiApplication::allWindows();
+    for (QWindow *window : allWindows) {
+        if (!window->isTopLevel())
+            continue;
+
+        const bool wasVisible = window->isVisible();
+        window->setScreen(this);
+        window->setVisible(wasVisible);
+    }
 }
 
 void QScreenPrivate::updateGeometriesWithSignals()
-- 
2.20.1