A couple of fixes to win32u dpi handling, discovered while developing !4203.
From: Alexandros Frantzis alexandros.frantzis@collabora.com
Assume that the window rect passed NtUserIsWindowRectFullScreen is expressed in terms of thread dpi and convert monitor rects accordingly for proper matching. --- dlls/win32u/sysparams.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/dlls/win32u/sysparams.c b/dlls/win32u/sysparams.c index 4f2a299dd16..b134c5af680 100644 --- a/dlls/win32u/sysparams.c +++ b/dlls/win32u/sysparams.c @@ -2327,11 +2327,16 @@ static BOOL is_window_rect_full_screen( const RECT *rect )
LIST_FOR_EACH_ENTRY( monitor, &monitors, struct monitor, entry ) { + RECT monrect; + if (!(monitor->dev.state_flags & DISPLAY_DEVICE_ACTIVE)) continue;
- if (rect->left <= monitor->rc_monitor.left && rect->right >= monitor->rc_monitor.right && - rect->top <= monitor->rc_monitor.top && rect->bottom >= monitor->rc_monitor.bottom) + monrect = map_dpi_rect( monitor->rc_monitor, get_monitor_dpi( monitor->handle ), + get_thread_dpi() ); + + if (rect->left <= monrect.left && rect->right >= monrect.right && + rect->top <= monrect.top && rect->bottom >= monrect.bottom) { ret = TRUE; break;
From: Alexandros Frantzis alexandros.frantzis@collabora.com
--- dlls/win32u/window.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/dlls/win32u/window.c b/dlls/win32u/window.c index 4a57e0abde7..69dd8caba5d 100644 --- a/dlls/win32u/window.c +++ b/dlls/win32u/window.c @@ -2229,8 +2229,10 @@ HWND window_from_point( HWND hwnd, POINT pt, INT *hittest ) int i, res; HWND ret, *list; POINT win_pt; + int dpi;
if (!hwnd) hwnd = get_desktop_window(); + if (!(dpi = get_thread_dpi())) dpi = get_win_monitor_dpi( hwnd );
*hittest = HTNOWHERE;
@@ -2254,7 +2256,7 @@ HWND window_from_point( HWND hwnd, POINT pt, INT *hittest ) *hittest = HTCLIENT; break; } - win_pt = map_dpi_point( pt, get_thread_dpi(), get_dpi_for_window( list[i] )); + win_pt = map_dpi_point( pt, dpi, get_dpi_for_window( list[i] )); res = send_message( list[i], WM_NCHITTEST, 0, MAKELPARAM( win_pt.x, win_pt.y )); if (res != HTTRANSPARENT) {
Hi,
It looks like your patch introduced the new failures shown below. Please investigate and fix them before resubmitting your patch. If they are not new, fixing them anyway would help a lot. Otherwise please ask for the known failures list to be updated.
The tests also ran into some preexisting test failures. If you know how to fix them that would be helpful. See the TestBot job for the details:
The full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=139844
Your paranoid android.
=== debian11 (32 bit report) ===
user32: sysparams.c:4155: Test succeeded inside todo block: got 1 sysparams.c:4161: Test succeeded inside todo block: got 1
=== debian11 (32 bit ar:MA report) ===
user32: sysparams.c:4155: Test succeeded inside todo block: got 1 sysparams.c:4161: Test succeeded inside todo block: got 1
=== debian11 (32 bit de report) ===
user32: sysparams.c:4155: Test succeeded inside todo block: got 1 sysparams.c:4161: Test succeeded inside todo block: got 1
=== debian11 (32 bit fr report) ===
user32: sysparams.c:4155: Test succeeded inside todo block: got 1 sysparams.c:4161: Test succeeded inside todo block: got 1
=== debian11 (32 bit he:IL report) ===
user32: sysparams.c:4155: Test succeeded inside todo block: got 1 sysparams.c:4161: Test succeeded inside todo block: got 1
=== debian11 (32 bit hi:IN report) ===
user32: sysparams.c:4150: Test failed: got 0, expected 254 sysparams.c:4155: Test succeeded inside todo block: got 1 sysparams.c:4161: Test succeeded inside todo block: got 1
=== debian11 (32 bit ja:JP report) ===
user32: sysparams.c:4155: Test succeeded inside todo block: got 1 sysparams.c:4161: Test succeeded inside todo block: got 1
=== debian11 (32 bit zh:CN report) ===
user32: sysparams.c:4155: Test succeeded inside todo block: got 1 sysparams.c:4161: Test succeeded inside todo block: got 1
=== debian11b (32 bit WoW report) ===
user32: sysparams.c:4155: Test succeeded inside todo block: got 1 sysparams.c:4161: Test succeeded inside todo block: got 1
=== debian11b (64 bit WoW report) ===
user32: sysparams.c:4155: Test succeeded inside todo block: got 1 sysparams.c:4161: Test succeeded inside todo block: got 1