Christopher Thielen : user32: A window may be notified with WM_CAPTURECHANGED about itself if SetCapture () is called twice.
Alexandre Julliard
julliard at wine.codeweavers.com
Tue Apr 12 06:45:25 CDT 2016
Module: wine
Branch: stable
Commit: a73afbcb10b32fcdb9733b552c6cc1f334ba96ee
URL: http://source.winehq.org/git/wine.git/?a=commit;h=a73afbcb10b32fcdb9733b552c6cc1f334ba96ee
Author: Christopher Thielen <cthielen at gmail.com>
Date: Sun Jan 31 20:32:51 2016 -0800
user32: A window may be notified with WM_CAPTURECHANGED about itself if SetCapture() is called twice.
Signed-off-by: Christopher Thielen <cthielen at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
(cherry picked from commit 9bb87cc71c95f45cd6111b28b687bd753380a4c7)
Signed-off-by: Michael Stefaniuc <mstefani at winehq.org>
---
dlls/user32/input.c | 2 +-
dlls/user32/tests/msg.c | 28 ++++++++++++++++++++++++++++
2 files changed, 29 insertions(+), 1 deletion(-)
diff --git a/dlls/user32/input.c b/dlls/user32/input.c
index 40e35a9..63fae67 100644
--- a/dlls/user32/input.c
+++ b/dlls/user32/input.c
@@ -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;
diff --git a/dlls/user32/tests/msg.c b/dlls/user32/tests/msg.c
index b90f8d0..969b1af 100644
--- a/dlls/user32/tests/msg.c
+++ b/dlls/user32/tests/msg.c
@@ -14906,6 +14906,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");
@@ -15045,6 +15072,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.
*/
More information about the wine-cvs
mailing list