"Mikolaj Zalewski" <[EMAIL PROTECTED]> wrote:

--- a/dlls/user32/tests/class.c
+++ b/dlls/user32/tests/class.c
@@ -32,6 +32,7 @@
#include "winreg.h"
#include "wingdi.h"
#include "winuser.h"
+#include <commctrl.h>  /* for WC_EDITW */

Besides using braces instead of quotes to match existing style it's not really
nice to include commctrl.h in a user32 (more lower level) test. It shouldn't be
too hard to add "Edit" in WCHAR notation.

/***********************************************************************
 */
static void ClassTest(HINSTANCE hInstance, BOOL global)
@@ -560,7 +566,12 @@ static void test_defwndproc()
{
    static const char classA[] = "deftest";
    static const WCHAR classW[] = {'d','e','f','t','e','s','t',0};
+    WCHAR unistring[] = {0x142, 0x40e, 0x3b4, 0};  /* a string that would be 
destoryed by a W->A->W conversion */

Any other string should work just fine. In the current form the test will fail
for some locales.

diff --git a/dlls/user32/winproc.c b/dlls/user32/winproc.c
index 27b31a1..4feb3d5 100644
--- a/dlls/user32/winproc.c
+++ b/dlls/user32/winproc.c
@@ -2257,7 +2257,17 @@ LRESULT WINAPI CallWindowProcA(

    if (!func) return 0;

-    if (!(proc = handle_to_proc( func )) && !(proc = find_builtin_proc( func 
)))
+    /* for built-in procs we do as if the second item was a thunk */
+    if ((proc = find_builtin_proc( func )) != NULL)
+    {
+ if (func == proc->procA || !IsWindowUnicode( hwnd ))
+     call_window_proc( hwnd, msg, wParam, lParam, &result, proc->procA );
+ else
+     call_window_proc( hwnd, msg, wParam, lParam, &result, proc->procW );
+ return result;
+    }
+ + if (!(proc = handle_to_proc( func )))
        call_window_proc( hwnd, msg, wParam, lParam, &result, func );
    else if (proc->procA)
        call_window_proc( hwnd, msg, wParam, lParam, &result, proc->procA );
@@ -2281,8 +2291,18 @@ LRESULT WINAPI CallWindowProcW( WNDPROC func, HWND hwnd, 
UINT msg,
    LRESULT result;

    if (!func) return 0;
+ + /* for built-in procs we do as if the second item was a thunk */
+    if ((proc = find_builtin_proc( func )) != NULL)
+    {
+ if (func == proc->procW || IsWindowUnicode( hwnd ))
+     call_window_proc( hwnd, msg, wParam, lParam, &result, proc->procW );
+ else
+     call_window_proc( hwnd, msg, wParam, lParam, &result, proc->procA );
+ return result;
+    }

-    if (!(proc = handle_to_proc( func )) && !(proc = find_builtin_proc( func 
)))
+    if (!(proc = handle_to_proc( func )))
        call_window_proc( hwnd, msg, wParam, lParam, &result, func );
    else if (proc->procW)
        call_window_proc( hwnd, msg, wParam, lParam, &result, proc->procW );
@@ -2340,7 +2360,17 @@ INT_PTR WINPROC_CallDlgProcA( DLGPROC func, HWND hwnd, 
UINT msg, WPARAM wParam,

    if (!func) return 0;

-    if (!(proc = handle_to_proc( func )) && !(proc = find_builtin_proc( func 
)))
+    /* for built-in procs we do as if the second item was a thunk */
+    if ((proc = find_builtin_proc( func )) != NULL)
+    {
+ if (func == proc->procA || !IsWindowUnicode( hwnd ))
+     call_dialog_proc( hwnd, msg, wParam, lParam, &result, proc->procA );
+ else
+     call_dialog_proc( hwnd, msg, wParam, lParam, &result, proc->procW );
+ return result;
+    }
+
+    if (!(proc = handle_to_proc( func )))
        ret = call_dialog_proc( hwnd, msg, wParam, lParam, &result, func );
    else if (proc->procA)
        ret = call_dialog_proc( hwnd, msg, wParam, lParam, &result, proc->procA 
);
@@ -2368,8 +2398,18 @@ INT_PTR WINPROC_CallDlgProcW( DLGPROC func, HWND hwnd, 
UINT msg, WPARAM wParam,
    INT_PTR ret;

    if (!func) return 0;
+ + /* for built-in procs we do as if the second item was a thunk */
+    if ((proc = find_builtin_proc( func )) != NULL)
+    {
+ if (func == proc->procW || IsWindowUnicode( hwnd ))
+     call_dialog_proc( hwnd, msg, wParam, lParam, &result, proc->procW );
+ else
+     call_dialog_proc( hwnd, msg, wParam, lParam, &result, proc->procA );
+ return result;
+    }

Please use spaces instead of tabs to match current formatting.

--
Dmitry.


Reply via email to