From 9b2f59cb94d5aa7b8fbe4e0373d933a630b51dc1 Mon Sep 17 00:00:00 2001 From: Zhiyi Zhang Date: Tue, 18 May 2021 17:11:25 +0800 Subject: [PATCH] user32: Use get_primary_monitor_rect() helper. Signed-off-by: Zhiyi Zhang Signed-off-by: Alexandre Julliard --- dlls/user32/input.c | 16 +++++++--------- dlls/user32/sysparams.c | 6 ++---- dlls/user32/user_private.h | 1 + dlls/user32/win.c | 3 +-- dlls/user32/winpos.c | 7 ++++--- 5 files changed, 15 insertions(+), 18 deletions(-) diff --git a/dlls/user32/input.c b/dlls/user32/input.c index ba0292c8f88..b4e3579f5e8 100644 --- a/dlls/user32/input.c +++ b/dlls/user32/input.c @@ -195,17 +195,15 @@ static void update_mouse_coords( INPUT *input ) if (input->u.mi.dwFlags & MOUSEEVENTF_ABSOLUTE) { DPI_AWARENESS_CONTEXT context = SetThreadDpiAwarenessContext( DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE ); + RECT rc; + if (input->u.mi.dwFlags & MOUSEEVENTF_VIRTUALDESK) - { - RECT rc = get_virtual_screen_rect(); - input->u.mi.dx = rc.left + ((input->u.mi.dx * (rc.right - rc.left)) >> 16); - input->u.mi.dy = rc.top + ((input->u.mi.dy * (rc.bottom - rc.top)) >> 16); - } + rc = get_virtual_screen_rect(); else - { - input->u.mi.dx = (input->u.mi.dx * GetSystemMetrics( SM_CXSCREEN )) >> 16; - input->u.mi.dy = (input->u.mi.dy * GetSystemMetrics( SM_CYSCREEN )) >> 16; - } + rc = get_primary_monitor_rect(); + + input->u.mi.dx = rc.left + ((input->u.mi.dx * (rc.right - rc.left)) >> 16); + input->u.mi.dy = rc.top + ((input->u.mi.dy * (rc.bottom - rc.top)) >> 16); SetThreadDpiAwarenessContext( context ); } else diff --git a/dlls/user32/sysparams.c b/dlls/user32/sysparams.c index 3d0cb2a6566..015db0db50e 100644 --- a/dlls/user32/sysparams.c +++ b/dlls/user32/sysparams.c @@ -366,7 +366,7 @@ static BOOL CALLBACK get_primary_monitor_proc( HMONITOR monitor, HDC hdc, LPRECT return TRUE; } -static RECT get_primary_monitor_rect(void) +RECT get_primary_monitor_rect(void) { RECT rect = {0}; @@ -1818,9 +1818,7 @@ BOOL WINAPI SystemParametersInfoW( UINT uiAction, UINT uiParam, spi_idx = SPI_SETWORKAREA_IDX; if (!spi_loaded[spi_idx]) { - SetRect( &work_area, 0, 0, - GetSystemMetrics( SM_CXSCREEN ), - GetSystemMetrics( SM_CYSCREEN ) ); + work_area = get_primary_monitor_rect(); EnumDisplayMonitors( 0, NULL, enum_monitors, (LPARAM)&work_area ); spi_loaded[spi_idx] = TRUE; } diff --git a/dlls/user32/user_private.h b/dlls/user32/user_private.h index 974d18be482..82cf376ef54 100644 --- a/dlls/user32/user_private.h +++ b/dlls/user32/user_private.h @@ -261,6 +261,7 @@ extern void update_window_state( HWND hwnd ) DECLSPEC_HIDDEN; extern void wait_graphics_driver_ready(void) DECLSPEC_HIDDEN; extern void *get_hook_proc( void *proc, const WCHAR *module, HMODULE *free_module ) DECLSPEC_HIDDEN; extern RECT get_virtual_screen_rect(void) DECLSPEC_HIDDEN; +extern RECT get_primary_monitor_rect(void) DECLSPEC_HIDDEN; extern LRESULT call_current_hook( HHOOK hhook, INT code, WPARAM wparam, LPARAM lparam ) DECLSPEC_HIDDEN; extern DWORD get_input_codepage( void ) DECLSPEC_HIDDEN; extern BOOL map_wparam_AtoW( UINT message, WPARAM *wparam, enum wm_char_mapping mapping ) DECLSPEC_HIDDEN; diff --git a/dlls/user32/win.c b/dlls/user32/win.c index 680defc2071..86a1f50ca77 100644 --- a/dlls/user32/win.c +++ b/dlls/user32/win.c @@ -855,8 +855,7 @@ BOOL WIN_GetRectangles( HWND hwnd, enum coords_relative relative, RECT *rectWind } else { - rect.right = GetSystemMetrics(SM_CXSCREEN); - rect.bottom = GetSystemMetrics(SM_CYSCREEN); + rect = get_primary_monitor_rect(); } if (rectWindow) *rectWindow = rect; if (rectClient) *rectClient = rect; diff --git a/dlls/user32/winpos.c b/dlls/user32/winpos.c index de5d50d4c3a..5a2b8ccdfe8 100644 --- a/dlls/user32/winpos.c +++ b/dlls/user32/winpos.c @@ -740,7 +740,7 @@ MINMAXINFO WINPOS_GetMinMaxInfo( HWND hwnd ) if ((monitor = MonitorFromWindow( hwnd, MONITOR_DEFAULTTOPRIMARY ))) { - RECT rc_work; + RECT rc_work, rc_primary; MONITORINFO mon_info; mon_info.cbSize = sizeof(mon_info); @@ -754,8 +754,9 @@ MINMAXINFO WINPOS_GetMinMaxInfo( HWND hwnd ) rc_work = mon_info.rcWork; } - if (MinMax.ptMaxSize.x == GetSystemMetrics(SM_CXSCREEN) + 2 * xinc && - MinMax.ptMaxSize.y == GetSystemMetrics(SM_CYSCREEN) + 2 * yinc) + rc_primary = get_primary_monitor_rect(); + if (MinMax.ptMaxSize.x == (rc_primary.right - rc_primary.left) + 2 * xinc && + MinMax.ptMaxSize.y == (rc_primary.bottom - rc_primary.top) + 2 * yinc) { MinMax.ptMaxSize.x = (rc_work.right - rc_work.left) + 2 * xinc; MinMax.ptMaxSize.y = (rc_work.bottom - rc_work.top) + 2 * yinc;