Signed-off-by: Nikolay Sivov <nsivov(a)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;
}
--
2.15.1