Jacek Caban : win32u: Partially move WM_SYSCOMMAND implementation from user32.
Alexandre Julliard
julliard at winehq.org
Thu Apr 7 16:19:08 CDT 2022
Module: wine
Branch: master
Commit: 12a6f8d49b3defe6d25643db8a7d8fe838e042f2
URL: https://source.winehq.org/git/wine.git/?a=commit;h=12a6f8d49b3defe6d25643db8a7d8fe838e042f2
Author: Jacek Caban <jacek at 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 at codeweavers.com>
Signed-off-by: Huw Davies <huw at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at 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;
More information about the wine-cvs
mailing list