diff options
Diffstat (limited to 'src/plugins/platforms/cocoa/qcocoascreen.mm')
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoascreen.mm | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoascreen.mm b/src/plugins/platforms/cocoa/qcocoascreen.mm index 80fe83cc5b..c15fea837f 100644 --- a/src/plugins/platforms/cocoa/qcocoascreen.mm +++ b/src/plugins/platforms/cocoa/qcocoascreen.mm @@ -59,7 +59,7 @@ class QFontEngineFT; QCocoaScreen::QCocoaScreen(int screenIndex) : QPlatformScreen(), m_screenIndex(screenIndex), m_refreshRate(60.0) { - updateGeometry(); + updateProperties(); m_cursor = new QCocoaCursor; } @@ -115,12 +115,17 @@ static QString displayName(CGDirectDisplayID displayID) return QString(); } -void QCocoaScreen::updateGeometry() +void QCocoaScreen::updateProperties() { NSScreen *nsScreen = nativeScreen(); if (!nsScreen) return; + const QRect previousGeometry = m_geometry; + const QRect previousAvailableGeometry = m_availableGeometry; + const QDpi previousLogicalDpi = m_logicalDpi; + const qreal previousRefreshRate = m_refreshRate; + // The reference screen for the geometry is always the primary screen QRectF primaryScreenGeometry = QRectF::fromCGRect([[NSScreen screens] firstObject].frame); m_geometry = qt_mac_flip(QRectF::fromCGRect(nsScreen.frame), primaryScreenGeometry).toRect(); @@ -142,9 +147,14 @@ void QCocoaScreen::updateGeometry() m_name = displayName(dpy); - QWindowSystemInterface::handleScreenGeometryChange(screen(), geometry(), availableGeometry()); - QWindowSystemInterface::handleScreenLogicalDotsPerInchChange(screen(), m_logicalDpi.first, m_logicalDpi.second); - QWindowSystemInterface::handleScreenRefreshRateChange(screen(), m_refreshRate); + if (m_geometry != previousGeometry || m_availableGeometry != previousAvailableGeometry) + QWindowSystemInterface::handleScreenGeometryChange(screen(), geometry(), availableGeometry()); + if (m_logicalDpi != previousLogicalDpi) + QWindowSystemInterface::handleScreenLogicalDotsPerInchChange(screen(), m_logicalDpi.first, m_logicalDpi.second); + if (m_refreshRate != previousRefreshRate) + QWindowSystemInterface::handleScreenRefreshRateChange(screen(), m_refreshRate); + + qCDebug(lcQpaScreen) << "Updated properties for" << this; } // ----------------------- Display link ----------------------- |