[Windows] Update hMonitor handles when a display is turned off
In a multi-monitor setup, when the main display is turned off or disconnected, all remaining monitors have their hMonitor handle changed. Qt did not store these updated handles, which led to not posting the WindowScreenChanged event when a window was moved to a different DPI-scaled display, leading to e.g. improperly scaled popup menus. The fix consists in updating the hMonitor handles whenever a new monitor is connected or disconnected. Change-Id: Id2ca2c128510d9ff3e9746eb33e86dce8f6c4c83 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>bb10
parent
e4c39d5e1e
commit
7beb2bc02b
|
|
@ -153,7 +153,8 @@ static QDebug operator<<(QDebug dbg, const QWindowsScreenData &d)
|
|||
<< d.availableGeometry.width() << 'x' << d.availableGeometry.height() << '+' << d.availableGeometry.x() << '+' << d.availableGeometry.y()
|
||||
<< " physical: " << d.physicalSizeMM.width() << 'x' << d.physicalSizeMM.height()
|
||||
<< " DPI: " << d.dpi.first << 'x' << d.dpi.second << " Depth: " << d.depth
|
||||
<< " Format: " << d.format;
|
||||
<< " Format: " << d.format
|
||||
<< " hMonitor: " << d.hMonitor;
|
||||
if (d.flags & QWindowsScreenData::PrimaryScreen)
|
||||
dbg << " primary";
|
||||
if (d.flags & QWindowsScreenData::VirtualDesktop)
|
||||
|
|
@ -290,6 +291,13 @@ void QWindowsScreen::handleChanges(const QWindowsScreenData &newData)
|
|||
{
|
||||
m_data.physicalSizeMM = newData.physicalSizeMM;
|
||||
|
||||
if (m_data.hMonitor != newData.hMonitor) {
|
||||
qCDebug(lcQpaWindows) << "Monitor" << m_data.name
|
||||
<< "has had its hMonitor handle changed from"
|
||||
<< m_data.hMonitor << "to" << newData.hMonitor;
|
||||
m_data.hMonitor = newData.hMonitor;
|
||||
}
|
||||
|
||||
if (m_data.geometry != newData.geometry || m_data.availableGeometry != newData.availableGeometry) {
|
||||
m_data.geometry = newData.geometry;
|
||||
m_data.availableGeometry = newData.availableGeometry;
|
||||
|
|
|
|||
Loading…
Reference in New Issue