Module: wine Branch: master Commit: 12a6f8d49b3defe6d25643db8a7d8fe838e042f2 URL: https://source.winehq.org/git/wine.git/?a=commit;h=12a6f8d49b3defe6d25643db8...
Author: Jacek Caban jacek@codeweavers.com Date: Thu Apr 7 15:26:39 2022 +0200
win32u: Partially move WM_SYSCOMMAND implementation from user32.
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/user32/driver.c | 8 +------- dlls/user32/nonclient.c | 7 +------ dlls/win32u/defwnd.c | 16 ++++++++++++++++ dlls/win32u/win32u_private.h | 1 + dlls/win32u/window.c | 2 +- 5 files changed, 20 insertions(+), 14 deletions(-)
diff --git a/dlls/user32/driver.c b/dlls/user32/driver.c index e913897bbbe..934078a32b5 100644 --- a/dlls/user32/driver.c +++ b/dlls/user32/driver.c @@ -69,11 +69,6 @@ static void CDECL nulldrv_UpdateClipboard(void) { }
-static LRESULT CDECL nulldrv_SysCommand( HWND hwnd, WPARAM wparam, LPARAM lparam ) -{ - return -1; -} -
/********************************************************************** * Lazy loading user driver @@ -130,7 +125,7 @@ static struct user_driver_funcs lazy_load_driver = NULL, NULL, NULL, - nulldrv_SysCommand, + NULL, NULL, NULL, NULL, @@ -162,7 +157,6 @@ void CDECL __wine_set_user_driver( const struct user_driver_funcs *funcs, UINT v do { if (!driver->p##name) driver->p##name = nulldrv_##name; } while(0)
SET_USER_FUNC(UpdateClipboard); - SET_USER_FUNC(SysCommand); #undef SET_USER_FUNC
prev = InterlockedCompareExchangePointer( (void **)&USER_Driver, driver, &lazy_load_driver ); diff --git a/dlls/user32/nonclient.c b/dlls/user32/nonclient.c index a2a49fda27b..25eee85c5a6 100644 --- a/dlls/user32/nonclient.c +++ b/dlls/user32/nonclient.c @@ -1540,12 +1540,7 @@ LRESULT NC_HandleSysCommand( HWND hwnd, WPARAM wParam, LPARAM lParam ) { TRACE("hwnd %p WM_SYSCOMMAND %lx %lx\n", hwnd, wParam, lParam );
- if (!IsWindowEnabled( hwnd )) return 0; - - if (HOOK_CallHooks( WH_CBT, HCBT_SYSCOMMAND, wParam, lParam, TRUE )) - return 0; - - if (!USER_Driver->pSysCommand( hwnd, wParam, lParam )) + if (!NtUserMessageCall( hwnd, WM_SYSCOMMAND, wParam, lParam, 0, FNID_DEFWINDOWPROC, FALSE )) return 0;
switch (wParam & 0xfff0) diff --git a/dlls/win32u/defwnd.c b/dlls/win32u/defwnd.c index 68ac46c7e8f..22d2b08951d 100644 --- a/dlls/win32u/defwnd.c +++ b/dlls/win32u/defwnd.c @@ -121,6 +121,18 @@ static HICON set_window_icon( HWND hwnd, WPARAM type, HICON icon ) return ret; }
+static LRESULT handle_sys_command( HWND hwnd, WPARAM wparam, LPARAM lparam ) +{ + if (!is_window_enabled( hwnd )) return 0; + + if (call_hooks( WH_CBT, HCBT_SYSCOMMAND, wparam, lparam, TRUE )) + return 0; + + if (!user_driver->pSysCommand( hwnd, wparam, lparam )) + return 0; + + return 1; +}
LRESULT default_window_proc( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam, BOOL ansi ) { @@ -156,6 +168,10 @@ LRESULT default_window_proc( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam, case WM_SETICON: result = (LRESULT)set_window_icon( hwnd, wparam, (HICON)lparam ); break; + + case WM_SYSCOMMAND: + result = handle_sys_command( hwnd, wparam, lparam ); + break; }
return result; diff --git a/dlls/win32u/win32u_private.h b/dlls/win32u/win32u_private.h index d60cc9cda48..1b1a9e8ee83 100644 --- a/dlls/win32u/win32u_private.h +++ b/dlls/win32u/win32u_private.h @@ -410,6 +410,7 @@ extern HWND is_current_process_window( HWND hwnd ) DECLSPEC_HIDDEN; extern HWND is_current_thread_window( HWND hwnd ) DECLSPEC_HIDDEN; extern BOOL is_desktop_window( HWND hwnd ) DECLSPEC_HIDDEN; extern BOOL is_iconic( HWND hwnd ) DECLSPEC_HIDDEN; +extern BOOL is_window_enabled( HWND hwnd ) DECLSPEC_HIDDEN; extern BOOL is_window_unicode( HWND hwnd ) DECLSPEC_HIDDEN; extern DWORD get_window_long( HWND hwnd, INT offset ) DECLSPEC_HIDDEN; extern BOOL get_window_rect( HWND hwnd, RECT *rect, UINT dpi ) DECLSPEC_HIDDEN; diff --git a/dlls/win32u/window.c b/dlls/win32u/window.c index 10c6ff4bf89..c5022b814cd 100644 --- a/dlls/win32u/window.c +++ b/dlls/win32u/window.c @@ -808,7 +808,7 @@ BOOL is_window_unicode( HWND hwnd ) }
/* see IsWindowEnabled */ -static BOOL is_window_enabled( HWND hwnd ) +BOOL is_window_enabled( HWND hwnd ) { LONG ret;