From: Rémi Bernon rbernon@codeweavers.com
Final Fantasy XIV Online depends on this for its text input.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=43073 --- dlls/comctl32/commctrl.c | 8 ++------ dlls/comctl32/tests/subclass.c | 16 ++++++++-------- 2 files changed, 10 insertions(+), 14 deletions(-)
diff --git a/dlls/comctl32/commctrl.c b/dlls/comctl32/commctrl.c index 37cb66b9bbb..80ea575881e 100644 --- a/dlls/comctl32/commctrl.c +++ b/dlls/comctl32/commctrl.c @@ -1104,12 +1104,8 @@ BOOL WINAPI SetWindowSubclass (HWND hWnd, SUBCLASSPROC pfnSubclass,
/* set window procedure to our own and save the current one */ stack->is_unicode = IsWindowUnicode (hWnd); - if (stack->is_unicode) - stack->origproc = (WNDPROC)SetWindowLongPtrW (hWnd, GWLP_WNDPROC, - (DWORD_PTR)COMCTL32_SubclassProc); - else - stack->origproc = (WNDPROC)SetWindowLongPtrA (hWnd, GWLP_WNDPROC, - (DWORD_PTR)COMCTL32_SubclassProc); + stack->origproc = (WNDPROC)SetWindowLongPtrW (hWnd, GWLP_WNDPROC, + (DWORD_PTR)COMCTL32_SubclassProc); } else { /* Check to see if we have called this function with the same uIDSubClass diff --git a/dlls/comctl32/tests/subclass.c b/dlls/comctl32/tests/subclass.c index 684593e6ed7..9a78580e506 100644 --- a/dlls/comctl32/tests/subclass.c +++ b/dlls/comctl32/tests/subclass.c @@ -202,7 +202,7 @@ static LRESULT WINAPI wnd_proc_1(HWND hwnd, UINT message, WPARAM wParam, LPARAM DWORD flags = GetWindowLongA(hwnd, GWLP_USERDATA); struct message msg;
- todo_wine_if(flags & EXPECT_UNICODE) check_unicode(hwnd, flags); + check_unicode(hwnd, flags);
if(message == WM_USER) { msg.wParam = wParam; @@ -210,6 +210,7 @@ static LRESULT WINAPI wnd_proc_1(HWND hwnd, UINT message, WPARAM wParam, LPARAM add_message(&msg); } if (message == WM_CHAR) { + todo_wine ok(!(wParam & ~0xff), "got wParam %#Ix\n", wParam); } return DefWindowProcA(hwnd, message, wParam, lParam); @@ -234,7 +235,7 @@ static LRESULT WINAPI wnd_proc_sub(HWND hwnd, UINT message, WPARAM wParam, LPARA DWORD flags = GetWindowLongA(hwnd, GWLP_USERDATA); struct message msg;
- todo_wine_if(flags & EXPECT_UNICODE) check_unicode(hwnd, flags); + check_unicode(hwnd, flags);
if(message == WM_USER) { msg.wParam = wParam; @@ -245,22 +246,21 @@ static LRESULT WINAPI wnd_proc_sub(HWND hwnd, UINT message, WPARAM wParam, LPARA if(dwRefData & DELETE_SELF) { pRemoveWindowSubclass(hwnd, wnd_proc_sub, uldSubclass); pRemoveWindowSubclass(hwnd, wnd_proc_sub, uldSubclass); - todo_wine_if(flags & EXPECT_UNICODE) check_unicode(hwnd, flags); + check_unicode(hwnd, flags); } if(dwRefData & DELETE_PREV) { pRemoveWindowSubclass(hwnd, wnd_proc_sub, uldSubclass-1); - todo_wine_if(flags & EXPECT_UNICODE) check_unicode(hwnd, flags); + check_unicode(hwnd, flags); } if(dwRefData & SEND_NEST) { SendMessageA(hwnd, WM_USER, wParam+1, 0); - todo_wine_if(flags & EXPECT_UNICODE) check_unicode(hwnd, flags); + check_unicode(hwnd, flags); } } } if (message == WM_CHAR) { - todo_wine ok(wParam == 0x30c2, "got wParam %#Ix\n", wParam); } return pDefSubclassProc(hwnd, message, wParam, lParam); @@ -277,7 +277,7 @@ static void test_subclass(void)
ret = pSetWindowSubclass(hwnd, wnd_proc_sub, 2, 0); ok(ret == TRUE, "Expected TRUE\n"); - todo_wine check_unicode(hwnd, EXPECT_UNICODE); + check_unicode(hwnd, EXPECT_UNICODE); SetWindowLongA(hwnd, GWLP_USERDATA, EXPECT_UNICODE);
SendMessageA(hwnd, WM_USER, 1, 0); @@ -287,7 +287,7 @@ static void test_subclass(void)
ret = pSetWindowSubclass(hwnd, wnd_proc_sub, 2, DELETE_SELF); ok(ret == TRUE, "Expected TRUE\n"); - todo_wine check_unicode(hwnd, EXPECT_UNICODE); + check_unicode(hwnd, EXPECT_UNICODE);
SendMessageA(hwnd, WM_USER, 1, 1); ok_sequence(Sub_DeletedTest, "Deleted");