Module: wine Branch: master Commit: ee405dd8b88683417af1e21ae6a254edadc32723 URL: https://source.winehq.org/git/wine.git/?a=commit;h=ee405dd8b88683417af1e21ae...
Author: Jacek Caban jacek@codeweavers.com Date: Wed Apr 20 16:00:23 2022 +0200
win32u: Move is_window_rect_full_screen implementation from winex11.
Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Huw Davies huw@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/win32u/sysparams.c | 24 ++++++++++++++++++++++++ dlls/winex11.drv/event.c | 2 +- dlls/winex11.drv/mouse.c | 2 +- dlls/winex11.drv/window.c | 34 +++------------------------------- dlls/winex11.drv/x11drv.h | 1 - include/ntuser.h | 6 ++++++ 6 files changed, 35 insertions(+), 34 deletions(-)
diff --git a/dlls/win32u/sysparams.c b/dlls/win32u/sysparams.c index 49f3f716b2d..1e8b0fbf489 100644 --- a/dlls/win32u/sysparams.c +++ b/dlls/win32u/sysparams.c @@ -1547,6 +1547,27 @@ RECT get_virtual_screen_rect( UINT dpi ) return rect; }
+static BOOL is_window_rect_full_screen( const RECT *rect ) +{ + struct monitor *monitor; + BOOL ret = FALSE; + + if (!lock_display_devices()) return FALSE; + + LIST_FOR_EACH_ENTRY( monitor, &monitors, struct monitor, entry ) + { + 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) + { + ret = TRUE; + break; + } + } + + unlock_display_devices(); + return ret; +} + RECT get_display_rect( const WCHAR *display ) { struct monitor *monitor; @@ -4698,6 +4719,9 @@ ULONG_PTR WINAPI NtUserCallOneParam( ULONG_PTR arg, ULONG code ) case NtUserCallOneParam_GetSysColor: return get_sys_color( arg );
+ case NtUserCallOneParam_IsWindowRectFullScreen: + return is_window_rect_full_screen( (const RECT *)arg ); + case NtUserCallOneParam_RealizePalette: return realize_palette( UlongToHandle(arg) );
diff --git a/dlls/winex11.drv/event.c b/dlls/winex11.drv/event.c index 900f24c4002..e1bcd70d35a 100644 --- a/dlls/winex11.drv/event.c +++ b/dlls/winex11.drv/event.c @@ -1156,7 +1156,7 @@ static BOOL X11DRV_ConfigureNotify( HWND hwnd, XEvent *xev ) data->window_rect.bottom - data->window_rect.top, cx, cy );
style = NtUserGetWindowLongW( data->hwnd, GWL_STYLE ); - if ((style & WS_CAPTION) == WS_CAPTION || !is_window_rect_full_screen( &data->whole_rect )) + if ((style & WS_CAPTION) == WS_CAPTION || !NtUserIsWindowRectFullScreen( &data->whole_rect )) { read_net_wm_states( event->display, data ); if ((data->net_wm_state & (1 << NET_WM_STATE_MAXIMIZED))) diff --git a/dlls/winex11.drv/mouse.c b/dlls/winex11.drv/mouse.c index 82d3e17a0d1..5bebcf42fb2 100644 --- a/dlls/winex11.drv/mouse.c +++ b/dlls/winex11.drv/mouse.c @@ -549,7 +549,7 @@ BOOL clip_fullscreen_window( HWND hwnd, BOOL reset ) /* maximized windows don't count as full screen */ if ((style & WS_MAXIMIZE) && (style & WS_CAPTION) == WS_CAPTION) return FALSE; if (!(data = get_win_data( hwnd ))) return FALSE; - fullscreen = is_window_rect_full_screen( &data->whole_rect ); + fullscreen = NtUserIsWindowRectFullScreen( &data->whole_rect ); release_win_data( data ); if (!fullscreen) return FALSE; if (!(thread_data = x11drv_thread_data())) return FALSE; diff --git a/dlls/winex11.drv/window.c b/dlls/winex11.drv/window.c index 4c4e47884ff..bed5081d124 100644 --- a/dlls/winex11.drv/window.c +++ b/dlls/winex11.drv/window.c @@ -281,35 +281,7 @@ static inline BOOL is_window_resizable( struct x11drv_win_data *data, DWORD styl { if (style & WS_THICKFRAME) return TRUE; /* Metacity needs the window to be resizable to make it fullscreen */ - return is_window_rect_full_screen( &data->whole_rect ); -} - -struct monitor_info -{ - const RECT *rect; - BOOL full_screen; -}; - -static BOOL CALLBACK enum_monitor_proc( HMONITOR monitor, HDC hdc, RECT *monitor_rect, LPARAM lparam ) -{ - struct monitor_info *info = (struct monitor_info *)lparam; - - if (info->rect->left <= monitor_rect->left && info->rect->right >= monitor_rect->right && - info->rect->top <= monitor_rect->top && info->rect->bottom >= monitor_rect->bottom) - { - info->full_screen = TRUE; - return FALSE; - } - - return TRUE; -} - -BOOL is_window_rect_full_screen( const RECT *rect ) -{ - struct monitor_info info = {rect, FALSE}; - - EnumDisplayMonitors( NULL, NULL, enum_monitor_proc, (LPARAM)&info ); - return info.full_screen; + return NtUserIsWindowRectFullScreen( &data->whole_rect ); }
/*********************************************************************** @@ -992,7 +964,7 @@ void update_net_wm_states( struct x11drv_win_data *data ) style = NtUserGetWindowLongW( data->hwnd, GWL_STYLE ); if (style & WS_MINIMIZE) new_state |= data->net_wm_state & ((1 << NET_WM_STATE_FULLSCREEN)|(1 << NET_WM_STATE_MAXIMIZED)); - if (is_window_rect_full_screen( &data->whole_rect )) + if (NtUserIsWindowRectFullScreen( &data->whole_rect )) { if ((style & WS_MAXIMIZE) && (style & WS_CAPTION) == WS_CAPTION) new_state |= (1 << NET_WM_STATE_MAXIMIZED); @@ -2511,7 +2483,7 @@ void X11DRV_WindowPosChanged( HWND hwnd, HWND insert_after, UINT swp_flags, { release_win_data( data ); unmap_window( hwnd ); - if (is_window_rect_full_screen( &old_window_rect )) reset_clipping_window(); + if (NtUserIsWindowRectFullScreen( &old_window_rect )) reset_clipping_window(); if (!(data = get_win_data( hwnd ))) return; } } diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h index 23886936dd4..da037297745 100644 --- a/dlls/winex11.drv/x11drv.h +++ b/dlls/winex11.drv/x11drv.h @@ -694,7 +694,6 @@ typedef int (*x11drv_error_callback)( Display *display, XErrorEvent *event, void extern void X11DRV_expect_error( Display *display, x11drv_error_callback callback, void *arg ) DECLSPEC_HIDDEN; extern int X11DRV_check_error(void) DECLSPEC_HIDDEN; extern void X11DRV_X_to_window_rect( struct x11drv_win_data *data, RECT *rect, int x, int y, int cx, int cy ) DECLSPEC_HIDDEN; -extern BOOL is_window_rect_full_screen( const RECT *rect ) DECLSPEC_HIDDEN; extern POINT virtual_screen_to_root( INT x, INT y ) DECLSPEC_HIDDEN; extern POINT root_to_virtual_screen( INT x, INT y ) DECLSPEC_HIDDEN; extern RECT get_host_primary_monitor_rect(void) DECLSPEC_HIDDEN; diff --git a/include/ntuser.h b/include/ntuser.h index bab4a0dc78c..b34ff3da4c1 100644 --- a/include/ntuser.h +++ b/include/ntuser.h @@ -642,6 +642,7 @@ enum NtUserCallOneParam_GetSysColorPen, NtUserCallOneParam_GetSystemMetrics, NtUserCallOneParam_GetVirtualScreenRect, + NtUserCallOneParam_IsWindowRectFullScreen, NtUserCallOneParam_MessageBeep, NtUserCallOneParam_RealizePalette, /* temporary exports */ @@ -732,6 +733,11 @@ static inline RECT NtUserGetVirtualScreenRect(void) return virtual; }
+static inline BOOL NtUserIsWindowRectFullScreen( const RECT *rect ) +{ + return NtUserCallOneParam( (UINT_PTR)rect, NtUserCallOneParam_IsWindowRectFullScreen ); +} + static inline BOOL NtUserMessageBeep( UINT i ) { return NtUserCallOneParam( i, NtUserCallOneParam_MessageBeep );