-- v4: win32u: Sync cursor position on window position change.
From: Paul Gofman pgofman@codeweavers.com
--- dlls/user32/tests/msg.c | 51 +++++++++++++++++++++++++++++++++++- dlls/win32u/input.c | 13 +++++++++ dlls/win32u/win32u_private.h | 1 + dlls/win32u/window.c | 1 + server/protocol.def | 1 + server/queue.c | 1 + 6 files changed, 67 insertions(+), 1 deletion(-)
diff --git a/dlls/user32/tests/msg.c b/dlls/user32/tests/msg.c index 0347f0d73b0..590f50aa6b7 100644 --- a/dlls/user32/tests/msg.c +++ b/dlls/user32/tests/msg.c @@ -73,6 +73,8 @@ #define ARCH "none" #endif
+static void pump_msg_loop(HWND hwnd, HACCEL hAccel); + /* encoded DRAWITEMSTRUCT into an LPARAM */ typedef struct { @@ -108,6 +110,7 @@ typedef struct
static BOOL test_DestroyWindow_flag; static BOOL test_context_menu; +static BOOL ignore_mouse_messages = TRUE; static HWINEVENTHOOK hEvent_hook; static HHOOK hKBD_hook; static HHOOK hCBT_hook; @@ -6160,6 +6163,30 @@ static const struct message WmFrameChanged_move[] = { { 0 } };
+static const struct message WmMove_mouse[] = { + { WM_WINDOWPOSCHANGING, sent|wparam, SWP_NOACTIVATE|SWP_NOSIZE }, + { WM_WINDOWPOSCHANGED, sent|wparam, SWP_NOACTIVATE|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOCLIENTSIZE }, + { WM_MOVE, sent|defwinproc, 0 }, + { WM_GETTEXT, sent|optional }, + { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, + { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam|optional, 0, 0 }, /* Win7 seems to send this twice. */ + { WM_SETCURSOR, sent|lparam, 0, HTCLIENT | (WM_MOUSEMOVE << 16) }, + { WM_MOUSEMOVE, sent }, + /* WM_MOUSEMOVE with accompanying WM_SETCURSOR may sometimes appear a few extra times on Windows 7 with the + * same parameters. */ + { WM_SETCURSOR, sent|lparam|optional, 0, HTCLIENT | (WM_MOUSEMOVE << 16) }, + { WM_MOUSEMOVE, sent|optional }, + { WM_SETCURSOR, sent|lparam|optional, 0, HTCLIENT | (WM_MOUSEMOVE << 16) }, + { WM_MOUSEMOVE, sent|optional }, + { WM_SETCURSOR, sent|lparam|optional, 0, HTCLIENT | (WM_MOUSEMOVE << 16) }, + { WM_MOUSEMOVE, sent|optional }, + { WM_SETCURSOR, sent|lparam|optional, 0, HTCLIENT | (WM_MOUSEMOVE << 16) }, + { WM_MOUSEMOVE, sent|optional }, + { WM_SETCURSOR, sent|lparam|optional, 0, HTCLIENT | (WM_MOUSEMOVE << 16) }, + { WM_MOUSEMOVE, sent|optional }, + { 0 } +}; + static void test_setwindowpos(void) { HWND hwnd; @@ -6198,6 +6225,7 @@ static void test_setwindowpos(void) expect(sysX + X, rc.right); expect(winY + Y, rc.bottom);
+ GetWindowRect(hwnd, &rc); res = SetWindowPos( hwnd, 0, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE | SWP_FRAMECHANGED); ok_sequence(WmFrameChanged_move, "FrameChanged", FALSE); @@ -6207,6 +6235,26 @@ static void test_setwindowpos(void) expect(sysX, rc.right); expect(winY, rc.bottom);
+ /* get away from possible menu bar to avoid spurious position changed induced by WM. */ + res = SetWindowPos( hwnd, HWND_TOPMOST, 200, 200, 200, 200, SWP_SHOWWINDOW ); + ok(res == TRUE, "SetWindowPos expected TRUE, got %Id.\n", res); + SetForegroundWindow( hwnd ); + SetActiveWindow( hwnd ); + flush_events(); + pump_msg_loop( hwnd, 0 ); + flush_sequence(); + GetWindowRect( hwnd, &rc ); + SetCursorPos( rc.left + 100, rc.top + 100 ); + flush_events(); + pump_msg_loop( hwnd, 0 ); + flush_sequence(); + ignore_mouse_messages = FALSE; + res = SetWindowPos( hwnd, 0, 205, 205, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE ); + ok(res == TRUE, "SetWindowPos expected TRUE, got %Id.\n", res); + flush_events(); + ok_sequence(WmMove_mouse, "MouseMove", FALSE); + ignore_mouse_messages = TRUE; + DestroyWindow(hwnd); }
@@ -10853,7 +10901,8 @@ static LRESULT MsgCheckProc (BOOL unicode, HWND hwnd, UINT message, case WM_NCMOUSEMOVE: case WM_SETCURSOR: case WM_IME_SELECT: - return 0; + if (ignore_mouse_messages) return 0; + break; }
msg.hwnd = hwnd; diff --git a/dlls/win32u/input.c b/dlls/win32u/input.c index 0640b34ac2e..0577f460601 100644 --- a/dlls/win32u/input.c +++ b/dlls/win32u/input.c @@ -732,6 +732,19 @@ BOOL WINAPI NtUserSetCursorPos( INT x, INT y ) return ret; }
+/*********************************************************************** + * update_window_cursor_pos + */ +void update_window_cursor_pos(void) +{ + SERVER_START_REQ( set_cursor ) + { + req->flags = SET_CURSOR_UPDATE; + wine_server_call( req ); + } + SERVER_END_REQ; +} + /*********************************************************************** * get_cursor_pos */ diff --git a/dlls/win32u/win32u_private.h b/dlls/win32u/win32u_private.h index 8956f83af75..06f9919267d 100644 --- a/dlls/win32u/win32u_private.h +++ b/dlls/win32u/win32u_private.h @@ -94,6 +94,7 @@ extern BOOL destroy_caret(void); extern HWND get_active_window(void); extern HWND get_capture(void); extern BOOL get_cursor_pos( POINT *pt ); +extern void update_window_cursor_pos(void); extern HWND get_focus(void); extern DWORD get_input_state(void); extern BOOL get_async_keyboard_state( BYTE state[256] ); diff --git a/dlls/win32u/window.c b/dlls/win32u/window.c index 48a7304b6b0..928287b15ee 100644 --- a/dlls/win32u/window.c +++ b/dlls/win32u/window.c @@ -3795,6 +3795,7 @@ BOOL set_window_pos( WINDOWPOS *winpos, int parent_x, int parent_y ) winpos->cx = new_rects.window.right - new_rects.window.left; winpos->cy = new_rects.window.bottom - new_rects.window.top; send_message( winpos->hwnd, WM_WINDOWPOSCHANGED, 0, (LPARAM)winpos ); + update_window_cursor_pos(); }
if ((winpos->flags & (SWP_NOSIZE|SWP_NOMOVE|SWP_FRAMECHANGED)) != (SWP_NOSIZE|SWP_NOMOVE)) diff --git a/server/protocol.def b/server/protocol.def index a4f25e805f8..c0306113220 100644 --- a/server/protocol.def +++ b/server/protocol.def @@ -3916,6 +3916,7 @@ typedef union #define SET_CURSOR_CLIP 0x08 #define SET_CURSOR_NOCLIP 0x10 #define SET_CURSOR_FSCLIP 0x20 +#define SET_CURSOR_UPDATE 0x40
/* Get the history of the 64 last cursor positions */ @REQ(get_cursor_history) diff --git a/server/queue.c b/server/queue.c index c99c8d8661b..29a076cb265 100644 --- a/server/queue.c +++ b/server/queue.c @@ -4009,6 +4009,7 @@ DECL_HANDLER(set_cursor) } SHARED_WRITE_END;
+ if (req->flags & SET_CURSOR_UPDATE) set_cursor_pos( desktop, reply->prev_x, reply->prev_y ); if (req->flags & SET_CURSOR_POS) set_cursor_pos( desktop, req->x, req->y ); if (req->flags & SET_CURSOR_CLIP) set_clip_rectangle( desktop, &req->clip, req->flags, 0 ); if (req->flags & SET_CURSOR_NOCLIP) set_clip_rectangle( desktop, NULL, SET_CURSOR_NOCLIP, 0 );
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=149271
Your paranoid android.
=== w11pro64_amd (64 bit report) ===
user32: msg.c:10174: Test failed: destroy child on thread exit: 3: the msg sequence is not complete: expected msg 0000 - actual msg 0024
=== debian11b (64 bit WoW report) ===
user32: input.c:733: Test failed: peek: lmenu_vkey_peeked: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_SYSKEYDOWN, wparam 0x12, lparam 0x20010001 input.c:734: Test failed: peek: lmenu_vkey_peeked: 0: got VK_MENU: 0 input.c:734: Test failed: peek: lmenu_vkey_peeked: 0: got VK_LMENU: 0 input.c:733: Test failed: peek: lmenu_vkey_peeked: 1: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_SYSKEYDOWN, wparam 0x46, lparam 0x20020001 input.c:733: Test failed: peek: lmenu_vkey_peeked: 1: test->expect 2 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_SYSCHAR, wparam 0x66, lparam 0x20020001 input.c:734: Test failed: peek: lmenu_vkey_peeked: 1: got VK_MENU: 0 input.c:734: Test failed: peek: lmenu_vkey_peeked: 1: got F: 0 input.c:734: Test failed: peek: lmenu_vkey_peeked: 1: got VK_LMENU: 0 input.c:733: Test failed: peek: lmenu_vkey_peeked: 2: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_SYSKEYUP, wparam 0x46, lparam 0xffffffffe0030001 input.c:734: Test failed: peek: lmenu_vkey_peeked: 2: got VK_MENU: 0 input.c:734: Test failed: peek: lmenu_vkey_peeked: 2: got VK_LMENU: 0 input.c:733: Test failed: peek: lmenu_vkey_peeked: 3: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x12, lparam 0xffffffffc0040001 input.c:733: Test failed: peek: lcontrol_vkey: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYDOWN, wparam 0x11, lparam 0x10001 input.c:734: Test failed: peek: lcontrol_vkey: 0: got VK_CONTROL: 0 input.c:734: Test failed: peek: lcontrol_vkey: 0: got VK_LCONTROL: 0 input.c:733: Test failed: peek: lcontrol_vkey: 1: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYDOWN, wparam 0x46, lparam 0x20001 input.c:733: Test failed: peek: lcontrol_vkey: 1: test->expect 2 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_CHAR, wparam 0x6, lparam 0x20001 input.c:734: Test failed: peek: lcontrol_vkey: 1: got VK_CONTROL: 0 input.c:734: Test failed: peek: lcontrol_vkey: 1: got F: 0 input.c:734: Test failed: peek: lcontrol_vkey: 1: got VK_LCONTROL: 0 input.c:733: Test failed: peek: lcontrol_vkey: 2: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x46, lparam 0xffffffffc0030001 input.c:734: Test failed: peek: lcontrol_vkey: 2: got VK_CONTROL: 0 input.c:734: Test failed: peek: lcontrol_vkey: 2: got VK_LCONTROL: 0 input.c:733: Test failed: peek: lcontrol_vkey: 3: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x11, lparam 0xffffffffc0040001 input.c:733: Test failed: peek: lmenu_lcontrol_vkey: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_SYSKEYDOWN, wparam 0x12, lparam 0x20010001 input.c:734: Test failed: peek: lmenu_lcontrol_vkey: 0: got VK_MENU: 0 input.c:734: Test failed: peek: lmenu_lcontrol_vkey: 0: got VK_LMENU: 0 input.c:733: Test failed: peek: lmenu_lcontrol_vkey: 1: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYDOWN, wparam 0x11, lparam 0x20020001 input.c:734: Test failed: peek: lmenu_lcontrol_vkey: 1: got VK_CONTROL: 0 input.c:734: Test failed: peek: lmenu_lcontrol_vkey: 1: got VK_MENU: 0 input.c:734: Test failed: peek: lmenu_lcontrol_vkey: 1: got VK_LCONTROL: 0 input.c:734: Test failed: peek: lmenu_lcontrol_vkey: 1: got VK_LMENU: 0 input.c:733: Test failed: peek: lmenu_lcontrol_vkey: 2: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYDOWN, wparam 0x46, lparam 0x20030001 input.c:734: Test failed: peek: lmenu_lcontrol_vkey: 2: got VK_CONTROL: 0 input.c:734: Test failed: peek: lmenu_lcontrol_vkey: 2: got VK_MENU: 0 input.c:734: Test failed: peek: lmenu_lcontrol_vkey: 2: got F: 0 input.c:734: Test failed: peek: lmenu_lcontrol_vkey: 2: got VK_LCONTROL: 0 input.c:734: Test failed: peek: lmenu_lcontrol_vkey: 2: got VK_LMENU: 0 input.c:733: Test failed: peek: lmenu_lcontrol_vkey: 3: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x46, lparam 0xffffffffe0040001 input.c:734: Test failed: peek: lmenu_lcontrol_vkey: 3: got VK_CONTROL: 0 input.c:734: Test failed: peek: lmenu_lcontrol_vkey: 3: got VK_MENU: 0 input.c:734: Test failed: peek: lmenu_lcontrol_vkey: 3: got VK_LCONTROL: 0 input.c:734: Test failed: peek: lmenu_lcontrol_vkey: 3: got VK_LMENU: 0 input.c:733: Test failed: peek: lmenu_lcontrol_vkey: 4: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_SYSKEYUP, wparam 0x11, lparam 0xffffffffe0050001 input.c:734: Test failed: peek: lmenu_lcontrol_vkey: 4: got VK_MENU: 0 input.c:734: Test failed: peek: lmenu_lcontrol_vkey: 4: got VK_LMENU: 0 input.c:733: Test failed: peek: lmenu_lcontrol_vkey: 5: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x12, lparam 0xffffffffc0060001 input.c:733: Test failed: peek: shift_vkey: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYDOWN, wparam 0x10, lparam 0x10001 input.c:734: Test failed: peek: shift_vkey: 0: got VK_SHIFT: 0 input.c:734: Test failed: peek: shift_vkey: 0: got VK_LSHIFT: 0 input.c:733: Test failed: peek: shift_vkey: 1: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYDOWN, wparam 0x46, lparam 0x20001 input.c:733: Test failed: peek: shift_vkey: 1: test->expect 2 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_CHAR, wparam 0x46, lparam 0x20001 input.c:734: Test failed: peek: shift_vkey: 1: got VK_SHIFT: 0 input.c:734: Test failed: peek: shift_vkey: 1: got F: 0 input.c:734: Test failed: peek: shift_vkey: 1: got VK_LSHIFT: 0 input.c:733: Test failed: peek: shift_vkey: 2: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x46, lparam 0xffffffffc0030001 input.c:734: Test failed: peek: shift_vkey: 2: got VK_SHIFT: 0 input.c:734: Test failed: peek: shift_vkey: 2: got VK_LSHIFT: 0 input.c:733: Test failed: peek: shift_vkey: 3: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x10, lparam 0xffffffffc0040001 input.c:733: Test failed: peek: rshift: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYDOWN, wparam 0x10, lparam 0x10001 input.c:734: Test failed: peek: rshift: 0: got VK_SHIFT: 0 input.c:734: Test succeeded inside todo block: peek: rshift: 0: got VK_LSHIFT: 0 input.c:733: Test failed: peek: rshift: 1: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x10, lparam 0xffffffffc0020001 input.c:733: Test failed: peek: lshift_ext: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYDOWN, wparam 0x10, lparam 0x10001 input.c:734: Test failed: peek: lshift_ext: 0: got VK_SHIFT: 0 input.c:734: Test failed: peek: lshift_ext: 0: got VK_RSHIFT: 0 input.c:733: Test failed: peek: lshift_ext: 1: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x10, lparam 0xffffffffc0020001 input.c:733: Test failed: peek: rshift_ext: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYDOWN, wparam 0x10, lparam 0x10001 input.c:734: Test failed: peek: rshift_ext: 0: got VK_SHIFT: 0 input.c:734: Test failed: peek: rshift_ext: 0: got VK_RSHIFT: 0 input.c:733: Test failed: peek: rshift_ext: 1: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x10, lparam 0xffffffffc0020001 input.c:733: Test failed: peek: shift: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYDOWN, wparam 0x10, lparam 0x10001 input.c:734: Test failed: peek: shift: 0: got VK_SHIFT: 0 input.c:734: Test failed: peek: shift: 0: got VK_LSHIFT: 0 input.c:733: Test failed: peek: shift: 1: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x10, lparam 0xffffffffc0020001 input.c:733: Test failed: peek: shift_ext: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYDOWN, wparam 0x10, lparam 0x10001 input.c:734: Test failed: peek: shift_ext: 0: got VK_SHIFT: 0 input.c:734: Test failed: peek: shift_ext: 0: got VK_RSHIFT: 0 input.c:733: Test failed: peek: shift_ext: 1: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x10, lparam 0xffffffffc0020001 input.c:733: Test failed: peek: rcontrol: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYDOWN, wparam 0x11, lparam 0x10001 input.c:734: Test failed: peek: rcontrol: 0: got VK_CONTROL: 0 input.c:734: Test failed: peek: rcontrol: 0: got VK_LCONTROL: 0 input.c:733: Test failed: peek: rcontrol: 1: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x11, lparam 0xffffffffc0020001 input.c:733: Test failed: peek: lcontrol_ext: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYDOWN, wparam 0x11, lparam 0x1010001 input.c:734: Test failed: peek: lcontrol_ext: 0: got VK_CONTROL: 0 input.c:734: Test failed: peek: lcontrol_ext: 0: got VK_RCONTROL: 0 input.c:733: Test failed: peek: lcontrol_ext: 1: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x11, lparam 0xffffffffc1020001 input.c:733: Test failed: peek: rcontrol_ext: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYDOWN, wparam 0x11, lparam 0x1010001 input.c:734: Test failed: peek: rcontrol_ext: 0: got VK_CONTROL: 0 input.c:734: Test failed: peek: rcontrol_ext: 0: got VK_RCONTROL: 0 input.c:733: Test failed: peek: rcontrol_ext: 1: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x11, lparam 0xffffffffc1020001 input.c:733: Test failed: peek: control: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYDOWN, wparam 0x11, lparam 0x10001 input.c:734: Test failed: peek: control: 0: got VK_CONTROL: 0 input.c:734: Test failed: peek: control: 0: got VK_LCONTROL: 0 input.c:733: Test failed: peek: control: 1: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x11, lparam 0xffffffffc0020001 input.c:733: Test failed: peek: control_ext: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYDOWN, wparam 0x11, lparam 0x1010001 input.c:734: Test failed: peek: control_ext: 0: got VK_CONTROL: 0 input.c:734: Test failed: peek: control_ext: 0: got VK_RCONTROL: 0 input.c:733: Test failed: peek: control_ext: 1: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x11, lparam 0xffffffffc1020001 input.c:733: Test failed: peek: rmenu_peeked: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_SYSKEYDOWN, wparam 0x12, lparam 0x20010001 input.c:734: Test failed: peek: rmenu_peeked: 0: got VK_MENU: 0 input.c:734: Test failed: peek: rmenu_peeked: 0: got VK_LMENU: 0 input.c:733: Test failed: peek: rmenu_peeked: 1: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_SYSKEYUP, wparam 0x12, lparam 0xffffffffc0020001 input.c:733: Test failed: peek: lmenu_ext_peeked: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_SYSKEYDOWN, wparam 0x12, lparam 0x21010001 input.c:734: Test failed: peek: lmenu_ext_peeked: 0: got VK_MENU: 0 input.c:734: Test failed: peek: lmenu_ext_peeked: 0: got VK_RMENU: 0 input.c:733: Test failed: peek: lmenu_ext_peeked: 1: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_SYSKEYUP, wparam 0x12, lparam 0xffffffffc1020001 input.c:733: Test failed: peek: rmenu_ext_peeked: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_SYSKEYDOWN, wparam 0x12, lparam 0x21010001 input.c:734: Test failed: peek: rmenu_ext_peeked: 0: got VK_MENU: 0 input.c:734: Test failed: peek: rmenu_ext_peeked: 0: got VK_RMENU: 0 input.c:733: Test failed: peek: rmenu_ext_peeked: 1: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_SYSKEYUP, wparam 0x12, lparam 0xffffffffc1020001 input.c:733: Test failed: peek: menu_peeked: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_SYSKEYDOWN, wparam 0x12, lparam 0x20010001 input.c:734: Test failed: peek: menu_peeked: 0: got VK_MENU: 0 input.c:734: Test failed: peek: menu_peeked: 0: got VK_LMENU: 0 input.c:733: Test failed: peek: menu_peeked: 1: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_SYSKEYUP, wparam 0x12, lparam 0xffffffffc0020001 input.c:733: Test failed: peek: menu_ext_peeked: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_SYSKEYDOWN, wparam 0x12, lparam 0x21010001 input.c:734: Test failed: peek: menu_ext_peeked: 0: got VK_MENU: 0 input.c:734: Test failed: peek: menu_ext_peeked: 0: got VK_RMENU: 0 input.c:733: Test failed: peek: menu_ext_peeked: 1: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_SYSKEYUP, wparam 0x12, lparam 0xffffffffc1020001 input.c:733: Test failed: peek: lrshift_ext: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYDOWN, wparam 0x10, lparam 0x10001 input.c:734: Test failed: peek: lrshift_ext: 0: got VK_SHIFT: 0 input.c:734: Test failed: peek: lrshift_ext: 0: got VK_LSHIFT: 0 input.c:734: Test failed: peek: lrshift_ext: 1: got VK_SHIFT: 0 input.c:734: Test failed: peek: lrshift_ext: 1: got VK_LSHIFT: 0 input.c:734: Test failed: peek: lrshift_ext: 1: got VK_RSHIFT: 0 input.c:734: Test failed: peek: lrshift_ext: 2: got VK_SHIFT: 0 input.c:734: Test failed: peek: lrshift_ext: 2: got VK_LSHIFT: 0 input.c:733: Test failed: peek: lrshift_ext: 3: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x10, lparam 0xffffffffc0040001 input.c:733: Test failed: peek: rshift_scan: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYDOWN, wparam 0x10, lparam 0x360001 input.c:734: Test failed: peek: rshift_scan: 0: got VK_SHIFT: 0 input.c:734: Test failed: peek: rshift_scan: 0: got VK_LSHIFT: 0 input.c:733: Test failed: peek: rshift_scan: 1: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYDOWN, wparam 0x46, lparam 0x210001 input.c:733: Test failed: peek: rshift_scan: 1: test->expect 2 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_CHAR, wparam 0x46, lparam 0x210001 input.c:734: Test failed: peek: rshift_scan: 1: got VK_SHIFT: 0 input.c:734: Test failed: peek: rshift_scan: 1: got F: 0 input.c:734: Test failed: peek: rshift_scan: 1: got VK_LSHIFT: 0 input.c:733: Test failed: peek: rshift_scan: 2: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x46, lparam 0xffffffffc0210001 input.c:734: Test failed: peek: rshift_scan: 2: got VK_SHIFT: 0 input.c:734: Test failed: peek: rshift_scan: 2: got VK_LSHIFT: 0 input.c:733: Test failed: peek: rshift_scan: 3: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x10, lparam 0xffffffffc0360001 input.c:733: Test failed: peek: rctrl_scan: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYDOWN, wparam 0x11, lparam 0x1d0001 input.c:734: Test failed: peek: rctrl_scan: 0: got VK_CONTROL: 0 input.c:734: Test failed: peek: rctrl_scan: 0: got VK_LCONTROL: 0 input.c:733: Test failed: peek: rctrl_scan: 1: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x11, lparam 0xffffffffc01d0001 input.c:733: Test failed: peek: rctrl_scan: 2: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYDOWN, wparam 0x11, lparam 0x11d0001 input.c:734: Test failed: peek: rctrl_scan: 2: got VK_CONTROL: 0 input.c:734: Test failed: peek: rctrl_scan: 2: got VK_RCONTROL: 0 input.c:733: Test failed: peek: rctrl_scan: 3: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x11, lparam 0xffffffffc11d0001 input.c:733: Test failed: peek: unicode: 0: test->expect 2 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_CHAR, wparam 0x3c0, lparam 0x1 input.c:734: Test failed: peek: unicode: 0: got 0xe7: 0 input.c:733: Test failed: peek: lmenu_unicode_peeked: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_SYSKEYDOWN, wparam 0x12, lparam 0x20010001 input.c:734: Test failed: peek: lmenu_unicode_peeked: 0: got VK_MENU: 0 input.c:734: Test failed: peek: lmenu_unicode_peeked: 0: got VK_LMENU: 0 input.c:734: Test failed: peek: lmenu_unicode_peeked: 1: got VK_MENU: 0 input.c:734: Test failed: peek: lmenu_unicode_peeked: 1: got VK_LMENU: 0 input.c:734: Test failed: peek: lmenu_unicode_peeked: 1: got 0xe7: 0 input.c:734: Test failed: peek: lmenu_unicode_peeked: 2: got VK_MENU: 0 input.c:734: Test failed: peek: lmenu_unicode_peeked: 2: got VK_LMENU: 0 input.c:733: Test failed: peek: lmenu_unicode_peeked: 3: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x12, lparam 0xffffffffc0040001 input.c:733: Test failed: peek: unicode_vkey: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYDOWN, wparam 0x46, lparam 0xc00001 input.c:733: Test failed: peek: unicode_vkey: 0: test->expect 2 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_CHAR, wparam 0x66, lparam 0xc00001 input.c:734: Test failed: peek: unicode_vkey: 0: got F: 0 input.c:733: Test failed: peek: unicode_vkey: 1: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x46, lparam 0xffffffffc0c00001 input.c:733: Test failed: peek: unicode_vkey_ctrl: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYDOWN, wparam 0x11, lparam 0xc00001 input.c:734: Test failed: peek: unicode_vkey_ctrl: 0: got VK_CONTROL: 0 input.c:734: Test failed: peek: unicode_vkey_ctrl: 0: got VK_LCONTROL: 0 input.c:733: Test failed: peek: unicode_vkey_ctrl: 1: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x11, lparam 0xffffffffc0c00001 input.c:733: Test failed: peek: unicode_vkey_packet: 0: test->expect 2 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_CHAR, wparam 0xc0, lparam 0x1 input.c:734: Test failed: peek: unicode_vkey_packet: 0: got 0xe7: 0 input.c:733: Test failed: peek: numpad_scan: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYDOWN, wparam 0x25, lparam 0x4b0001 input.c:734: Test failed: peek: numpad_scan: 0: got 0x25: 0 input.c:733: Test failed: peek: numpad_scan: 1: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x25, lparam 0xffffffffc04b0001 input.c:733: Test failed: peek: numpad_scan_numlock: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYDOWN, wparam 0x90, lparam 0x450001 input.c:734: Test failed: peek: numpad_scan_numlock: 0: got 0x90: 0 input.c:733: Test failed: peek: numpad_scan_numlock: 1: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x90, lparam 0xffffffffc0450001 input.c:734: Test succeeded inside todo block: peek: numpad_scan_numlock: 2: got 0x25: 0 input.c:733: Test failed: receive: lmenu_vkey: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_SYSKEYDOWN, wparam 0x12, lparam 0x20010001 input.c:734: Test failed: receive: lmenu_vkey: 0: got VK_MENU: 0 input.c:734: Test failed: receive: lmenu_vkey: 0: got VK_LMENU: 0 input.c:733: Test failed: receive: lmenu_vkey: 1: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_SYSKEYDOWN, wparam 0x46, lparam 0x20020001 input.c:733: Test failed: receive: lmenu_vkey: 1: test->expect 2 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_SYSCHAR, wparam 0x66, lparam 0x20020001 input.c:733: Test failed: receive: lmenu_vkey: 1: test->expect 3 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_SYSCOMMAND, wparam 0xf100, lparam 0x66 input.c:734: Test failed: receive: lmenu_vkey: 1: got VK_MENU: 0 input.c:734: Test failed: receive: lmenu_vkey: 1: got F: 0 input.c:734: Test failed: receive: lmenu_vkey: 1: got VK_LMENU: 0 input.c:733: Test failed: receive: lmenu_vkey: 2: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_SYSKEYUP, wparam 0x46, lparam 0xffffffffe0030001 input.c:734: Test failed: receive: lmenu_vkey: 2: got VK_MENU: 0 input.c:734: Test failed: receive: lmenu_vkey: 2: got VK_LMENU: 0 input.c:733: Test failed: receive: lmenu_vkey: 3: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x12, lparam 0xffffffffc0040001 input.c:733: Test failed: receive: lcontrol_vkey: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYDOWN, wparam 0x11, lparam 0x10001 input.c:734: Test failed: receive: lcontrol_vkey: 0: got VK_CONTROL: 0 input.c:734: Test failed: receive: lcontrol_vkey: 0: got VK_LCONTROL: 0 input.c:733: Test failed: receive: lcontrol_vkey: 1: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYDOWN, wparam 0x46, lparam 0x20001 input.c:733: Test failed: receive: lcontrol_vkey: 1: test->expect 2 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_CHAR, wparam 0x6, lparam 0x20001 input.c:734: Test failed: receive: lcontrol_vkey: 1: got VK_CONTROL: 0 input.c:734: Test failed: receive: lcontrol_vkey: 1: got F: 0 input.c:734: Test failed: receive: lcontrol_vkey: 1: got VK_LCONTROL: 0 input.c:733: Test failed: receive: lcontrol_vkey: 2: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x46, lparam 0xffffffffc0030001 input.c:734: Test failed: receive: lcontrol_vkey: 2: got VK_CONTROL: 0 input.c:734: Test failed: receive: lcontrol_vkey: 2: got VK_LCONTROL: 0 input.c:733: Test failed: receive: lcontrol_vkey: 3: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x11, lparam 0xffffffffc0040001 input.c:733: Test failed: receive: lmenu_lcontrol_vkey: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_SYSKEYDOWN, wparam 0x12, lparam 0x20010001 input.c:734: Test failed: receive: lmenu_lcontrol_vkey: 0: got VK_MENU: 0 input.c:734: Test failed: receive: lmenu_lcontrol_vkey: 0: got VK_LMENU: 0 input.c:733: Test failed: receive: lmenu_lcontrol_vkey: 1: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYDOWN, wparam 0x11, lparam 0x20020001 input.c:734: Test failed: receive: lmenu_lcontrol_vkey: 1: got VK_CONTROL: 0 input.c:734: Test failed: receive: lmenu_lcontrol_vkey: 1: got VK_MENU: 0 input.c:734: Test failed: receive: lmenu_lcontrol_vkey: 1: got VK_LCONTROL: 0 input.c:734: Test failed: receive: lmenu_lcontrol_vkey: 1: got VK_LMENU: 0 input.c:733: Test failed: receive: lmenu_lcontrol_vkey: 2: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYDOWN, wparam 0x46, lparam 0x20030001 input.c:734: Test failed: receive: lmenu_lcontrol_vkey: 2: got VK_CONTROL: 0 input.c:734: Test failed: receive: lmenu_lcontrol_vkey: 2: got VK_MENU: 0 input.c:734: Test failed: receive: lmenu_lcontrol_vkey: 2: got F: 0 input.c:734: Test failed: receive: lmenu_lcontrol_vkey: 2: got VK_LCONTROL: 0 input.c:734: Test failed: receive: lmenu_lcontrol_vkey: 2: got VK_LMENU: 0 input.c:733: Test failed: receive: lmenu_lcontrol_vkey: 3: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x46, lparam 0xffffffffe0040001 input.c:734: Test failed: receive: lmenu_lcontrol_vkey: 3: got VK_CONTROL: 0 input.c:734: Test failed: receive: lmenu_lcontrol_vkey: 3: got VK_MENU: 0 input.c:734: Test failed: receive: lmenu_lcontrol_vkey: 3: got VK_LCONTROL: 0 input.c:734: Test failed: receive: lmenu_lcontrol_vkey: 3: got VK_LMENU: 0 input.c:733: Test failed: receive: lmenu_lcontrol_vkey: 4: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_SYSKEYUP, wparam 0x11, lparam 0xffffffffe0050001 input.c:734: Test failed: receive: lmenu_lcontrol_vkey: 4: got VK_MENU: 0 input.c:734: Test failed: receive: lmenu_lcontrol_vkey: 4: got VK_LMENU: 0 input.c:733: Test failed: receive: lmenu_lcontrol_vkey: 5: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x12, lparam 0xffffffffc0060001 input.c:733: Test failed: receive: shift_vkey: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYDOWN, wparam 0x10, lparam 0x10001 input.c:734: Test failed: receive: shift_vkey: 0: got VK_SHIFT: 0 input.c:734: Test failed: receive: shift_vkey: 0: got VK_LSHIFT: 0 input.c:733: Test failed: receive: shift_vkey: 1: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYDOWN, wparam 0x46, lparam 0x20001 input.c:733: Test failed: receive: shift_vkey: 1: test->expect 2 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_CHAR, wparam 0x46, lparam 0x20001 input.c:734: Test failed: receive: shift_vkey: 1: got VK_SHIFT: 0 input.c:734: Test failed: receive: shift_vkey: 1: got F: 0 input.c:734: Test failed: receive: shift_vkey: 1: got VK_LSHIFT: 0 input.c:733: Test failed: receive: shift_vkey: 2: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x46, lparam 0xffffffffc0030001 input.c:734: Test failed: receive: shift_vkey: 2: got VK_SHIFT: 0 input.c:734: Test failed: receive: shift_vkey: 2: got VK_LSHIFT: 0 input.c:733: Test failed: receive: shift_vkey: 3: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x10, lparam 0xffffffffc0040001 input.c:733: Test failed: receive: rshift: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYDOWN, wparam 0x10, lparam 0x10001 input.c:734: Test failed: receive: rshift: 0: got VK_SHIFT: 0 input.c:734: Test succeeded inside todo block: receive: rshift: 0: got VK_LSHIFT: 0 input.c:733: Test failed: receive: rshift: 1: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x10, lparam 0xffffffffc0020001 input.c:733: Test failed: receive: lshift_ext: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYDOWN, wparam 0x10, lparam 0x10001 input.c:734: Test failed: receive: lshift_ext: 0: got VK_SHIFT: 0 input.c:734: Test failed: receive: lshift_ext: 0: got VK_RSHIFT: 0 input.c:733: Test failed: receive: lshift_ext: 1: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x10, lparam 0xffffffffc0020001 input.c:733: Test failed: receive: rshift_ext: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYDOWN, wparam 0x10, lparam 0x10001 input.c:734: Test failed: receive: rshift_ext: 0: got VK_SHIFT: 0 input.c:734: Test failed: receive: rshift_ext: 0: got VK_RSHIFT: 0 input.c:733: Test failed: receive: rshift_ext: 1: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x10, lparam 0xffffffffc0020001 input.c:733: Test failed: receive: shift: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYDOWN, wparam 0x10, lparam 0x10001 input.c:734: Test failed: receive: shift: 0: got VK_SHIFT: 0 input.c:734: Test failed: receive: shift: 0: got VK_LSHIFT: 0 input.c:733: Test failed: receive: shift: 1: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x10, lparam 0xffffffffc0020001 input.c:733: Test failed: receive: shift_ext: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYDOWN, wparam 0x10, lparam 0x10001 input.c:734: Test failed: receive: shift_ext: 0: got VK_SHIFT: 0 input.c:734: Test failed: receive: shift_ext: 0: got VK_RSHIFT: 0 input.c:733: Test failed: receive: shift_ext: 1: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x10, lparam 0xffffffffc0020001 input.c:733: Test failed: receive: rcontrol: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYDOWN, wparam 0x11, lparam 0x10001 input.c:734: Test failed: receive: rcontrol: 0: got VK_CONTROL: 0 input.c:734: Test failed: receive: rcontrol: 0: got VK_LCONTROL: 0 input.c:733: Test failed: receive: rcontrol: 1: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x11, lparam 0xffffffffc0020001 input.c:733: Test failed: receive: lcontrol_ext: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYDOWN, wparam 0x11, lparam 0x1010001 input.c:734: Test failed: receive: lcontrol_ext: 0: got VK_CONTROL: 0 input.c:734: Test failed: receive: lcontrol_ext: 0: got VK_RCONTROL: 0 input.c:733: Test failed: receive: lcontrol_ext: 1: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x11, lparam 0xffffffffc1020001 input.c:733: Test failed: receive: rcontrol_ext: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYDOWN, wparam 0x11, lparam 0x1010001 input.c:734: Test failed: receive: rcontrol_ext: 0: got VK_CONTROL: 0 input.c:734: Test failed: receive: rcontrol_ext: 0: got VK_RCONTROL: 0 input.c:733: Test failed: receive: rcontrol_ext: 1: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x11, lparam 0xffffffffc1020001 input.c:733: Test failed: receive: control: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYDOWN, wparam 0x11, lparam 0x10001 input.c:734: Test failed: receive: control: 0: got VK_CONTROL: 0 input.c:734: Test failed: receive: control: 0: got VK_LCONTROL: 0 input.c:733: Test failed: receive: control: 1: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x11, lparam 0xffffffffc0020001 input.c:733: Test failed: receive: control_ext: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYDOWN, wparam 0x11, lparam 0x1010001 input.c:734: Test failed: receive: control_ext: 0: got VK_CONTROL: 0 input.c:734: Test failed: receive: control_ext: 0: got VK_RCONTROL: 0 input.c:733: Test failed: receive: control_ext: 1: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x11, lparam 0xffffffffc1020001 input.c:733: Test failed: receive: rmenu: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_SYSKEYDOWN, wparam 0x12, lparam 0x20010001 input.c:734: Test failed: receive: rmenu: 0: got VK_MENU: 0 input.c:734: Test failed: receive: rmenu: 0: got VK_LMENU: 0 input.c:733: Test failed: receive: rmenu: 1: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_SYSKEYUP, wparam 0x12, lparam 0xffffffffc0020001 input.c:733: Test failed: receive: rmenu: 1: test->expect 2 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_SYSCOMMAND, wparam 0xf100, lparam 0 input.c:733: Test failed: receive: lmenu_ext: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_SYSKEYDOWN, wparam 0x12, lparam 0x21010001 input.c:734: Test failed: receive: lmenu_ext: 0: got VK_MENU: 0 input.c:734: Test failed: receive: lmenu_ext: 0: got VK_RMENU: 0 input.c:733: Test failed: receive: lmenu_ext: 1: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_SYSKEYUP, wparam 0x12, lparam 0xffffffffc1020001 input.c:733: Test failed: receive: lmenu_ext: 1: test->expect 2 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_SYSCOMMAND, wparam 0xf100, lparam 0 input.c:733: Test failed: receive: rmenu_ext: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_SYSKEYDOWN, wparam 0x12, lparam 0x21010001 input.c:734: Test failed: receive: rmenu_ext: 0: got VK_MENU: 0 input.c:734: Test failed: receive: rmenu_ext: 0: got VK_RMENU: 0 input.c:733: Test failed: receive: rmenu_ext: 1: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_SYSKEYUP, wparam 0x12, lparam 0xffffffffc1020001 input.c:733: Test failed: receive: rmenu_ext: 1: test->expect 2 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_SYSCOMMAND, wparam 0xf100, lparam 0 input.c:733: Test failed: receive: menu: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_SYSKEYDOWN, wparam 0x12, lparam 0x20010001 input.c:734: Test failed: receive: menu: 0: got VK_MENU: 0 input.c:734: Test failed: receive: menu: 0: got VK_LMENU: 0 input.c:733: Test failed: receive: menu: 1: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_SYSKEYUP, wparam 0x12, lparam 0xffffffffc0020001 input.c:733: Test failed: receive: menu: 1: test->expect 2 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_SYSCOMMAND, wparam 0xf100, lparam 0 input.c:733: Test failed: receive: menu_ext: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_SYSKEYDOWN, wparam 0x12, lparam 0x21010001 input.c:734: Test failed: receive: menu_ext: 0: got VK_MENU: 0 input.c:734: Test failed: receive: menu_ext: 0: got VK_RMENU: 0 input.c:733: Test failed: receive: menu_ext: 1: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_SYSKEYUP, wparam 0x12, lparam 0xffffffffc1020001 input.c:733: Test failed: receive: menu_ext: 1: test->expect 2 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_SYSCOMMAND, wparam 0xf100, lparam 0 input.c:733: Test failed: receive: lrshift_ext: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYDOWN, wparam 0x10, lparam 0x10001 input.c:734: Test failed: receive: lrshift_ext: 0: got VK_SHIFT: 0 input.c:734: Test failed: receive: lrshift_ext: 0: got VK_LSHIFT: 0 input.c:734: Test failed: receive: lrshift_ext: 1: got VK_SHIFT: 0 input.c:734: Test failed: receive: lrshift_ext: 1: got VK_LSHIFT: 0 input.c:734: Test failed: receive: lrshift_ext: 1: got VK_RSHIFT: 0 input.c:734: Test failed: receive: lrshift_ext: 2: got VK_SHIFT: 0 input.c:734: Test failed: receive: lrshift_ext: 2: got VK_LSHIFT: 0 input.c:733: Test failed: receive: lrshift_ext: 3: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x10, lparam 0xffffffffc0040001 input.c:733: Test failed: receive: rshift_scan: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYDOWN, wparam 0x10, lparam 0x360001 input.c:734: Test failed: receive: rshift_scan: 0: got VK_SHIFT: 0 input.c:734: Test failed: receive: rshift_scan: 0: got VK_LSHIFT: 0 input.c:733: Test failed: receive: rshift_scan: 1: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYDOWN, wparam 0x46, lparam 0x210001 input.c:733: Test failed: receive: rshift_scan: 1: test->expect 2 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_CHAR, wparam 0x46, lparam 0x210001 input.c:734: Test failed: receive: rshift_scan: 1: got VK_SHIFT: 0 input.c:734: Test failed: receive: rshift_scan: 1: got F: 0 input.c:734: Test failed: receive: rshift_scan: 1: got VK_LSHIFT: 0 input.c:733: Test failed: receive: rshift_scan: 2: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x46, lparam 0xffffffffc0210001 input.c:734: Test failed: receive: rshift_scan: 2: got VK_SHIFT: 0 input.c:734: Test failed: receive: rshift_scan: 2: got VK_LSHIFT: 0 input.c:733: Test failed: receive: rshift_scan: 3: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x10, lparam 0xffffffffc0360001 input.c:733: Test failed: receive: rctrl_scan: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYDOWN, wparam 0x11, lparam 0x1d0001 input.c:734: Test failed: receive: rctrl_scan: 0: got VK_CONTROL: 0 input.c:734: Test failed: receive: rctrl_scan: 0: got VK_LCONTROL: 0 input.c:733: Test failed: receive: rctrl_scan: 1: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x11, lparam 0xffffffffc01d0001 input.c:733: Test failed: receive: rctrl_scan: 2: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYDOWN, wparam 0x11, lparam 0x11d0001 input.c:734: Test failed: receive: rctrl_scan: 2: got VK_CONTROL: 0 input.c:734: Test failed: receive: rctrl_scan: 2: got VK_RCONTROL: 0 input.c:733: Test failed: receive: rctrl_scan: 3: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x11, lparam 0xffffffffc11d0001 input.c:733: Test failed: receive: unicode: 0: test->expect 2 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_CHAR, wparam 0x3c0, lparam 0x1 input.c:734: Test failed: receive: unicode: 0: got 0xe7: 0 input.c:733: Test failed: receive: lmenu_unicode: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_SYSKEYDOWN, wparam 0x12, lparam 0x20010001 input.c:734: Test failed: receive: lmenu_unicode: 0: got VK_MENU: 0 input.c:734: Test failed: receive: lmenu_unicode: 0: got VK_LMENU: 0 input.c:734: Test failed: receive: lmenu_unicode: 1: got VK_MENU: 0 input.c:734: Test failed: receive: lmenu_unicode: 1: got VK_LMENU: 0 input.c:734: Test failed: receive: lmenu_unicode: 1: got 0xe7: 0 input.c:734: Test failed: receive: lmenu_unicode: 2: got VK_MENU: 0 input.c:734: Test failed: receive: lmenu_unicode: 2: got VK_LMENU: 0 input.c:733: Test failed: receive: lmenu_unicode: 3: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x12, lparam 0xffffffffc0040001 input.c:733: Test failed: receive: unicode_vkey: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYDOWN, wparam 0x46, lparam 0xc00001 input.c:733: Test failed: receive: unicode_vkey: 0: test->expect 2 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_CHAR, wparam 0x66, lparam 0xc00001 input.c:734: Test failed: receive: unicode_vkey: 0: got F: 0 input.c:733: Test failed: receive: unicode_vkey: 1: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x46, lparam 0xffffffffc0c00001 input.c:733: Test failed: receive: unicode_vkey_ctrl: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYDOWN, wparam 0x11, lparam 0xc00001 input.c:734: Test failed: receive: unicode_vkey_ctrl: 0: got VK_CONTROL: 0 input.c:734: Test failed: receive: unicode_vkey_ctrl: 0: got VK_LCONTROL: 0 input.c:733: Test failed: receive: unicode_vkey_ctrl: 1: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x11, lparam 0xffffffffc0c00001 input.c:733: Test failed: receive: unicode_vkey_packet: 0: test->expect 2 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_CHAR, wparam 0xc0, lparam 0x1 input.c:734: Test failed: receive: unicode_vkey_packet: 0: got 0xe7: 0 input.c:733: Test failed: receive: numpad_scan: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYDOWN, wparam 0x25, lparam 0x4b0001 input.c:734: Test failed: receive: numpad_scan: 0: got 0x25: 0 input.c:733: Test failed: receive: numpad_scan: 1: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x25, lparam 0xffffffffc04b0001 input.c:733: Test failed: receive: numpad_scan_numlock: 0: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYDOWN, wparam 0x90, lparam 0x450001 input.c:734: Test failed: receive: numpad_scan_numlock: 0: got 0x90: 0 input.c:733: Test failed: receive: numpad_scan_numlock: 1: test->expect 1 (missing): MSG_TEST_WIN hwnd 0000000000000000, WM_KEYUP, wparam 0x90, lparam 0xffffffffc0450001 input.c:734: Test succeeded inside todo block: receive: numpad_scan_numlock: 2: got 0x25: 0 input.c:4305: Test succeeded inside todo block: button_down_hwnd_todo 1: got MSG_TEST_WIN hwnd 0000000001C100F2, msg WM_LBUTTONDOWN, wparam 0x1, lparam 0x320032
winmm: mci: Timeout
Report validation errors: user32:input prints too much data (62218 bytes)
v2: - don't introduce a flag to set_cursor_pos() and just let it perform update_desktop_cursor_pos().
We had some separate discussion with Rémi about this, and I did some more testing around, summarizing that here.
The idea of "on-demand" messages generation suggested above would imply generating this message in get_message handling (in the wineserver). Trying to see if that is about how it works on Windows, I made a test making PeekMessage() loop in test's MsgCheckProc in WM_WINDOWPOSCHANGED. And this yielded no change: PeekMessage wasn't returning anything and the test was still succeeding (i. e., receiving mouse messages as expected after WM_WINDOWSPOSCHANGED and winevent notifications). However, playing more with it, I discovered that adding a delay before that message loop (implicit with trace() or, better for reliability, Sleep(50)) resulted in WM_MOUSEMOVE being delivered in this message loop (without otherwise preceding WM_SETCURSOR however). I think these results basically exclude the possibility that Windows generates that message "on demand" during PeekMessage handling, hard to guess how the delay there would be possible (without anything else besides trace or Sleep() being called). I think more likely Windows hardware events handling process sees the window configuration change with a bit of delay and generates the event.
The closest match with Wine would probably do that in something like check_for_driver_events(), having some thread flag to know that window configuration has been updated. But we discussed that probably this is more ugly than the present solution without obvious benefits.
The idea of "on-demand" messages generation suggested above would imply generating this message in get_message handling (in the wineserver). Trying to see if that is about how it works on Windows, I made a test making PeekMessage() loop in test's MsgCheckProc in WM_WINDOWPOSCHANGED. And this yielded no change: PeekMessage wasn't returning anything and the test was still succeeding (i. e., receiving mouse messages as expected after WM_WINDOWSPOSCHANGED and winevent notifications). However, playing more with it, I discovered that adding a delay before that message loop (implicit with trace() or, better for reliability, Sleep(50)) resulted in WM_MOUSEMOVE being delivered in this message loop (without otherwise preceding WM_SETCURSOR however). I think these results basically exclude the possibility that Windows generates that message "on demand" during PeekMessage handling, hard to guess how the delay there would be possible (without anything else besides trace or Sleep() being called)
. I think more likely Windows hardware events handling process sees the window configuration change with a bit of delay and generates the event.
It seems to me that the behavior would be the same if it simply invalidated the previous cursor pos (with the same delay), and then generated the event on-demand.
We do it a bit differently in Wine, but I don't see why a hardware mouse move couldn't be queued at the time the window is moved, without requiring a separate server call.
We do it a bit differently in Wine, but I don't see why a hardware mouse move couldn't be queued at the time the window is moved, without requiring a separate server call.
Get the current mouse position and send_hardware_message()? I am not sure how much of the real problem that is, but probably the position from get_cursor_pos() may be outdated before send_hardware_message(). That issue was actually present in v1 in my patch. Or am I maybe misunderstanding the suggestion?
On Wed Oct 23 19:05:18 2024 +0000, Paul Gofman wrote:
We do it a bit differently in Wine, but I don't see why a hardware
mouse move couldn't be queued at the time the window is moved, without requiring a separate server call. Get the current mouse position and send_hardware_message()? I am not sure how much of the real problem that is, but probably the position from get_cursor_pos() may be outdated before send_hardware_message(). That issue was actually present in v1 in my patch. Or am I maybe misunderstanding the suggestion?
Or do you mean queuing at server's (set_window_pos)? It will deliver message out of order, before WM_WINDOWPOSCHANGED?
On Wed Oct 23 19:22:27 2024 +0000, Paul Gofman wrote:
Or do you mean queuing at server's (set_window_pos)? It will deliver message out of order, before WM_WINDOWPOSCHANGED?
Yes, queuing at set_window_pos. It won't get delivered unless the app fetches messages inside WM_WINDOWPOSCHANGED, which as you noted does deliver it.
On Wed Oct 23 19:28:23 2024 +0000, Alexandre Julliard wrote:
Yes, queuing at set_window_pos. It won't get delivered unless the app fetches messages inside WM_WINDOWPOSCHANGED, which as you noted does deliver it.
Oh yeah, indeed, sorry I missed that earlier. I will redo it this way.