2010/1/21 Lauri Kenttä lauri.kentta@gmail.com:
SetCursorPos should not call mouse low-level hooks.
dlls/user32/tests/input.c | 16 ++++++++++++++++ 1 files changed, 16 insertions(+), 0 deletions(-)
diff --git a/dlls/user32/tests/input.c b/dlls/user32/tests/input.c index 7713ff6..a5dba06 100644 --- a/dlls/user32/tests/input.c +++ b/dlls/user32/tests/input.c @@ -1198,6 +1198,7 @@ static void test_keynames(void)
static POINT pt_old, pt_new; static BOOL clipped; +static int hook_proc2_call_times; #define STEP 3
static LRESULT CALLBACK hook_proc1( int code, WPARAM wparam, LPARAM lparam ) @@ -1231,6 +1232,8 @@ static LRESULT CALLBACK hook_proc2( int code, WPARAM wparam, LPARAM lparam ) MSLLHOOKSTRUCT *hook = (MSLLHOOKSTRUCT *)lparam; POINT pt;
- ++hook_proc2_call_times;
if (code == HC_ACTION) { ok(hook->pt.x == pt_new.x && hook->pt.y == pt_new.y, @@ -1281,6 +1284,7 @@ static void test_mouse_ll_hook(void) HHOOK hook1, hook2; POINT pt_org, pt; RECT rc;
- int hook_proc2_call_times_old;
GetCursorPos(&pt_org); hwnd = CreateWindow("static", "Title", WS_OVERLAPPEDWINDOW | WS_VISIBLE, @@ -1347,6 +1351,18 @@ static void test_mouse_ll_hook(void) GetCursorPos(&pt); ok(pt.x == pt_new.x && pt.y == pt_new.y, "Position changed: (%d,%d)\n", pt.x, pt.y);
- /* Check that SetCursorPos doesn't call hooks.
- * Check twice: first moving to old coordinates, then to new. */
- SetCursorPos(10, 10);
- hook_proc2_call_times_old = hook_proc2_call_times;
- SetCursorPos(10, 10);
- ok(hook_proc2_call_times_old == hook_proc2_call_times, "Hooks called\n");
- hook_proc2_call_times_old = hook_proc2_call_times;
- SetCursorPos(20, 20);
- ok(hook_proc2_call_times_old == hook_proc2_call_times, "Hooks called\n");
UnhookWindowsHookEx(hook2); done: DestroyWindow(hwnd); -- 1.6.6
Hi Lauri,
What about resetting hook_proc2_call_times to 0 before calling SetCursorPos and just checking if it has changed ? Also other static variables used in hook procs aren't prefixed, this is more trivial but everyone is encouraged to follow current code style of the file.
Hello Nicolas,
Thanks for your suggestions, I sent a new patch.