summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Olav Tvete <paul.tvete@theqtcompany.com>2015-04-15 14:00:10 +0200
committerPaul Olav Tvete <paul.tvete@theqtcompany.com>2015-04-15 15:27:48 +0200
commit4e541c356943fa304b2841b5234a689c4cc93f45 (patch)
tree9a8b75be9b14229ccbf9edd4541ac7305931d5dd
parent9897e1a2bdec3b1cae1d17fd3adaa44bca9f96cc (diff)
Fix screen detection on configureNotify
If we got two rapid screen changes in a row, we would disregard the second change. This happens because QPlatformScreen::screen() is updated asynchronously, so if we got a screen change A --> B immediately followed by B --> A, before the first screen change event had been processed, we would compare with the old value and conclude nothing had changed. This can happen on creation: if the initial geometry of the window is outside all physical screens, the window manager will immediately move it. The solution is to compare the new screen to the locally cached value. Change-Id: I5440dc035cac4fba4f29ac563e36dfe3e2f82aea Task-number: QTBUG-45076
-rw-r--r--src/plugins/platforms/xcb/qxcbwindow.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp
index 8c22ad19dd..c1792c7b1e 100644
--- a/src/plugins/platforms/xcb/qxcbwindow.cpp
+++ b/src/plugins/platforms/xcb/qxcbwindow.cpp
@@ -2031,6 +2031,7 @@ void QXcbWindow::handleConfigureNotifyEvent(const xcb_configure_notify_event_t *
const QRect nativeRect = QRect(pos, QSize(event->width, event->height));
QXcbScreen *newScreen = parent() ? parentScreen() : screenForNativeGeometry(nativeRect);
+ QXcbScreen *currentScreen = m_xcbScreen;
m_xcbScreen = newScreen;
if (!newScreen)
return;
@@ -2038,7 +2039,7 @@ void QXcbWindow::handleConfigureNotifyEvent(const xcb_configure_notify_event_t *
QPlatformWindow::setGeometry(rect);
QWindowSystemInterface::handleGeometryChange(window(), rect);
- if (newScreen != screen())
+ if (newScreen != currentScreen)
QWindowSystemInterface::handleWindowScreenChanged(window(), newScreen->QPlatformScreen::screen());
m_configureNotifyPending = false;