summaryrefslogtreecommitdiffstats
path: root/src/gui/kernel/qwindow.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/kernel/qwindow.cpp')
-rw-r--r--src/gui/kernel/qwindow.cpp34
1 files changed, 20 insertions, 14 deletions
diff --git a/src/gui/kernel/qwindow.cpp b/src/gui/kernel/qwindow.cpp
index 918c2e0b97..68ba1901c1 100644
--- a/src/gui/kernel/qwindow.cpp
+++ b/src/gui/kernel/qwindow.cpp
@@ -345,6 +345,25 @@ void QWindowPrivate::updateVisibility()
emit q->visibilityChanged(visibility);
}
+void QWindowPrivate::setScreen(QScreen *newScreen, bool recreate)
+{
+ Q_Q(QWindow);
+ if (newScreen != q->screen()) {
+ const bool shouldRecreate = recreate && platformWindow != 0;
+ if (shouldRecreate)
+ q->destroy();
+ if (screen)
+ q->disconnect(screen, SIGNAL(destroyed(QObject*)), q, SLOT(screenDestroyed(QObject*)));
+ screen = newScreen;
+ if (newScreen) {
+ q->connect(screen, SIGNAL(destroyed(QObject*)), q, SLOT(screenDestroyed(QObject*)));
+ if (shouldRecreate)
+ q->create();
+ }
+ emit q->screenChanged(newScreen);
+ }
+}
+
/*!
Sets the \a surfaceType of the window.
@@ -1568,20 +1587,7 @@ void QWindow::setScreen(QScreen *newScreen)
Q_D(QWindow);
if (!newScreen)
newScreen = QGuiApplication::primaryScreen();
- if (newScreen != screen()) {
- const bool wasCreated = d->platformWindow != 0;
- if (wasCreated)
- destroy();
- if (d->screen)
- disconnect(d->screen, SIGNAL(destroyed(QObject*)), this, SLOT(screenDestroyed(QObject*)));
- d->screen = newScreen;
- if (newScreen) {
- connect(d->screen, SIGNAL(destroyed(QObject*)), this, SLOT(screenDestroyed(QObject*)));
- if (wasCreated)
- create();
- }
- emit screenChanged(newScreen);
- }
+ d->setScreen(newScreen, true /* recreate */);
}
void QWindow::screenDestroyed(QObject *object)