Windows QPA: Fix missing QScreen change updates
Remove the logic compressing WM_DISPLAYCHANGE signals by the WParam/LParam since it also triggers when the geometry is changed by rearranging screens. Fixes: QTBUG-79442 Change-Id: I00042c9e687bdb67fc17d6c507818b79a7aee0a2 Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>bb10
parent
423e6c3635
commit
867b11596b
|
|
@ -1235,7 +1235,8 @@ bool QWindowsContext::windowsProc(HWND hwnd, UINT message,
|
|||
if (QWindowsTheme *t = QWindowsTheme::instance())
|
||||
t->displayChanged();
|
||||
QWindowsWindow::displayChanged();
|
||||
return d->m_screenManager.handleDisplayChange(wParam, lParam);
|
||||
d->m_screenManager.handleScreenChanges();
|
||||
return false;
|
||||
case QtWindows::SettingChangedEvent: {
|
||||
QWindowsWindow::settingsChanged();
|
||||
const bool darkMode = QWindowsTheme::queryDarkMode();
|
||||
|
|
|
|||
|
|
@ -537,30 +537,6 @@ bool QWindowsScreenManager::isSingleScreen()
|
|||
return QWindowsContext::instance()->screenManager().screens().size() < 2;
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief Triggers synchronization of screens (WM_DISPLAYCHANGE).
|
||||
|
||||
Subsequent events are compressed since WM_DISPLAYCHANGE is sent to
|
||||
each top level window.
|
||||
*/
|
||||
|
||||
bool QWindowsScreenManager::handleDisplayChange(WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
const int newDepth = int(wParam);
|
||||
const WORD newHorizontalResolution = LOWORD(lParam);
|
||||
const WORD newVerticalResolution = HIWORD(lParam);
|
||||
if (newDepth != m_lastDepth || newHorizontalResolution != m_lastHorizontalResolution
|
||||
|| newVerticalResolution != m_lastVerticalResolution) {
|
||||
m_lastDepth = newDepth;
|
||||
m_lastHorizontalResolution = newHorizontalResolution;
|
||||
m_lastVerticalResolution = newVerticalResolution;
|
||||
qCDebug(lcQpaWindows) << __FUNCTION__ << "Depth=" << newDepth
|
||||
<< ", resolution " << newHorizontalResolution << 'x' << newVerticalResolution;
|
||||
handleScreenChanges();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline int indexOfMonitor(const QWindowsScreenManager::WindowsScreenList &screens,
|
||||
const QString &monitorName)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -133,7 +133,6 @@ public:
|
|||
void clearScreens();
|
||||
|
||||
bool handleScreenChanges();
|
||||
bool handleDisplayChange(WPARAM wParam, LPARAM lParam);
|
||||
const WindowsScreenList &screens() const { return m_screens; }
|
||||
|
||||
const QWindowsScreen *screenAtDp(const QPoint &p) const;
|
||||
|
|
@ -145,9 +144,6 @@ private:
|
|||
void removeScreen(int index);
|
||||
|
||||
WindowsScreenList m_screens;
|
||||
int m_lastDepth = -1;
|
||||
WORD m_lastHorizontalResolution = 0;
|
||||
WORD m_lastVerticalResolution = 0;
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
|
|
|||
Loading…
Reference in New Issue