Jacek Caban : win32u: Move more logic from dispatch_win_proc_params.

Alexandre Julliard julliard at winehq.org
Mon Aug 15 15:23:44 CDT 2022


Module: wine
Branch: master
Commit: 439cdf49014e97b684e0d75c52aaa2885e44cfc4
URL:    https://gitlab.winehq.org/wine/wine/-/commit/439cdf49014e97b684e0d75c52aaa2885e44cfc4

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Sun Aug 14 16:06:14 2022 +0200

win32u: Move more logic from dispatch_win_proc_params.

---

 dlls/user32/winproc.c        | 62 +++-----------------------------------------
 dlls/win32u/class.c          | 19 +++++++++++++-
 dlls/win32u/message.c        |  8 +++---
 dlls/win32u/ntuser_private.h |  2 +-
 include/ntuser.h             |  1 -
 5 files changed, 27 insertions(+), 65 deletions(-)

diff --git a/dlls/user32/winproc.c b/dlls/user32/winproc.c
index 2c0aaf03da5..ab28eecb67c 100644
--- a/dlls/user32/winproc.c
+++ b/dlls/user32/winproc.c
@@ -719,78 +719,24 @@ void dispatch_win_proc_params( struct win_proc_params *params )
         if (params->procW == WINPROC_PROC16)
             WINPROC_CallProcWtoA( wow_handlers.call_window_proc, params->hwnd, params->msg, params->wparam,
                                   params->lparam, params->result, params->func );
-        else if (params->is_dialog)
-        {
-            if (!params->ansi_dst)
-            {
-                if (params->procW)
-                    call_window_proc( params->hwnd, params->msg, params->wparam, params->lparam,
-                                      params->result, params->procW );
-                else
-                    call_window_proc( params->hwnd, params->msg, params->wparam, params->lparam,
-                                      params->result, params->func );
-            }
-            else
-            {
-                if (params->procA)
-                    WINPROC_CallProcWtoA( call_window_proc, params->hwnd, params->msg, params->wparam,
-                                          params->lparam, params->result, params->procA );
-                else
-                    WINPROC_CallProcWtoA( call_window_proc, params->hwnd, params->msg, params->wparam,
-                                          params->lparam, params->result, params->func );
-            }
-        }
-        else if (params->procW)
-            call_window_proc( params->hwnd, params->msg, params->wparam, params->lparam,
-                              params->result, params->procW );
-        else if (params->procA)
-            WINPROC_CallProcWtoA( call_window_proc, params->hwnd, params->msg, params->wparam,
-                                  params->lparam, params->result, params->procA );
         else if (!params->ansi_dst)
             call_window_proc( params->hwnd, params->msg, params->wparam, params->lparam,
-                              params->result, params->func );
+                              params->result, params->procW );
         else
             WINPROC_CallProcWtoA( call_window_proc, params->hwnd, params->msg, params->wparam,
-                                  params->lparam, params->result, params->func );
+                                  params->lparam, params->result, params->procA );
     }
     else
     {
         if (params->procA == WINPROC_PROC16)
             wow_handlers.call_window_proc( params->hwnd, params->msg, params->wparam, params->lparam,
                                            params->result, params->func );
-        else if (params->is_dialog)
-        {
-            if (!params->ansi_dst)
-            {
-                if (params->procW)
-                    WINPROC_CallProcAtoW( call_window_proc, params->hwnd, params->msg, params->wparam,
-                                          params->lparam, params->result, params->procW, params->mapping );
-                else
-                    WINPROC_CallProcAtoW( call_window_proc, params->hwnd, params->msg, params->wparam,
-                                          params->lparam, params->result, params->func, params->mapping );
-            }
-            else
-            {
-                if (params->procA)
-                    call_window_proc( params->hwnd, params->msg, params->wparam, params->lparam,
-                                      params->result, params->procA );
-                else
-                    call_window_proc( params->hwnd, params->msg, params->wparam, params->lparam,
-                                      params->result, params->func );
-            }
-        }
-        else if (params->procA)
-            call_window_proc( params->hwnd, params->msg, params->wparam, params->lparam,
-                              params->result, params->procA );
-        else if (params->procW)
-            WINPROC_CallProcAtoW( call_window_proc, params->hwnd, params->msg, params->wparam,
-                                  params->lparam, params->result, params->procW, params->mapping );
         else if (!params->ansi_dst)
             WINPROC_CallProcAtoW( call_window_proc, params->hwnd, params->msg, params->wparam,
-                                  params->lparam, params->result, params->func, params->mapping );
+                                  params->lparam, params->result, params->procW, params->mapping );
         else
             call_window_proc( params->hwnd, params->msg, params->wparam, params->lparam,
-                              params->result, params->func );
+                              params->result, params->procA );
     }
 
     SetThreadDpiAwarenessContext( context );
diff --git a/dlls/win32u/class.c b/dlls/win32u/class.c
index f8a7e67ddd1..6058617b80e 100644
--- a/dlls/win32u/class.c
+++ b/dlls/win32u/class.c
@@ -201,7 +201,7 @@ BOOL is_winproc_unicode( WNDPROC proc, BOOL def_val )
     return ptr->procW != NULL;
 }
 
-void get_winproc_params( struct win_proc_params *params )
+void get_winproc_params( struct win_proc_params *params, BOOL fixup_ansi_dst )
 {
     WINDOWPROC *proc = get_winproc_ptr( params->func );
 
@@ -217,7 +217,24 @@ void get_winproc_params( struct win_proc_params *params )
     {
         params->procA = proc->procA;
         params->procW = proc->procW;
+
+        if (fixup_ansi_dst)
+        {
+            if (params->ansi)
+            {
+                if (params->procA) params->ansi_dst = TRUE;
+                else if (params->procW) params->ansi_dst = FALSE;
+            }
+            else
+            {
+                if (params->procW) params->ansi_dst = FALSE;
+                else if (params->procA) params->ansi_dst = TRUE;
+            }
+        }
     }
+
+    if (!params->procA) params->procA = params->func;
+    if (!params->procW) params->procW = params->func;
 }
 
 DLGPROC get_dialog_proc( HWND hwnd, enum dialog_proc_type type )
diff --git a/dlls/win32u/message.c b/dlls/win32u/message.c
index 6506a201559..b0c444f5407 100644
--- a/dlls/win32u/message.c
+++ b/dlls/win32u/message.c
@@ -202,11 +202,10 @@ static BOOL init_win_proc_params( struct win_proc_params *params, HWND hwnd, UIN
     params->wparam = wparam;
     params->lparam = lparam;
     params->ansi = params->ansi_dst = ansi;
-    params->is_dialog = FALSE;
     params->needs_unpack = FALSE;
     params->mapping = WMCHAR_MAP_CALLWINDOWPROC;
     params->dpi_awareness = get_window_dpi_awareness_context( params->hwnd );
-    get_winproc_params( params );
+    get_winproc_params( params, TRUE );
     return TRUE;
 }
 
@@ -214,6 +213,7 @@ static BOOL init_window_call_params( struct win_proc_params *params, HWND hwnd,
                                      LPARAM lParam, LRESULT *result, BOOL ansi,
                                      enum wm_char_mapping mapping )
 {
+    BOOL is_dialog;
     WND *win;
 
     user_check_not_lock();
@@ -227,11 +227,10 @@ static BOOL init_window_call_params( struct win_proc_params *params, HWND hwnd,
     }
     params->func = win->winproc;
     params->ansi_dst = !(win->flags & WIN_ISUNICODE);
-    params->is_dialog = win->dlgInfo != NULL;
+    is_dialog = win->dlgInfo != NULL;
     release_win_ptr( win );
 
     params->hwnd = get_full_window_handle( hwnd );
-    get_winproc_params( params );
     params->msg = msg;
     params->wparam = wParam;
     params->lparam = lParam;
@@ -240,6 +239,7 @@ static BOOL init_window_call_params( struct win_proc_params *params, HWND hwnd,
     params->needs_unpack = FALSE;
     params->mapping = mapping;
     params->dpi_awareness = get_window_dpi_awareness_context( params->hwnd );
+    get_winproc_params( params, !is_dialog );
     return TRUE;
 }
 
diff --git a/dlls/win32u/ntuser_private.h b/dlls/win32u/ntuser_private.h
index 1be8eed3020..c8ba7522278 100644
--- a/dlls/win32u/ntuser_private.h
+++ b/dlls/win32u/ntuser_private.h
@@ -235,7 +235,7 @@ WORD get_class_word( HWND hwnd, INT offset ) DECLSPEC_HIDDEN;
 DLGPROC get_dialog_proc( HWND hwnd, enum dialog_proc_type type ) DECLSPEC_HIDDEN;
 ATOM get_int_atom_value( UNICODE_STRING *name ) DECLSPEC_HIDDEN;
 WNDPROC get_winproc( WNDPROC proc, BOOL ansi ) DECLSPEC_HIDDEN;
-void get_winproc_params( struct win_proc_params *params ) DECLSPEC_HIDDEN;
+void get_winproc_params( struct win_proc_params *params, BOOL fixup_ansi_dst ) DECLSPEC_HIDDEN;
 struct dce *get_class_dce( struct tagCLASS *class ) DECLSPEC_HIDDEN;
 struct dce *set_class_dce( struct tagCLASS *class, struct dce *dce ) DECLSPEC_HIDDEN;
 BOOL needs_ime_window( HWND hwnd ) DECLSPEC_HIDDEN;
diff --git a/include/ntuser.h b/include/ntuser.h
index 053f60b8d1e..17301562013 100644
--- a/include/ntuser.h
+++ b/include/ntuser.h
@@ -146,7 +146,6 @@ struct win_proc_params
     LRESULT *result;
     BOOL ansi;
     BOOL ansi_dst;
-    BOOL is_dialog;
     BOOL needs_unpack;
     enum wm_char_mapping mapping;
     DPI_AWARENESS_CONTEXT dpi_awareness;




More information about the wine-cvs mailing list