Commit 16ba0255 authored by Dmitry Timoshkov's avatar Dmitry Timoshkov Committed by Alexandre Julliard

- Call SetCursorPos for an injected mouse message only if we really

need to move mouse pointer. - Add a test case for mouse click handling.
parent 9772d022
...@@ -48,6 +48,7 @@ ...@@ -48,6 +48,7 @@
static HWND (WINAPI *pGetAncestor)(HWND,UINT); static HWND (WINAPI *pGetAncestor)(HWND,UINT);
static BOOL (WINAPI *pGetWindowInfo)(HWND,WINDOWINFO*); static BOOL (WINAPI *pGetWindowInfo)(HWND,WINDOWINFO*);
static BOOL test_lbuttondown_flag;
static HWND hwndMessage; static HWND hwndMessage;
static HWND hwndMain, hwndMain2; static HWND hwndMain, hwndMain2;
static HHOOK hhook; static HHOOK hhook;
...@@ -521,6 +522,10 @@ static LRESULT WINAPI main_window_procA(HWND hwnd, UINT msg, WPARAM wparam, LPAR ...@@ -521,6 +522,10 @@ static LRESULT WINAPI main_window_procA(HWND hwnd, UINT msg, WPARAM wparam, LPAR
ok(!got_getminmaxinfo, "main: WM_GETMINMAXINFO should NOT have been received before WM_NCCREATE\n"); ok(!got_getminmaxinfo, "main: WM_GETMINMAXINFO should NOT have been received before WM_NCCREATE\n");
break; break;
} }
case WM_COMMAND:
if (test_lbuttondown_flag)
ShowWindow((HWND)wparam, SW_SHOW);
break;
} }
return DefWindowProcA(hwnd, msg, wparam, lparam); return DefWindowProcA(hwnd, msg, wparam, lparam);
...@@ -569,7 +574,7 @@ static BOOL RegisterWindowClasses(void) ...@@ -569,7 +574,7 @@ static BOOL RegisterWindowClasses(void)
{ {
WNDCLASSA cls; WNDCLASSA cls;
cls.style = 0; cls.style = CS_DBLCLKS;
cls.lpfnWndProc = main_window_procA; cls.lpfnWndProc = main_window_procA;
cls.cbClsExtra = 0; cls.cbClsExtra = 0;
cls.cbWndExtra = 0; cls.cbWndExtra = 0;
...@@ -2241,6 +2246,53 @@ static void test_mouse_input(HWND hwnd) ...@@ -2241,6 +2246,53 @@ static void test_mouse_input(HWND hwnd)
ret = PeekMessageA(&msg, 0, 0, 0, PM_REMOVE); ret = PeekMessageA(&msg, 0, 0, 0, PM_REMOVE);
ok( !ret, "message %04x available\n", msg.message); ok( !ret, "message %04x available\n", msg.message);
/* test mouse clicks */
ShowWindow(hwnd, SW_SHOW);
ShowWindow(popup, SW_SHOW);
while (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE)) DispatchMessageA(&msg);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n");
ok(msg.hwnd == popup && msg.message == WM_LBUTTONDOWN, "hwnd %p message %04x\n", msg.hwnd, msg.message);
ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n");
ok(msg.hwnd == popup && msg.message == WM_LBUTTONUP, "hwnd %p message %04x\n", msg.hwnd, msg.message);
ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n");
ok(msg.hwnd == popup && msg.message == WM_LBUTTONDBLCLK, "hwnd %p message %04x\n", msg.hwnd, msg.message);
ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n");
ok(msg.hwnd == popup && msg.message == WM_LBUTTONUP, "hwnd %p message %04x\n", msg.hwnd, msg.message);
ret = PeekMessageA(&msg, 0, 0, 0, PM_REMOVE);
ok(!ret, "message %04x available\n", msg.message);
ShowWindow(popup, SW_HIDE);
while (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE)) DispatchMessageA(&msg);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n");
ok(msg.hwnd == hwnd && msg.message == WM_LBUTTONDOWN, "hwnd %p message %04x\n", msg.hwnd, msg.message);
ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n");
ok(msg.hwnd == hwnd && msg.message == WM_LBUTTONUP, "hwnd %p message %04x\n", msg.hwnd, msg.message);
test_lbuttondown_flag = TRUE;
SendMessageA(hwnd, WM_COMMAND, (WPARAM)popup, 0);
test_lbuttondown_flag = FALSE;
ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n");
ok(msg.hwnd == popup && msg.message == WM_LBUTTONDOWN, "hwnd %p message %04x\n", msg.hwnd, msg.message);
ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n");
ok(msg.hwnd == popup && msg.message == WM_LBUTTONUP, "hwnd %p message %04x\n", msg.hwnd, msg.message);
ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n");
DestroyWindow(popup); DestroyWindow(popup);
} }
......
...@@ -285,6 +285,8 @@ static void queue_mouse_event( const MOUSEINPUT *mi, UINT flags ) ...@@ -285,6 +285,8 @@ static void queue_mouse_event( const MOUSEINPUT *mi, UINT flags )
if (mi->dwFlags & MOUSEEVENTF_MOVE) if (mi->dwFlags & MOUSEEVENTF_MOVE)
{ {
queue_raw_mouse_message( WM_MOUSEMOVE, flags, PosX, PosY, mi ); queue_raw_mouse_message( WM_MOUSEMOVE, flags, PosX, PosY, mi );
if (flags & LLMHF_INJECTED) /* we have to actually move the cursor */
SetCursorPos( PosX, PosY );
} }
if (mi->dwFlags & MOUSEEVENTF_LEFTDOWN) if (mi->dwFlags & MOUSEEVENTF_LEFTDOWN)
{ {
...@@ -327,8 +329,6 @@ static void queue_mouse_event( const MOUSEINPUT *mi, UINT flags ) ...@@ -327,8 +329,6 @@ static void queue_mouse_event( const MOUSEINPUT *mi, UINT flags )
{ {
queue_raw_mouse_message( WM_MOUSEWHEEL, flags, PosX, PosY, mi ); queue_raw_mouse_message( WM_MOUSEWHEEL, flags, PosX, PosY, mi );
} }
if (flags & LLMHF_INJECTED) /* we have to actually move the cursor */
SetCursorPos( PosX, PosY );
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment