Jacek Caban : user32: Use dispatch_win_proc_params in CallWindowProc.

Alexandre Julliard julliard at winehq.org
Wed Mar 23 17:03:55 CDT 2022


Module: wine
Branch: master
Commit: afddda2ce6596d864efd0228eb2f69bb0348ae37
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=afddda2ce6596d864efd0228eb2f69bb0348ae37

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Wed Mar 23 14:06:49 2022 +0100

user32: Use dispatch_win_proc_params in CallWindowProc.

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/winproc.c | 70 +++++++++++++++++++++++++++++----------------------
 1 file changed, 40 insertions(+), 30 deletions(-)

diff --git a/dlls/user32/winproc.c b/dlls/user32/winproc.c
index adbd5aeb8f6..b3da8d26cb3 100644
--- a/dlls/user32/winproc.c
+++ b/dlls/user32/winproc.c
@@ -850,6 +850,37 @@ BOOL WINPROC_call_window( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam,
 }
 
 
+static void init_win_proc_params( struct win_proc_params *info, WNDPROC func, HWND hwnd, UINT msg,
+                                  WPARAM wparam, LPARAM lparam, LRESULT *result, BOOL ansi )
+{
+    WINDOWPROC *proc;
+
+    info->hwnd = hwnd;
+    info->msg = msg;
+    info->wparam = wparam;
+    info->lparam = lparam;
+    info->result = result;
+    info->ansi = info->ansi_dst = ansi;
+    info->is_dialog = FALSE;
+    info->mapping = WMCHAR_MAP_CALLWINDOWPROC;
+    info->func = func;
+
+    if (!(proc = handle_to_proc( func )))
+    {
+        info->procW = info->procA = NULL;
+    }
+    else if (proc == WINPROC_PROC16)
+    {
+        info->procW = info->procA = WINPROC_PROC16;
+    }
+    else
+    {
+        info->procA = proc->procA;
+        info->procW = proc->procW;
+    }
+}
+
+
 /**********************************************************************
  *		CallWindowProcA (USER32.@)
  *
@@ -874,27 +905,14 @@ BOOL WINPROC_call_window( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam,
  *
  *   ECMA-234, Win32
  */
-LRESULT WINAPI CallWindowProcA(
-    WNDPROC func,  /* [in] window procedure */
-    HWND hwnd,     /* [in] target window */
-    UINT msg,      /* [in] message */
-    WPARAM wParam, /* [in] message dependent parameter */
-    LPARAM lParam  /* [in] message dependent parameter */
-) {
-    WINDOWPROC *proc;
+LRESULT WINAPI CallWindowProcA( WNDPROC func, HWND hwnd, UINT msg, WPARAM wParam,  LPARAM lParam )
+{
+    struct win_proc_params params;
     LRESULT result;
 
     if (!func) return 0;
-
-    if (!(proc = handle_to_proc( func )))
-        call_window_proc( hwnd, msg, wParam, lParam, &result, func );
-    else if (proc == WINPROC_PROC16)
-        wow_handlers.call_window_proc( hwnd, msg, wParam, lParam, &result, func );
-    else if (proc->procA)
-        call_window_proc( hwnd, msg, wParam, lParam, &result, proc->procA );
-    else
-        WINPROC_CallProcAtoW( call_window_proc, hwnd, msg, wParam, lParam, &result,
-                              proc->procW, WMCHAR_MAP_CALLWINDOWPROC );
+    init_win_proc_params( &params, func, hwnd, msg, wParam, lParam, &result, TRUE );
+    dispatch_win_proc_params( &params );
     return result;
 }
 
@@ -904,22 +922,14 @@ LRESULT WINAPI CallWindowProcA(
  *
  * See CallWindowProcA.
  */
-LRESULT WINAPI CallWindowProcW( WNDPROC func, HWND hwnd, UINT msg,
-                                  WPARAM wParam, LPARAM lParam )
+LRESULT WINAPI CallWindowProcW( WNDPROC func, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
 {
-    WINDOWPROC *proc;
+    struct win_proc_params params;
     LRESULT result;
 
     if (!func) return 0;
-
-    if (!(proc = handle_to_proc( func )))
-        call_window_proc( hwnd, msg, wParam, lParam, &result, func );
-    else if (proc == WINPROC_PROC16)
-        WINPROC_CallProcWtoA( wow_handlers.call_window_proc, hwnd, msg, wParam, lParam, &result, func );
-    else if (proc->procW)
-        call_window_proc( hwnd, msg, wParam, lParam, &result, proc->procW );
-    else
-        WINPROC_CallProcWtoA( call_window_proc, hwnd, msg, wParam, lParam, &result, proc->procA );
+    init_win_proc_params( &params, func, hwnd, msg, wParam, lParam, &result, FALSE );
+    dispatch_win_proc_params( &params );
     return result;
 }
 




More information about the wine-cvs mailing list