macOS: Update window geometries after screen properties change
Task-number: QTBUG-69794 Task-number: QTBUG-68140 Change-Id: I4d33bc2136478d779cc4ae8170c3421d9a7557cc Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
This commit is contained in:
parent
e7063e6cc6
commit
3068b185c5
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user