Sebastian Lackner : user32: Do not block sending/ posting WM_NOTIFY messages.
Alexandre Julliard
julliard at winehq.org
Thu Jun 16 03:45:41 CDT 2016
Module: wine
Branch: stable
Commit: 1354e84c6d0984f2c26b86251befcb38012c5468
URL: http://source.winehq.org/git/wine.git/?a=commit;h=1354e84c6d0984f2c26b86251befcb38012c5468
Author: Sebastian Lackner <sebastian at fds-team.de>
Date: Tue Apr 19 18:28:59 2016 +0200
user32: Do not block sending/posting WM_NOTIFY messages.
Signed-off-by: Sebastian Lackner <sebastian at fds-team.de>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
(cherry picked from commit b4ac51effaa19b3ddf64f89b23894254608b6294)
Signed-off-by: Michael Stefaniuc <mstefani at winehq.org>
---
dlls/user32/message.c | 3 +--
dlls/user32/tests/msg.c | 65 +++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 66 insertions(+), 2 deletions(-)
diff --git a/dlls/user32/message.c b/dlls/user32/message.c
index 3e419ee..c538161 100644
--- a/dlls/user32/message.c
+++ b/dlls/user32/message.c
@@ -310,8 +310,7 @@ static const unsigned int message_pointer_flags[] =
SET(WM_GETMINMAXINFO) | SET(WM_DRAWITEM) | SET(WM_MEASUREITEM) | SET(WM_DELETEITEM) |
SET(WM_COMPAREITEM),
/* 0x40 - 0x5f */
- SET(WM_WINDOWPOSCHANGING) | SET(WM_WINDOWPOSCHANGED) | SET(WM_COPYDATA) |
- SET(WM_NOTIFY) | SET(WM_HELP),
+ SET(WM_WINDOWPOSCHANGING) | SET(WM_WINDOWPOSCHANGED) | SET(WM_COPYDATA) | SET(WM_HELP),
/* 0x60 - 0x7f */
SET(WM_STYLECHANGING) | SET(WM_STYLECHANGED),
/* 0x80 - 0x9f */
diff --git a/dlls/user32/tests/msg.c b/dlls/user32/tests/msg.c
index c214ecd..c51cb68 100644
--- a/dlls/user32/tests/msg.c
+++ b/dlls/user32/tests/msg.c
@@ -10911,6 +10911,70 @@ static void test_quit_message(void)
ok_sequence(WmStopQuitSeq, "WmStopQuitSeq", FALSE);
}
+static const struct message WmNotifySeq[] = {
+ { WM_NOTIFY, sent|wparam|lparam, 0x1234, 0xdeadbeef },
+ { 0 }
+};
+
+static void test_notify_message(void)
+{
+ HWND hwnd;
+ BOOL ret;
+ MSG msg;
+
+ hwnd = CreateWindowExA(0, "TestWindowClass", NULL, WS_OVERLAPPEDWINDOW,
+ CW_USEDEFAULT, CW_USEDEFAULT, 300, 300, 0, NULL, NULL, 0);
+ ok(hwnd != 0, "Failed to create window\n");
+ flush_events();
+ flush_sequence();
+
+ ret = SendNotifyMessageA(hwnd, WM_NOTIFY, 0x1234, 0xdeadbeef);
+ ok(ret == TRUE, "SendNotifyMessageA failed with error %u\n", GetLastError());
+ ok_sequence(WmNotifySeq, "WmNotifySeq", FALSE);
+
+ ret = SendNotifyMessageW(hwnd, WM_NOTIFY, 0x1234, 0xdeadbeef);
+ ok(ret == TRUE, "SendNotifyMessageW failed with error %u\n", GetLastError());
+ ok_sequence(WmNotifySeq, "WmNotifySeq", FALSE);
+
+ ret = SendMessageCallbackA(hwnd, WM_NOTIFY, 0x1234, 0xdeadbeef, NULL, 0);
+ ok(ret == TRUE, "SendMessageCallbackA failed with error %u\n", GetLastError());
+ ok_sequence(WmNotifySeq, "WmNotifySeq", FALSE);
+
+ ret = SendMessageCallbackW(hwnd, WM_NOTIFY, 0x1234, 0xdeadbeef, NULL, 0);
+ ok(ret == TRUE, "SendMessageCallbackW failed with error %u\n", GetLastError());
+ ok_sequence(WmNotifySeq, "WmNotifySeq", FALSE);
+
+ ret = PostMessageA(hwnd, WM_NOTIFY, 0x1234, 0xdeadbeef);
+ ok(ret == TRUE, "PostMessageA failed with error %u\n", GetLastError());
+ flush_events();
+ ok_sequence(WmNotifySeq, "WmNotifySeq", FALSE);
+
+ ret = PostMessageW(hwnd, WM_NOTIFY, 0x1234, 0xdeadbeef);
+ ok(ret == TRUE, "PostMessageW failed with error %u\n", GetLastError());
+ flush_events();
+ ok_sequence(WmNotifySeq, "WmNotifySeq", FALSE);
+
+ ret = PostThreadMessageA(GetCurrentThreadId(), WM_NOTIFY, 0x1234, 0xdeadbeef);
+ ok(ret == TRUE, "PostThreadMessageA failed with error %u\n", GetLastError());
+ while (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE))
+ {
+ msg.hwnd = hwnd;
+ DispatchMessageA(&msg);
+ }
+ ok_sequence(WmNotifySeq, "WmNotifySeq", FALSE);
+
+ ret = PostThreadMessageW(GetCurrentThreadId(), WM_NOTIFY, 0x1234, 0xdeadbeef);
+ ok(ret == TRUE, "PostThreadMessageW failed with error %u\n", GetLastError());
+ while (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE))
+ {
+ msg.hwnd = hwnd;
+ DispatchMessageA(&msg);
+ }
+ ok_sequence(WmNotifySeq, "WmNotifySeq", FALSE);
+
+ DestroyWindow(hwnd);
+}
+
static const struct message WmMouseHoverSeq[] = {
{ WM_MOUSEACTIVATE, sent|optional }, /* we can get those when moving the mouse in focus-follow-mouse mode under X11 */
{ WM_MOUSEACTIVATE, sent|optional },
@@ -15118,6 +15182,7 @@ START_TEST(msg)
test_SendMessageTimeout();
test_edit_messages();
test_quit_message();
+ test_notify_message();
test_SetActiveWindow();
if (!pTrackMouseEvent)
More information about the wine-cvs
mailing list