Zhiyi Zhang (@zhiyi) commented about dlls/win32u/defwnd.c:
case WM_NCCALCSIZE: return 0; case WM_DISPLAYCHANGE: - return user_driver->pDesktopWindowProc( hwnd, msg, wparam, lparam ); + { + static RECT old_rect; + RECT new_rect = NtUserGetVirtualScreenRect(); + + TRACE( "desktop %p change from %s to %s\n", hwnd, wine_dbgstr_rect( &old_rect ), wine_dbgstr_rect( &new_rect ) ); + + if (old_rect.left == new_rect.left && old_rect.top == new_rect.top) return TRUE;
If there is only one monitor and I change the monitor from 4k to 1080p, the left and top of the virtual screen rectangle remain (0, 0). So I think you need to also check for size changes here. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/5774#note_72179