user32: A window may be notified with WM_CAPTURECHANGED about itself if SetCapture() is called twice.
Signed-off-by: Christopher Thielen <cthielen@gmail.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
85faafc0e3
commit
9bb87cc71c
|
@ -108,7 +108,7 @@ BOOL set_capture_window( HWND hwnd, UINT gui_flags, HWND *prev_ret )
|
|||
{
|
||||
USER_Driver->pSetCapture( hwnd, gui_flags );
|
||||
|
||||
if (previous && previous != hwnd)
|
||||
if (previous)
|
||||
SendMessageW( previous, WM_CAPTURECHANGED, 0, (LPARAM)hwnd );
|
||||
|
||||
if (prev_ret) *prev_ret = previous;
|
||||
|
|
|
@ -15125,6 +15125,33 @@ else
|
|||
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)
|
||||
{
|
||||
HMODULE hKernel32 = GetModuleHandleA("kernel32.dll");
|
||||
|
@ -15265,6 +15292,7 @@ START_TEST(msg)
|
|||
test_layered_window();
|
||||
test_TrackPopupMenu();
|
||||
test_TrackPopupMenuEmpty();
|
||||
test_DoubleSetCapture();
|
||||
/* keep it the last test, under Windows it tends to break the tests
|
||||
* which rely on active/foreground windows being correct.
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue