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;
s->d_func()->availableGeometry = e->availableGeometry;
if (geometryChanged) {
Qt::ScreenOrientation primaryOrientation = s->primaryOrientation();
const Qt::ScreenOrientation primaryOrientation = s->primaryOrientation();
if (geometryChanged)
s->d_func()->updatePrimaryOrientation();
emit s->geometryChanged(s->geometry());
s->d_func()->emitGeometryChangeSignals(geometryChanged, availableGeometryChanged);
if (geometryChanged) {
emit s->physicalSizeChanged(s->physicalSize());
emit s->physicalDotsPerInchChanged(s->physicalDotsPerInch());
emit s->logicalDotsPerInchChanged(s->logicalDotsPerInch());
if (s->primaryOrientation() != primaryOrientation)
emit s->primaryOrientationChanged(s->primaryOrientation());
}
s->d_func()->emitGeometryChangeSignals(geometryChanged, availableGeometryChanged);
resetCachedDevicePixelRatio();
}

View File

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