diff options
author | Gabriel de Dietrich <gabriel.dedietrich@digia.com> | 2013-05-21 15:09:28 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-05-23 12:49:39 +0200 |
commit | 602bd9873786ccadcb67da3036329f3122555cf8 (patch) | |
tree | 49cee7b06178f5e3b514bdd82e34d900325a3cf5 /src/gui/kernel/qwindow.cpp | |
parent | f610814b058b4639ef0d4d2592a8bcc3f81c974d (diff) |
Make QWindow update its screen when moved to a different one
Also implements the Cocoa backend for that.
Change-Id: I32977e12a04e1cf48b12333442482746c69ce133
Reviewed-by: Samuel Rødal <samuel.rodal@digia.com>
Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
Diffstat (limited to 'src/gui/kernel/qwindow.cpp')
-rw-r--r-- | src/gui/kernel/qwindow.cpp | 34 |
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) |