Emit QScreen::geometryChanged when the logical DPI changes

Add the missing call to QScreenPrivate::emitGeometryChangeSignals()
along with an emission of physicalDotsPerInchChanged()
since that is calculated from geometry and physical size.

Rearrange the code in
QGuiApplicationPrivate::processScreenGeometryChange()
to prevent duplicate emissions of geometryChanged(),
physicalDotsPerInchChanged() which this change would introduce.

Amends 5290027e3bab75f14fc0a2b7c206594d9cb91e76.

Pick-to: 5.15
Task-number: QTBUG-76902
Task-number: QTBUG-79248
Fixes: QTBUG-86604
Change-Id: I3dc2ec5ccd9c6413e92f9246242f323e8afc5e57
Reviewed-by: David Edmundson <davidedmundson@kde.org>
This commit is contained in:
Friedemann Kleint 2020-09-25 14:10:58 +02:00
parent 5add30c8ca
commit 5c7307775d
2 changed files with 11 additions and 6 deletions

View File

@ -3073,21 +3073,20 @@ void QGuiApplicationPrivate::processScreenGeometryChange(QWindowSystemInterfaceP
bool availableGeometryChanged = e->availableGeometry != s->d_func()->availableGeometry; bool availableGeometryChanged = e->availableGeometry != s->d_func()->availableGeometry;
s->d_func()->availableGeometry = e->availableGeometry; s->d_func()->availableGeometry = e->availableGeometry;
if (geometryChanged) { const Qt::ScreenOrientation primaryOrientation = s->primaryOrientation();
Qt::ScreenOrientation primaryOrientation = s->primaryOrientation(); if (geometryChanged)
s->d_func()->updatePrimaryOrientation(); s->d_func()->updatePrimaryOrientation();
emit s->geometryChanged(s->geometry()); s->d_func()->emitGeometryChangeSignals(geometryChanged, availableGeometryChanged);
if (geometryChanged) {
emit s->physicalSizeChanged(s->physicalSize()); emit s->physicalSizeChanged(s->physicalSize());
emit s->physicalDotsPerInchChanged(s->physicalDotsPerInch());
emit s->logicalDotsPerInchChanged(s->logicalDotsPerInch()); emit s->logicalDotsPerInchChanged(s->logicalDotsPerInch());
if (s->primaryOrientation() != primaryOrientation) if (s->primaryOrientation() != primaryOrientation)
emit s->primaryOrientationChanged(s->primaryOrientation()); emit s->primaryOrientationChanged(s->primaryOrientation());
} }
s->d_func()->emitGeometryChangeSignals(geometryChanged, availableGeometryChanged);
resetCachedDevicePixelRatio(); resetCachedDevicePixelRatio();
} }

View File

@ -88,6 +88,9 @@ void QScreenPrivate::updateGeometriesWithSignals()
void QScreenPrivate::emitGeometryChangeSignals(bool geometryChanged, bool availableGeometryChanged) void QScreenPrivate::emitGeometryChangeSignals(bool geometryChanged, bool availableGeometryChanged)
{ {
Q_Q(QScreen); Q_Q(QScreen);
if (geometryChanged)
emit q->geometryChanged(geometry);
if (availableGeometryChanged) if (availableGeometryChanged)
emit q->availableGeometryChanged(availableGeometry); emit q->availableGeometryChanged(availableGeometry);
@ -96,6 +99,9 @@ void QScreenPrivate::emitGeometryChangeSignals(bool geometryChanged, bool availa
for (QScreen* sibling : siblings) for (QScreen* sibling : siblings)
emit sibling->virtualGeometryChanged(sibling->virtualGeometry()); emit sibling->virtualGeometryChanged(sibling->virtualGeometry());
} }
if (geometryChanged)
emit q->physicalDotsPerInchChanged(q->physicalDotsPerInch());
} }
void QScreenPrivate::setPlatformScreen(QPlatformScreen *screen) void QScreenPrivate::setPlatformScreen(QPlatformScreen *screen)