Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/user32/tests/dialog.c | 6 ------ dlls/user32/winproc.c | 28 +++++++++++++++++++--------- 2 files changed, 19 insertions(+), 15 deletions(-)
diff --git a/dlls/user32/tests/dialog.c b/dlls/user32/tests/dialog.c index cbe4b2b1d8..900ffc7b9c 100644 --- a/dlls/user32/tests/dialog.c +++ b/dlls/user32/tests/dialog.c @@ -1252,10 +1252,8 @@ static INT_PTR CALLBACK test_aw_conversion_dlgprocA(HWND hdlg, UINT msg, WPARAM case LB_ADDFILE: case EM_REPLACESEL: if (IsWindowUnicode(hdlg)) - todo_wine ok(!lstrcmpW(text, testtextW), "Unexpected text %s.\n", wine_dbgstr_w(text)); else - todo_wine ok(!strcmp(textA, "WndText"), "Unexpected text %s.\n", textA); break; }; @@ -1333,13 +1331,11 @@ static INT_PTR CALLBACK test_aw_conversion_dlgproc(HWND hdlg, UINT msg, WPARAM w
memset(buff, 'A', sizeof(buff)); len = GetWindowTextA(hdlg, buff, sizeof(buff)); - todo_wine ok(buff[0] == 0 && buff[1] == 'A' && len == 0, "Unexpected window text %#x, %#x, len %d\n", (BYTE)buff[0], (BYTE)buff[1], len);
memset(buffW, 0xff, sizeof(buffW)); len = GetWindowTextW(hdlg, buffW, 64); - todo_wine ok(!lstrcmpW(buffW, testtextW) && len == 0, "Unexpected window text %s, len %d\n", wine_dbgstr_w(buffW), len);
dlg_test_aw_message(hdlg, WM_WININICHANGE); @@ -1449,12 +1445,10 @@ static INT_PTR CALLBACK test_aw_conversion_dlgproc2(HWND hdlg, UINT msg, WPARAM
memset(buff, 'A', sizeof(buff)); len = GetWindowTextA(hdlg, buff, sizeof(buff)); - todo_wine ok(!strcmp(buff, "WndText") && len == 0, "Unexpected window text %s, len %d\n", buff, len);
memset(buffW, 0xff, sizeof(buffW)); len = GetWindowTextW(hdlg, buffW, sizeof(buffW)/sizeof(buffW[0])); - todo_wine ok(buffW[0] == 0 && buffW[1] == 0xffff && len == 0, "Unexpected window text %#x, %#x, len %d\n", buffW[0], buffW[1], len);
diff --git a/dlls/user32/winproc.c b/dlls/user32/winproc.c index 73bbe95028..3d00a09233 100644 --- a/dlls/user32/winproc.c +++ b/dlls/user32/winproc.c @@ -993,6 +993,10 @@ LRESULT WINAPI CallWindowProcW( WNDPROC func, HWND hwnd, UINT msg, return result; }
+static WNDPROC WINPROC_GetDlgProcFunc(const WINDOWPROC *proc) +{ + return proc->procW ? proc->procW : proc->procA; +}
/********************************************************************** * WINPROC_CallDlgProcA @@ -1006,20 +1010,23 @@ INT_PTR WINPROC_CallDlgProcA( DLGPROC func, HWND hwnd, UINT msg, WPARAM wParam, if (!func) return 0;
if (!(proc = handle_to_proc( func ))) - ret = call_dialog_proc( hwnd, msg, wParam, lParam, &result, func ); + return call_dialog_proc( hwnd, msg, wParam, lParam, &result, func ); else if (proc == WINPROC_PROC16) { ret = wow_handlers.call_dialog_proc( hwnd, msg, wParam, lParam, &result, func ); SetWindowLongPtrW( hwnd, DWLP_MSGRESULT, result ); + return ret; } - else if (proc->procW) + + if (IsWindowUnicode( hwnd )) { ret = WINPROC_CallProcAtoW( call_dialog_proc, hwnd, msg, wParam, lParam, &result, - proc->procW, WMCHAR_MAP_CALLWINDOWPROC ); + WINPROC_GetDlgProcFunc( proc ), WMCHAR_MAP_CALLWINDOWPROC ); SetWindowLongPtrW( hwnd, DWLP_MSGRESULT, result ); } else - ret = call_dialog_proc( hwnd, msg, wParam, lParam, &result, proc->procA ); + ret = call_dialog_proc( hwnd, msg, wParam, lParam, &result, WINPROC_GetDlgProcFunc( proc )); + return ret; }
@@ -1036,19 +1043,22 @@ INT_PTR WINPROC_CallDlgProcW( DLGPROC func, HWND hwnd, UINT msg, WPARAM wParam, if (!func) return 0;
if (!(proc = handle_to_proc( func ))) - ret = call_dialog_proc( hwnd, msg, wParam, lParam, &result, func ); + return call_dialog_proc( hwnd, msg, wParam, lParam, &result, func ); else if (proc == WINPROC_PROC16) { ret = WINPROC_CallProcWtoA( wow_handlers.call_dialog_proc, hwnd, msg, wParam, lParam, &result, func ); SetWindowLongPtrW( hwnd, DWLP_MSGRESULT, result ); + return ret; } - else if (proc->procA) + + if (IsWindowUnicode( hwnd )) + ret = call_dialog_proc( hwnd, msg, wParam, lParam, &result, WINPROC_GetDlgProcFunc( proc )); + else { - ret = WINPROC_CallProcWtoA( call_dialog_proc, hwnd, msg, wParam, lParam, &result, proc->procA ); + ret = WINPROC_CallProcWtoA( call_dialog_proc, hwnd, msg, wParam, lParam, &result, WINPROC_GetDlgProcFunc( proc )); SetWindowLongPtrW( hwnd, DWLP_MSGRESULT, result ); } - else - ret = call_dialog_proc( hwnd, msg, wParam, lParam, &result, proc->procW ); + return ret; }