-- v3: user32: Pass resource ID as a string in DIALOG_CreateControls32. user32: Support passing bitmap and icon resource ID as a string when creating static conctrol. user32: Support resource ID strings in CREATESTRUCT Unicode conversion.
From: Jacek Caban jacek@codeweavers.com
--- dlls/user32/hook.c | 38 +++++++++++++++++++++++++++------ dlls/user32/tests/msg.c | 47 +++++++++++++++++++++++++++++++++++++++++ dlls/user32/win.c | 20 ++++++++++++++---- dlls/user32/winproc.c | 17 +++++++++++++-- 4 files changed, 109 insertions(+), 13 deletions(-)
diff --git a/dlls/user32/hook.c b/dlls/user32/hook.c index 4201e2375ae..4a905eb8e5e 100644 --- a/dlls/user32/hook.c +++ b/dlls/user32/hook.c @@ -222,6 +222,7 @@ static LRESULT call_hook_AtoW( HOOKPROC proc, INT id, INT code, WPARAM wparam, L CREATESTRUCTW csW; LPWSTR nameW = NULL; LPWSTR classW = NULL; + WCHAR name_buf[3];
cbtcwW.lpcs = &csW; cbtcwW.hwndInsertAfter = cbtcwA->hwndInsertAfter; @@ -229,8 +230,18 @@ static LRESULT call_hook_AtoW( HOOKPROC proc, INT id, INT code, WPARAM wparam, L
if (!IS_INTRESOURCE(cbtcwA->lpcs->lpszName)) { - RtlCreateUnicodeStringFromAsciiz(&usBuffer,cbtcwA->lpcs->lpszName); - csW.lpszName = nameW = usBuffer.Buffer; + if (cbtcwA->lpcs->lpszName[0] != '\xff') + { + RtlCreateUnicodeStringFromAsciiz( &usBuffer, cbtcwA->lpcs->lpszName ); + csW.lpszName = nameW = usBuffer.Buffer; + } + else + { + name_buf[0] = 0xffff; + name_buf[1] = MAKEWORD( cbtcwA->lpcs->lpszName[1], cbtcwA->lpcs->lpszName[2] ); + name_buf[2] = 0; + csW.lpszName = name_buf; + } } if (!IS_INTRESOURCE(cbtcwA->lpcs->lpszClass)) { @@ -263,16 +274,29 @@ static LRESULT call_hook_WtoA( HOOKPROC proc, INT id, INT code, WPARAM wparam, L int len; LPSTR nameA = NULL; LPSTR classA = NULL; + char name_buf[4];
cbtcwA.lpcs = &csA; cbtcwA.hwndInsertAfter = cbtcwW->hwndInsertAfter; csA = *(CREATESTRUCTA *)cbtcwW->lpcs;
- if (!IS_INTRESOURCE(cbtcwW->lpcs->lpszName)) { - len = WideCharToMultiByte( CP_ACP, 0, cbtcwW->lpcs->lpszName, -1, NULL, 0, NULL, NULL ); - nameA = HeapAlloc( GetProcessHeap(), 0, len*sizeof(CHAR) ); - WideCharToMultiByte( CP_ACP, 0, cbtcwW->lpcs->lpszName, -1, nameA, len, NULL, NULL ); - csA.lpszName = nameA; + if (!IS_INTRESOURCE(cbtcwW->lpcs->lpszName)) + { + if (cbtcwW->lpcs->lpszName[0] != 0xffff) + { + len = WideCharToMultiByte( CP_ACP, 0, cbtcwW->lpcs->lpszName, -1, NULL, 0, NULL, NULL ); + nameA = HeapAlloc( GetProcessHeap(), 0, len*sizeof(CHAR) ); + WideCharToMultiByte( CP_ACP, 0, cbtcwW->lpcs->lpszName, -1, nameA, len, NULL, NULL ); + csA.lpszName = nameA; + } + else + { + name_buf[0] = '\xff'; + name_buf[1] = cbtcwW->lpcs->lpszName[1]; + name_buf[2] = cbtcwW->lpcs->lpszName[1] >> 8; + name_buf[3] = 0; + csA.lpszName = name_buf; + } }
if (!IS_INTRESOURCE(cbtcwW->lpcs->lpszClass)) { diff --git a/dlls/user32/tests/msg.c b/dlls/user32/tests/msg.c index 2d43c1ad1aa..9c77bdc7c09 100644 --- a/dlls/user32/tests/msg.c +++ b/dlls/user32/tests/msg.c @@ -18990,6 +18990,52 @@ static void test_button_style(void) } }
+static LRESULT WINAPI test_create_name_procW( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam ) +{ + switch (msg) + { + case WM_NCCREATE: + case WM_CREATE: + { + CREATESTRUCTW *cs = (CREATESTRUCTW *)lparam; + memcpy( cs->lpCreateParams, cs->lpszName, 3 * sizeof(WCHAR) ); + break; + } + case WM_SETTEXT: + trace("%s\n", debugstr_w((const WCHAR *)lparam)); + break; + } + + return DefWindowProcW( hwnd, msg, wparam, lparam ); +} + +static void test_create_name(void) +{ + WNDCLASSW clsW = { 0 }; + WCHAR name_buf[3]; + HWND hwnd; + + clsW.lpfnWndProc = test_create_name_procW; + clsW.lpszClassName = L"TestCreateNameClassW"; + RegisterClassW( &clsW ); + + hwnd = CreateWindowExW( 0, L"TestCreateNameClassW", L"\xffff\x6162", + WS_POPUP, 0,0,0,0,0,0,0, name_buf ); + ok( hwnd != NULL, "CreateWindowEx failed: %lu\n", GetLastError() ); + ok(!memcmp(name_buf, L"\xffff\x6162", 2 * sizeof(WCHAR)), + "name param = %s\n", debugstr_wn(name_buf, 2)); + DestroyWindow( hwnd ); + + hwnd = CreateWindowExA( 0, "TestCreateNameClassW", "\xff\0\x61\x60", + WS_POPUP, 0,0,0,0,0,0,0, name_buf ); + ok( hwnd != NULL, "CreateWindowEx failed: %lu\n", GetLastError() ); + ok(!memcmp(name_buf, L"\xffff\x6100", 2 * sizeof(WCHAR)), + "name param = %s\n", debugstr_wn(name_buf, 2)); + DestroyWindow( hwnd ); + + UnregisterClassW( L"TestCreateNameClassW", NULL ); +} + START_TEST(msg) { char **test_argv; @@ -19105,6 +19151,7 @@ START_TEST(msg) test_TrackPopupMenu(); test_TrackPopupMenuEmpty(); test_DoubleSetCapture(); + test_create_name(); /* keep it the last test, under Windows it tends to break the tests * which rely on active/foreground windows being correct. */ diff --git a/dlls/user32/win.c b/dlls/user32/win.c index 9507486754b..7d873155c3b 100644 --- a/dlls/user32/win.c +++ b/dlls/user32/win.c @@ -304,6 +304,7 @@ HWND WIN_CreateWindowEx( CREATESTRUCTW *cs, LPCWSTR className, HINSTANCE module, HWND hwnd, top_child = 0; MDICREATESTRUCTW mdi_cs; WNDCLASSEXW info; + WCHAR name_buf[8]; HMENU menu;
if (!get_class_info( module, className, &info, &class, FALSE )) return FALSE; @@ -398,10 +399,21 @@ HWND WIN_CreateWindowEx( CREATESTRUCTW *cs, LPCWSTR className, HINSTANCE module, } }
- if (unicode || !cs->lpszName) - RtlInitUnicodeString( &window_name, cs->lpszName ); - else if (!RtlCreateUnicodeStringFromAsciiz( &window_name, (const char *)cs->lpszName )) - return 0; + if (!unicode && cs->lpszName) + { + const char *nameA = (const char *)cs->lpszName; + /* resource ID string is a special case */ + if (nameA[0] == '\xff') + { + name_buf[0] = 0xffff; + name_buf[1] = MAKEWORD( nameA[1], nameA[2] ); + name_buf[2] = 0; + RtlInitUnicodeString( &window_name, name_buf ); + } + else if (!RtlCreateUnicodeStringFromAsciiz( &window_name, (const char *)cs->lpszName )) + return 0; + } + else RtlInitUnicodeString( &window_name, cs->lpszName );
menu = cs->hMenu; if (!menu && info.lpszMenuName && (cs->style & (WS_CHILD | WS_POPUP)) != WS_CHILD) diff --git a/dlls/user32/winproc.c b/dlls/user32/winproc.c index 7e2be5b1be0..deae1a061f8 100644 --- a/dlls/user32/winproc.c +++ b/dlls/user32/winproc.c @@ -475,6 +475,7 @@ static LRESULT WINPROC_CallProcWtoA( winproc_callback_t callback, HWND hwnd, UIN CREATESTRUCTA csA = *(CREATESTRUCTA *)csW; MDICREATESTRUCTA mdi_cs; DWORD name_lenA = 0, name_lenW = 0, class_lenA = 0, class_lenW = 0; + char int_name_buf[4];
if (!IS_INTRESOURCE(csW->lpszClass)) { @@ -483,8 +484,20 @@ static LRESULT WINPROC_CallProcWtoA( winproc_callback_t callback, HWND hwnd, UIN } if (!IS_INTRESOURCE(csW->lpszName)) { - name_lenW = (lstrlenW(csW->lpszName) + 1) * sizeof(WCHAR); - RtlUnicodeToMultiByteSize(&name_lenA, csW->lpszName, name_lenW); + /* resource ID string is a special case */ + if (csW->lpszName[0] == 0xffff) + { + int_name_buf[0] = 0xff; + int_name_buf[1] = csW->lpszName[1]; + int_name_buf[2] = csW->lpszName[1] >> 8; + int_name_buf[3] = 0; + csA.lpszName = int_name_buf; + } + else + { + name_lenW = (lstrlenW(csW->lpszName) + 1) * sizeof(WCHAR); + RtlUnicodeToMultiByteSize(&name_lenA, csW->lpszName, name_lenW); + } }
if (!(cls = get_buffer( buffer, sizeof(buffer), class_lenA + name_lenA ))) break;
Hi,
It looks like your patch introduced the new failures shown below. Please investigate and fix them before resubmitting your patch. If they are not new, fixing them anyway would help a lot. Otherwise please ask for the known failures list to be updated.
The tests also ran into some preexisting test failures. If you know how to fix them that would be helpful. See the TestBot job for the details:
The full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=121912
Your paranoid android.
=== w10pro64_ar (64 bit report) ===
user32: msg.c:13081: Test failed: coords not changed: (105 105) (105 105)
=== debian11 (32 bit report) ===
user32: win.c:10945: Test failed: GetForegroundWindow() = 00000000
From: Jacek Caban jacek@codeweavers.com
--- dlls/user32/static.c | 38 ++++++++++++++++++++++++++++++++------ dlls/user32/tests/static.c | 18 ++++++++++++++++++ 2 files changed, 50 insertions(+), 6 deletions(-)
diff --git a/dlls/user32/static.c b/dlls/user32/static.c index a88203f5716..f5cef12b12a 100644 --- a/dlls/user32/static.c +++ b/dlls/user32/static.c @@ -418,22 +418,48 @@ LRESULT StaticWndProc_common( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam switch (style) { case SS_ICON: { + const WCHAR *name = cs->lpszName; HICON hIcon; - if (unicode || IS_INTRESOURCE(cs->lpszName)) - hIcon = STATIC_LoadIconW(cs->hInstance, cs->lpszName, full_style); + + if (!unicode) + { + const char *nameA = (const char *)name; + if (nameA && nameA[0] == '\xff') + name = MAKEINTRESOURCEW(MAKEWORD(nameA[1], nameA[2])); + } + else if (name && name[0] == 0xffff) + { + name = MAKEINTRESOURCEW(name[1]); + } + + if (unicode || IS_INTRESOURCE(name)) + hIcon = STATIC_LoadIconW(cs->hInstance, name, full_style); else - hIcon = STATIC_LoadIconA(cs->hInstance, (LPCSTR)cs->lpszName, full_style); + hIcon = STATIC_LoadIconA(cs->hInstance, (const char *)name, full_style); STATIC_SetIcon(hwnd, hIcon, full_style); } break; case SS_BITMAP: if ((ULONG_PTR)cs->hInstance >> 16) { + const WCHAR *name = cs->lpszName; HBITMAP hBitmap; - if (unicode || IS_INTRESOURCE(cs->lpszName)) - hBitmap = LoadBitmapW(cs->hInstance, cs->lpszName); + + if (!unicode) + { + const char *nameA = (const char *)name; + if (nameA && nameA[0] == '\xff') + name = MAKEINTRESOURCEW(MAKEWORD(nameA[1], nameA[2])); + } + else if (name && name[0] == 0xffff) + { + name = MAKEINTRESOURCEW(name[1]); + } + + if (unicode || IS_INTRESOURCE(name)) + hBitmap = LoadBitmapW(cs->hInstance, name); else - hBitmap = LoadBitmapA(cs->hInstance, (LPCSTR)cs->lpszName); + hBitmap = LoadBitmapA(cs->hInstance, (const char *)name); STATIC_SetBitmap(hwnd, hBitmap, full_style); } break; diff --git a/dlls/user32/tests/static.c b/dlls/user32/tests/static.c index 09e399990cd..a02cb249d49 100644 --- a/dlls/user32/tests/static.c +++ b/dlls/user32/tests/static.c @@ -197,6 +197,24 @@ static void test_set_image(void)
DestroyWindow(hwnd); DeleteObject(image); + + hwnd = CreateWindowW(L"static", L"\uffff\x65", WS_VISIBLE|WS_CHILD|SS_BITMAP, 5, 5, 100, 100, + hMainWnd, (HMENU)CTRL_ID, GetModuleHandleW(NULL), 0); + + bmp = (HBITMAP)SendMessageW(hwnd, STM_GETIMAGE, IMAGE_BITMAP, 0); + ok(bmp != NULL, "got NULL\n"); + test_image(bmp); + + DestroyWindow(hwnd); + + hwnd = CreateWindowA("static", "\xff\x65\0", WS_VISIBLE|WS_CHILD|SS_BITMAP, 5, 5, 100, 100, + hMainWnd, (HMENU)CTRL_ID, GetModuleHandleW(NULL), 0); + + bmp = (HBITMAP)SendMessageW(hwnd, STM_GETIMAGE, IMAGE_BITMAP, 0); + ok(bmp != NULL, "got NULL\n"); + test_image(bmp); + + DestroyWindow(hwnd); }
static void test_STM_SETIMAGE(void)
From: Jacek Caban jacek@codeweavers.com
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=53566 --- dlls/user32/dialog.c | 23 +++++++++++++- dlls/user32/tests/dialog.c | 59 +++++++++++++++++++++++++++++++++++ dlls/user32/tests/resource.rc | 10 ++++++ 3 files changed, 91 insertions(+), 1 deletion(-)
diff --git a/dlls/user32/dialog.c b/dlls/user32/dialog.c index c8d1596a01b..fc7ddb303ff 100644 --- a/dlls/user32/dialog.c +++ b/dlls/user32/dialog.c @@ -220,8 +220,19 @@ static BOOL DIALOG_CreateControls32( HWND hwnd, LPCSTR template, const DLG_TEMPL } if (unicode) { + const WCHAR *caption = info.windowName; + WCHAR caption_buf[3]; + + if (IS_INTRESOURCE(caption) && caption) + { + caption_buf[0] = 0xffff; + caption_buf[1] = PtrToUlong( caption ); + caption_buf[2] = 0; + caption = caption_buf; + } + hwndCtrl = CreateWindowExW( info.exStyle | WS_EX_NOPARENTNOTIFY, - info.className, info.windowName, + info.className, caption, info.style | WS_CHILD, MulDiv(info.x, dlgInfo->xBaseUnit, 4), MulDiv(info.y, dlgInfo->yBaseUnit, 8), @@ -236,6 +247,7 @@ static BOOL DIALOG_CreateControls32( HWND hwnd, LPCSTR template, const DLG_TEMPL LPCSTR caption = (LPCSTR)info.windowName; LPSTR class_tmp = NULL; LPSTR caption_tmp = NULL; + char caption_buf[4];
if (!IS_INTRESOURCE(class)) { @@ -251,6 +263,15 @@ static BOOL DIALOG_CreateControls32( HWND hwnd, LPCSTR template, const DLG_TEMPL WideCharToMultiByte( CP_ACP, 0, info.windowName, -1, caption_tmp, len, NULL, NULL ); caption = caption_tmp; } + else if (caption) + { + caption_buf[0] = 0xff; + caption_buf[1] = PtrToUlong( caption ); + caption_buf[2] = PtrToUlong( caption ) >> 8; + caption_buf[3] = 0; + caption = caption_buf; + } + hwndCtrl = CreateWindowExA( info.exStyle | WS_EX_NOPARENTNOTIFY, class, caption, info.style | WS_CHILD, MulDiv(info.x, dlgInfo->xBaseUnit, 4), diff --git a/dlls/user32/tests/dialog.c b/dlls/user32/tests/dialog.c index 0ac1d48a375..3df1a0eab32 100644 --- a/dlls/user32/tests/dialog.c +++ b/dlls/user32/tests/dialog.c @@ -2260,6 +2260,64 @@ static void test_capture_release(void) DestroyWindow(window); }
+static WNDPROC orig_static_proc; +static WCHAR cs_name_paramW[3]; +static char cs_name_paramA[4]; + +static LRESULT WINAPI test_static_create_procW(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) +{ + if (msg == WM_NCCREATE) + { + CREATESTRUCTW *cs = (CREATESTRUCTW *)lparam; + memcpy( cs_name_paramW, cs->lpszName, sizeof(cs_name_paramW) ); + } + + return orig_static_proc(hwnd, msg, wparam, lparam); +} + +static LRESULT WINAPI test_static_create_procA(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) +{ + if (msg == WM_NCCREATE) + { + CREATESTRUCTA *cs = (CREATESTRUCTA *)lparam; + memcpy( cs_name_paramA, cs->lpszName, sizeof(cs_name_paramA) ); + } + + return orig_static_proc(hwnd, msg, wparam, lparam); +} + +static void test_create_controls(void) +{ + HWND control; + INT_PTR ret; + + control = CreateWindowA("static", "", 0, 100, 200, 300, 400, NULL, NULL, NULL, NULL); + ok(control != 0, "failed to create control window\n"); + + orig_static_proc = (WNDPROC)SetClassLongPtrA(control, GCLP_WNDPROC, (ULONG_PTR)test_static_create_procA); + + cs_name_paramW[0] = 0; + ret = DialogBoxParamA(GetModuleHandleA(NULL), "IDD_SS_ICON_DIALOG", 0, DestroyOnCloseDlgWinProc, 0); + ok(0 == ret, "DialogBoxParamA returned %Id, expected 0\n", ret); + ok(!memcmp(cs_name_paramA, "\xff\0\x61", 3), "name param = %s\n", debugstr_an(cs_name_paramA, 3)); + + SetClassLongPtrA(control, GCLP_WNDPROC, (ULONG_PTR)orig_static_proc); + DestroyWindow(control); + + control = CreateWindowW(L"static", L"", 0, 100, 200, 300, 400, NULL, NULL, NULL, NULL); + ok(control != 0, "failed to create control window\n"); + + orig_static_proc = (WNDPROC)SetClassLongPtrW(control, GCLP_WNDPROC, (ULONG_PTR)test_static_create_procW); + + ret = DialogBoxParamW(GetModuleHandleW(NULL), L"IDD_SS_ICON_DIALOG", 0, DestroyOnCloseDlgWinProc, 0); + ok(0 == ret, "DialogBoxParamW returned %Id, expected 0\n", ret); + ok(!memcmp(cs_name_paramW, L"\xffff\x6100", 2 * sizeof(WCHAR)), + "name param = %s\n", debugstr_wn(cs_name_paramW, 2)); + + SetClassLongPtrW(control, GCLP_WNDPROC, (ULONG_PTR)orig_static_proc); + DestroyWindow(control); +} + START_TEST(dialog) { g_hinst = GetModuleHandleA (0); @@ -2273,6 +2331,7 @@ START_TEST(dialog) test_focus(); test_GetDlgItem(); test_GetDlgItemText(); + test_create_controls(); test_DialogBoxParam(); test_DisabledDialogTest(); test_MessageBoxFontTest(); diff --git a/dlls/user32/tests/resource.rc b/dlls/user32/tests/resource.rc index 89aaf5a61c5..a957e50689d 100644 --- a/dlls/user32/tests/resource.rc +++ b/dlls/user32/tests/resource.rc @@ -276,3 +276,13 @@ FONT 8, "MS Shell Dlg" } MENUITEM "&Quit", 300 } + +IDD_SS_ICON_DIALOG DIALOG 0, 0, 186, 95 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Dialog" +FONT 8, "MS Sans Serif" +BEGIN + CONTROL 0x6100, 1003, "STATIC", SS_ICON | WS_CHILD | WS_VISIBLE, 7, 57, 21, 20 + DEFPUSHBUTTON "OK",IDOK,129,7,50,14 + PUSHBUTTON "Cancel",IDCANCEL,129,24,50,14 +END
Hi,
It looks like your patch introduced the new failures shown below. Please investigate and fix them before resubmitting your patch. If they are not new, fixing them anyway would help a lot. Otherwise please ask for the known failures list to be updated.
The tests also ran into some preexisting test failures. If you know how to fix them that would be helpful. See the TestBot job for the details:
The full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=121914
Your paranoid android.
=== w7u_2qxl (32 bit report) ===
user32: input.c:746: Test failed: 0 (a4/0): 00 from 00 -> 80 unexpected input.c:746: Test failed: 0 (a4/0): 41 from 01 -> 00 unexpected
=== w7u_el (32 bit report) ===
user32: input.c:4517: Test failed: SendInput triggered unexpected message 0xc042
=== w10pro64 (32 bit report) ===
user32: input.c:4168: Test failed: 1:0: WaitForSingleObject returned 258 input.c:4111: Test failed: 1:0: expected that X highest bit is set, got 0 input.c:4112: Test failed: 1:0: expected that X keystate is set input.c:4112: Test failed: 1:0: expected that X keystate is set input.c:4119: Test failed: 1:0: expected that X keystate is set input.c:4119: Test failed: 1:0: expected that X keystate is set input.c:4111: Test failed: 1:1: expected that X highest bit is set, got 0x1 input.c:4112: Test failed: 1:1: expected that X keystate is set input.c:4112: Test failed: 1:1: expected that X keystate is set input.c:4119: Test failed: 1:1: expected that X keystate is set input.c:4119: Test failed: 1:1: expected that X keystate is set input.c:4111: Test failed: 1:2: expected that X highest bit is set, got 0 input.c:4112: Test failed: 1:2: expected that X keystate is set input.c:4112: Test failed: 1:2: expected that X keystate is set input.c:4119: Test failed: 1:2: expected that X keystate is set input.c:4119: Test failed: 1:2: expected that X keystate is set input.c:4111: Test failed: 1:3: expected that X highest bit is set, got 0x1 input.c:4112: Test failed: 1:3: expected that X keystate is set input.c:4112: Test failed: 1:3: expected that X keystate is set input.c:4119: Test failed: 1:3: expected that X keystate is set input.c:4119: Test failed: 1:3: expected that X keystate is set input.c:4111: Test failed: 2:0: expected that X highest bit is set, got 0 input.c:4112: Test failed: 2:0: expected that X keystate is set input.c:4112: Test failed: 2:0: expected that X keystate is set input.c:4119: Test failed: 2:0: expected that X keystate is set input.c:4119: Test failed: 2:0: expected that X keystate is set input.c:4111: Test failed: 2:1: expected that X highest bit is set, got 0x1 input.c:4112: Test failed: 2:1: expected that X keystate is set input.c:4112: Test failed: 2:1: expected that X keystate is set input.c:4119: Test failed: 2:1: expected that X keystate is set input.c:4119: Test failed: 2:1: expected that X keystate is set input.c:4111: Test failed: 2:2: expected that X highest bit is set, got 0 input.c:4112: Test failed: 2:2: expected that X keystate is set input.c:4112: Test failed: 2:2: expected that X keystate is set input.c:4119: Test failed: 2:2: expected that X keystate is set input.c:4119: Test failed: 2:2: expected that X keystate is set input.c:4111: Test failed: 2:3: expected that X highest bit is set, got 0x1 input.c:4112: Test failed: 2:3: expected that X keystate is set input.c:4112: Test failed: 2:3: expected that X keystate is set input.c:4119: Test failed: 2:3: expected that X keystate is set input.c:4119: Test failed: 2:3: expected that X keystate is set input.c:4111: Test failed: 3:1: expected that X highest bit is set, got 0x1 input.c:4112: Test failed: 3:1: expected that X keystate is set input.c:4112: Test failed: 3:1: expected that X keystate is set input.c:4119: Test failed: 3:1: expected that X keystate is set input.c:4119: Test failed: 3:1: expected that X keystate is set input.c:4111: Test failed: 3:2: expected that X highest bit is set, got 0 input.c:4112: Test failed: 3:2: expected that X keystate is set input.c:4112: Test failed: 3:2: expected that X keystate is set input.c:4119: Test failed: 3:2: expected that X keystate is set input.c:4119: Test failed: 3:2: expected that X keystate is set input.c:4111: Test failed: 3:3: expected that X highest bit is set, got 0x1 input.c:4112: Test failed: 3:3: expected that X keystate is set input.c:4112: Test failed: 3:3: expected that X keystate is set input.c:4119: Test failed: 3:3: expected that X keystate is set input.c:4119: Test failed: 3:3: expected that X keystate is set input.c:4111: Test failed: 4:0: expected that X highest bit is set, got 0 input.c:4112: Test failed: 4:0: expected that X keystate is set input.c:4112: Test failed: 4:0: expected that X keystate is set input.c:4119: Test failed: 4:0: expected that X keystate is set input.c:4119: Test failed: 4:0: expected that X keystate is set input.c:4111: Test failed: 4:1: expected that X highest bit is set, got 0x1 input.c:4112: Test failed: 4:1: expected that X keystate is set input.c:4112: Test failed: 4:1: expected that X keystate is set input.c:4119: Test failed: 4:1: expected that X keystate is set input.c:4119: Test failed: 4:1: expected that X keystate is set input.c:4111: Test failed: 4:2: expected that X highest bit is set, got 0 input.c:4112: Test failed: 4:2: expected that X keystate is set input.c:4112: Test failed: 4:2: expected that X keystate is set input.c:4119: Test failed: 4:2: expected that X keystate is set input.c:4119: Test failed: 4:2: expected that X keystate is set input.c:4111: Test failed: 4:3: expected that X highest bit is set, got 0x1 input.c:4112: Test failed: 4:3: expected that X keystate is set input.c:4112: Test failed: 4:3: expected that X keystate is set input.c:4119: Test failed: 4:3: expected that X keystate is set input.c:4119: Test failed: 4:3: expected that X keystate is set input.c:4111: Test failed: 5:0: expected that X highest bit is set, got 0 input.c:4112: Test failed: 5:0: expected that X keystate is set input.c:4112: Test failed: 5:0: expected that X keystate is set input.c:4119: Test failed: 5:0: expected that X keystate is set input.c:4119: Test failed: 5:0: expected that X keystate is set input.c:4111: Test failed: 5:1: expected that X highest bit is set, got 0x1 input.c:4112: Test failed: 5:1: expected that X keystate is set input.c:4112: Test failed: 5:1: expected that X keystate is set input.c:4119: Test failed: 5:1: expected that X keystate is set input.c:4119: Test failed: 5:1: expected that X keystate is set input.c:4111: Test failed: 5:2: expected that X highest bit is set, got 0 input.c:4112: Test failed: 5:2: expected that X keystate is set input.c:4112: Test failed: 5:2: expected that X keystate is set input.c:4119: Test failed: 5:2: expected that X keystate is set input.c:4119: Test failed: 5:2: expected that X keystate is set input.c:4111: Test failed: 5:3: expected that X highest bit is set, got 0x1 input.c:4112: Test failed: 5:3: expected that X keystate is set input.c:4112: Test failed: 5:3: expected that X keystate is set input.c:4119: Test failed: 5:3: expected that X keystate is set input.c:4119: Test failed: 5:3: expected that X keystate is set input.c:4111: Test failed: 6:0: expected that X highest bit is set, got 0 input.c:4112: Test failed: 6:0: expected that X keystate is set input.c:4112: Test failed: 6:0: expected that X keystate is set input.c:4119: Test failed: 6:0: expected that X keystate is set input.c:4119: Test failed: 6:0: expected that X keystate is set input.c:4111: Test failed: 6:1: expected that X highest bit is set, got 0x1 input.c:4112: Test failed: 6:1: expected that X keystate is set input.c:4112: Test failed: 6:1: expected that X keystate is set input.c:4119: Test failed: 6:1: expected that X keystate is set input.c:4119: Test failed: 6:1: expected that X keystate is set input.c:4111: Test failed: 6:2: expected that X highest bit is set, got 0 input.c:4112: Test failed: 6:2: expected that X keystate is set input.c:4112: Test failed: 6:2: expected that X keystate is set input.c:4119: Test failed: 6:2: expected that X keystate is set input.c:4119: Test failed: 6:2: expected that X keystate is set input.c:4111: Test failed: 6:3: expected that X highest bit is set, got 0x1 input.c:4112: Test failed: 6:3: expected that X keystate is set input.c:4112: Test failed: 6:3: expected that X keystate is set input.c:4119: Test failed: 6:3: expected that X keystate is set input.c:4119: Test failed: 6:3: expected that X keystate is set input.c:4111: Test failed: 7:0: expected that X highest bit is set, got 0 input.c:4112: Test failed: 7:0: expected that X keystate is set input.c:4112: Test failed: 7:0: expected that X keystate is set input.c:4119: Test failed: 7:0: expected that X keystate is set input.c:4119: Test failed: 7:0: expected that X keystate is set input.c:4111: Test failed: 7:1: expected that X highest bit is set, got 0x1 input.c:4112: Test failed: 7:1: expected that X keystate is set input.c:4112: Test failed: 7:1: expected that X keystate is set input.c:4119: Test failed: 7:1: expected that X keystate is set input.c:4119: Test failed: 7:1: expected that X keystate is set input.c:4111: Test failed: 7:2: expected that X highest bit is set, got 0 input.c:4112: Test failed: 7:2: expected that X keystate is set input.c:4112: Test failed: 7:2: expected that X keystate is set input.c:4119: Test failed: 7:2: expected that X keystate is set input.c:4119: Test failed: 7:2: expected that X keystate is set input.c:4111: Test failed: 7:3: expected that X highest bit is set, got 0x1 input.c:4112: Test failed: 7:3: expected that X keystate is set input.c:4112: Test failed: 7:3: expected that X keystate is set input.c:4119: Test failed: 7:3: expected that X keystate is set input.c:4119: Test failed: 7:3: expected that X keystate is set input.c:4111: Test failed: 8:0: expected that X highest bit is set, got 0 input.c:4112: Test failed: 8:0: expected that X keystate is set input.c:4112: Test failed: 8:0: expected that X keystate is set input.c:4119: Test failed: 8:0: expected that X keystate is set input.c:4119: Test failed: 8:0: expected that X keystate is set input.c:4111: Test failed: 8:1: expected that X highest bit is set, got 0x1 input.c:4112: Test failed: 8:1: expected that X keystate is set input.c:4112: Test failed: 8:1: expected that X keystate is set input.c:4119: Test failed: 8:1: expected that X keystate is set input.c:4119: Test failed: 8:1: expected that X keystate is set input.c:4111: Test failed: 8:2: expected that X highest bit is set, got 0 input.c:4112: Test failed: 8:2: expected that X keystate is set input.c:4112: Test failed: 8:2: expected that X keystate is set input.c:4119: Test failed: 8:2: expected that X keystate is set input.c:4119: Test failed: 8:2: expected that X keystate is set input.c:4111: Test failed: 8:3: expected that X highest bit is set, got 0x1 input.c:4112: Test failed: 8:3: expected that X keystate is set input.c:4112: Test failed: 8:3: expected that X keystate is set input.c:4119: Test failed: 8:3: expected that X keystate is set input.c:4119: Test failed: 8:3: expected that X keystate is set
=== w10pro64_ja (64 bit report) ===
user32: menu.c:2324: Test failed: test 0 menu.c:2324: Test failed: test 2 menu.c:2324: Test failed: test 4
=== w10pro64_zh_CN (64 bit report) ===
user32: msg.c:13063: Test failed: coords not changed: (101 101) (101 101) msg.c:13081: Test failed: coords not changed: (101 101) (101 101)
=== w8 (32 bit report) ===
user32: sysparams.c:2490: Test failed: Waiting for the WM_DISPLAYCHANGE message timed out sysparams.c:2501: Test failed: Set bpp 32, but WM_DISPLAYCHANGE reported bpp -1
=== w8adm (32 bit report) ===
user32: sysparams.c:2490: Test failed: Waiting for the WM_DISPLAYCHANGE message timed out sysparams.c:2501: Test failed: Set bpp 32, but WM_DISPLAYCHANGE reported bpp -1
=== w864 (32 bit report) ===
user32: sysparams.c:2490: Test failed: Waiting for the WM_DISPLAYCHANGE message timed out sysparams.c:2501: Test failed: Set bpp 32, but WM_DISPLAYCHANGE reported bpp -1
=== w1064v1809 (32 bit report) ===
user32: sysparams.c:2490: Test failed: Waiting for the WM_DISPLAYCHANGE message timed out sysparams.c:2501: Test failed: Set bpp 32, but WM_DISPLAYCHANGE reported bpp -1
=== w1064 (32 bit report) ===
user32: sysparams.c:2490: Test failed: Waiting for the WM_DISPLAYCHANGE message timed out sysparams.c:2501: Test failed: Set bpp 32, but WM_DISPLAYCHANGE reported bpp -1
=== w1064_tsign (32 bit report) ===
user32: sysparams.c:2490: Test failed: Waiting for the WM_DISPLAYCHANGE message timed out sysparams.c:2501: Test failed: Set bpp 32, but WM_DISPLAYCHANGE reported bpp -1
=== w10pro64 (32 bit report) ===
user32: sysparams.c:2490: Test failed: Waiting for the WM_DISPLAYCHANGE message timed out sysparams.c:2501: Test failed: Set bpp 32, but WM_DISPLAYCHANGE reported bpp -1
=== w10pro64_ar (64 bit report) ===
user32: win.c:4592: Test failed: hwnd 0000000000100324/0000000000100324 message 0200 win.c:4595: Test failed: hwnd 0000000000100324/0000000000100324 message 0201
This merge request was approved by Huw Davies.