diff options
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoascreen.mm | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoascreen.mm b/src/plugins/platforms/cocoa/qcocoascreen.mm index a17a02b629..3e8261dfc2 100644 --- a/src/plugins/platforms/cocoa/qcocoascreen.mm +++ b/src/plugins/platforms/cocoa/qcocoascreen.mm @@ -138,6 +138,20 @@ void QCocoaScreen::updateGeometry() QWindowSystemInterface::handleScreenGeometryChange(screen(), geometry(), availableGeometry()); QWindowSystemInterface::handleScreenLogicalDotsPerInchChange(screen(), m_logicalDpi.first, m_logicalDpi.second); QWindowSystemInterface::handleScreenRefreshRateChange(screen(), m_refreshRate); + + // When a screen changes its geometry, AppKit will send us a NSWindowDidMoveNotification + // for each window, resulting in calls to handleGeometryChange(), but this happens before + // the NSApplicationDidChangeScreenParametersNotification, so when we map the new geometry + // (which is correct at that point) to the screen using QCocoaScreen::mapFromNative(), we + // end up using the stale screen geometry, and the new window geometry we report is wrong. + // To make sure we finally report the correct window geometry, we need to do another pass + // of geometry reporting, now that the screen properties have been updates. FIXME: Ideally + // this would be solved by not caching the screen properties in QCocoaScreen, but that + // requires more research. + for (QWindow *window : windows()) { + if (QCocoaWindow *cocoaWindow = static_cast<QCocoaWindow*>(window->handle())) + cocoaWindow->handleGeometryChange(); + } } qreal QCocoaScreen::devicePixelRatio() const |