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