Commit 9bb87cc7 authored by Christopher Thielen's avatar Christopher Thielen Committed by Alexandre Julliard

user32: A window may be notified with WM_CAPTURECHANGED about itself if…

user32: A window may be notified with WM_CAPTURECHANGED about itself if SetCapture() is called twice. Signed-off-by: 's avatarChristopher Thielen <cthielen@gmail.com> Signed-off-by: 's avatarAlexandre Julliard <julliard@winehq.org>
parent 85faafc0
...@@ -108,7 +108,7 @@ BOOL set_capture_window( HWND hwnd, UINT gui_flags, HWND *prev_ret ) ...@@ -108,7 +108,7 @@ BOOL set_capture_window( HWND hwnd, UINT gui_flags, HWND *prev_ret )
{ {
USER_Driver->pSetCapture( hwnd, gui_flags ); USER_Driver->pSetCapture( hwnd, gui_flags );
if (previous && previous != hwnd) if (previous)
SendMessageW( previous, WM_CAPTURECHANGED, 0, (LPARAM)hwnd ); SendMessageW( previous, WM_CAPTURECHANGED, 0, (LPARAM)hwnd );
if (prev_ret) *prev_ret = previous; if (prev_ret) *prev_ret = previous;
......
...@@ -15125,6 +15125,33 @@ else ...@@ -15125,6 +15125,33 @@ else
flush_sequence(); flush_sequence();
} }
static const struct message DoubleSetCaptureSeq[] =
{
{ WM_CAPTURECHANGED, sent },
{ 0 }
};
static void test_DoubleSetCapture(void)
{
HWND hwnd;
hwnd = CreateWindowExA(0, "TestWindowClass", "Test DoubleSetCapture",
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
100, 100, 200, 200, 0, 0, 0, NULL);
ok (hwnd != 0, "Failed to create overlapped window\n");
ShowWindow( hwnd, SW_SHOW );
UpdateWindow( hwnd );
flush_events();
flush_sequence();
SetCapture( hwnd );
SetCapture( hwnd );
ok_sequence(DoubleSetCaptureSeq, "SetCapture( hwnd ) twice", FALSE);
DestroyWindow(hwnd);
}
static void init_funcs(void) static void init_funcs(void)
{ {
HMODULE hKernel32 = GetModuleHandleA("kernel32.dll"); HMODULE hKernel32 = GetModuleHandleA("kernel32.dll");
...@@ -15265,6 +15292,7 @@ START_TEST(msg) ...@@ -15265,6 +15292,7 @@ START_TEST(msg)
test_layered_window(); test_layered_window();
test_TrackPopupMenu(); test_TrackPopupMenu();
test_TrackPopupMenuEmpty(); test_TrackPopupMenuEmpty();
test_DoubleSetCapture();
/* keep it the last test, under Windows it tends to break the tests /* keep it the last test, under Windows it tends to break the tests
* which rely on active/foreground windows being correct. * which rely on active/foreground windows being correct.
*/ */
......
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