mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2024-11-21 16:46:54 -08:00
Added patch with additional tests for server-PeekMessage.
This commit is contained in:
parent
20286952db
commit
de8e8a4079
1
debian/changelog
vendored
1
debian/changelog
vendored
@ -18,6 +18,7 @@ wine-staging (1.7.39) UNRELEASED; urgency=low
|
||||
* Added patch to fix wrong return values of RtlFindActivationContextSectionString for NULL data (by Mark Jansen).
|
||||
* Added patch to implement _ismbckata and _mbctohira, moreover fix wrong return value of _ismbckata.
|
||||
* Added patch to improve stub for ID3DXEffectImpl_CloneEffect.
|
||||
* Added patch with additional tests for server-PeekMessage.
|
||||
* Removed patch to avoid hardcoded values for sizeof(GUID) (accepted upstream).
|
||||
* Removed patches for SLGetWindowsInformationDWORD (accepted upstream).
|
||||
* Removed patches for _ismbckata and _mbctohira (fixed upstream).
|
||||
|
@ -3707,11 +3707,13 @@ fi
|
||||
# | * [#28884] GetMessage should remove already seen messages with higher priority
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * server/queue.c
|
||||
# | * dlls/user32/tests/msg.c, server/queue.c
|
||||
# |
|
||||
if test "$enable_server_PeekMessage" -eq 1; then
|
||||
patch_apply server-PeekMessage/0001-server-Fix-handling-of-GetMessage-after-previous-Pee.patch
|
||||
patch_apply server-PeekMessage/0001-user32-tests-Add-tests-for-removing-already-seen-mes.patch
|
||||
patch_apply server-PeekMessage/0002-server-Fix-handling-of-GetMessage-after-previous-Pee.patch
|
||||
(
|
||||
echo '+ { "Sebastian Lackner", "user32/tests: Add tests for removing already seen messages from the queue.", 1 },';
|
||||
echo '+ { "Sebastian Lackner", "server: Fix handling of GetMessage after previous PeekMessage call.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
@ -0,0 +1,150 @@
|
||||
From ad090f56d989fe29223aff05cc4fb26066ba4a49 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Tue, 17 Mar 2015 04:26:33 +0100
|
||||
Subject: user32/tests: Add tests for removing already seen messages from the
|
||||
queue.
|
||||
|
||||
---
|
||||
dlls/user32/tests/msg.c | 119 ++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 119 insertions(+)
|
||||
|
||||
diff --git a/dlls/user32/tests/msg.c b/dlls/user32/tests/msg.c
|
||||
index f1236cf..c297e40 100644
|
||||
--- a/dlls/user32/tests/msg.c
|
||||
+++ b/dlls/user32/tests/msg.c
|
||||
@@ -10440,6 +10440,124 @@ done:
|
||||
flush_events();
|
||||
}
|
||||
|
||||
+static void test_PeekMessage3(void)
|
||||
+{
|
||||
+ HWND hwnd;
|
||||
+ BOOL ret;
|
||||
+ MSG msg;
|
||||
+
|
||||
+ hwnd = CreateWindowA("TestWindowClass", "PeekMessage3", WS_OVERLAPPEDWINDOW,
|
||||
+ 10, 10, 800, 800, NULL, NULL, NULL, NULL);
|
||||
+ ok(hwnd != NULL, "expected hwnd != NULL\n");
|
||||
+ flush_events();
|
||||
+
|
||||
+ /* GetMessage() and PeekMessage(..., PM_REMOVE) should prefer messages which
|
||||
+ * were already seen. */
|
||||
+
|
||||
+ SetTimer(hwnd, 1, 0, NULL);
|
||||
+ while (!PeekMessageA(&msg, NULL, 0, 0, PM_NOREMOVE));
|
||||
+ ok(msg.message == WM_TIMER, "msg.message = %u instead of WM_TIMER\n", msg.message);
|
||||
+ PostMessageA(hwnd, WM_USER, 0, 0);
|
||||
+ ret = PeekMessageA(&msg, NULL, 0, 0, PM_NOREMOVE);
|
||||
+ todo_wine
|
||||
+ ok(ret && msg.message == WM_TIMER, "msg.message = %u instead of WM_TIMER\n", msg.message);
|
||||
+ ret = GetMessageA(&msg, NULL, 0, 0);
|
||||
+ todo_wine
|
||||
+ ok(ret && msg.message == WM_TIMER, "msg.message = %u instead of WM_TIMER\n", msg.message);
|
||||
+ ret = GetMessageA(&msg, NULL, 0, 0);
|
||||
+ todo_wine
|
||||
+ ok(ret &&msg.message == WM_USER, "msg.message = %u instead of WM_USER\n", msg.message);
|
||||
+ ret = PeekMessageA(&msg, NULL, 0, 0, 0);
|
||||
+ ok(!ret, "expected PeekMessage to return FALSE, got %u\n", ret);
|
||||
+
|
||||
+ SetTimer(hwnd, 1, 0, NULL);
|
||||
+ while (!PeekMessageA(&msg, NULL, 0, 0, PM_NOREMOVE));
|
||||
+ ok(msg.message == WM_TIMER, "msg.message = %u instead of WM_TIMER\n", msg.message);
|
||||
+ PostMessageA(hwnd, WM_USER, 0, 0);
|
||||
+ ret = PeekMessageA(&msg, NULL, 0, 0, PM_REMOVE);
|
||||
+ todo_wine
|
||||
+ ok(ret && msg.message == WM_TIMER, "msg.message = %u instead of WM_TIMER\n", msg.message);
|
||||
+ ret = PeekMessageA(&msg, NULL, 0, 0, PM_REMOVE);
|
||||
+ todo_wine
|
||||
+ ok(ret && msg.message == WM_USER, "msg.message = %u instead of WM_USER\n", msg.message);
|
||||
+ ret = PeekMessageA(&msg, NULL, 0, 0, 0);
|
||||
+ ok(!ret, "expected PeekMessage to return FALSE, got %u\n", ret);
|
||||
+
|
||||
+ /* It doesn't matter if a message range is specified or not. */
|
||||
+
|
||||
+ SetTimer(hwnd, 1, 0, NULL);
|
||||
+ while (!PeekMessageA(&msg, NULL, WM_TIMER, WM_TIMER, PM_NOREMOVE));
|
||||
+ ok(msg.message == WM_TIMER, "msg.message = %u instead of WM_TIMER\n", msg.message);
|
||||
+ PostMessageA(hwnd, WM_USER, 0, 0);
|
||||
+ ret = GetMessageA(&msg, NULL, 0, 0);
|
||||
+ todo_wine
|
||||
+ ok(ret && msg.message == WM_TIMER, "msg.message = %u instead of WM_TIMER\n", msg.message);
|
||||
+ ret = GetMessageA(&msg, NULL, 0, 0);
|
||||
+ todo_wine
|
||||
+ ok(ret &&msg.message == WM_USER, "msg.message = %u instead of WM_USER\n", msg.message);
|
||||
+ ret = PeekMessageA(&msg, NULL, 0, 0, 0);
|
||||
+ ok(!ret, "expected PeekMessage to return FALSE, got %u\n", ret);
|
||||
+
|
||||
+ /* But not if the post messages were added before the PeekMessage() call. */
|
||||
+
|
||||
+ PostMessageA(hwnd, WM_USER, 0, 0);
|
||||
+ SetTimer(hwnd, 1, 0, NULL);
|
||||
+ while (!PeekMessageA(&msg, NULL, WM_TIMER, WM_TIMER, PM_NOREMOVE));
|
||||
+ ok(msg.message == WM_TIMER, "msg.message = %u instead of WM_TIMER\n", msg.message);
|
||||
+ ret = GetMessageA(&msg, NULL, 0, 0);
|
||||
+ ok(ret && msg.message == WM_USER, "msg.message = %u instead of WM_USER\n", msg.message);
|
||||
+ ret = GetMessageA(&msg, NULL, 0, 0);
|
||||
+ ok(ret &&msg.message == WM_TIMER, "msg.message = %u instead of WM_TIMER\n", msg.message);
|
||||
+ ret = PeekMessageA(&msg, NULL, 0, 0, 0);
|
||||
+ ok(!ret, "expected PeekMessage to return FALSE, got %u\n", ret);
|
||||
+
|
||||
+ /* More complicated test with multiple messages. */
|
||||
+
|
||||
+ PostMessageA(hwnd, WM_USER, 0, 0);
|
||||
+ SetTimer(hwnd, 1, 0, NULL);
|
||||
+ while (!PeekMessageA(&msg, NULL, WM_TIMER, WM_TIMER, PM_NOREMOVE));
|
||||
+ ok(msg.message == WM_TIMER, "msg.message = %u instead of WM_TIMER\n", msg.message);
|
||||
+ PostMessageA(hwnd, WM_USER + 1, 0, 0);
|
||||
+ ret = GetMessageA(&msg, NULL, 0, 0);
|
||||
+ ok(ret && msg.message == WM_USER, "msg.message = %u instead of WM_USER\n", msg.message);
|
||||
+ ret = GetMessageA(&msg, NULL, 0, 0);
|
||||
+ todo_wine
|
||||
+ ok(ret &&msg.message == WM_TIMER, "msg.message = %u instead of WM_TIMER\n", msg.message);
|
||||
+ ret = GetMessageA(&msg, NULL, 0, 0);
|
||||
+ todo_wine
|
||||
+ ok(ret && msg.message == WM_USER + 1, "msg.message = %u instead of WM_USER + 1\n", msg.message);
|
||||
+ ret = PeekMessageA(&msg, NULL, 0, 0, 0);
|
||||
+ ok(!ret, "expected PeekMessage to return FALSE, got %u\n", ret);
|
||||
+
|
||||
+ /* Also works for posted messages, but the situation is a bit different,
|
||||
+ * because both messages are in the same queue. */
|
||||
+
|
||||
+ PostMessageA(hwnd, WM_TIMER, 0, 0);
|
||||
+ while (!PeekMessageA(&msg, NULL, WM_TIMER, WM_TIMER, PM_NOREMOVE));
|
||||
+ ok(msg.message == WM_TIMER, "msg.message = %u instead of WM_TIMER\n", msg.message);
|
||||
+ PostMessageA(hwnd, WM_USER, 0, 0);
|
||||
+ ret = GetMessageA(&msg, NULL, 0, 0);
|
||||
+ ok(ret && msg.message == WM_TIMER, "msg.message = %u instead of WM_TIMER\n", msg.message);
|
||||
+ ret = GetMessageA(&msg, NULL, 0, 0);
|
||||
+ ok(ret &&msg.message == WM_USER, "msg.message = %u instead of WM_USER\n", msg.message);
|
||||
+ ret = PeekMessageA(&msg, NULL, 0, 0, 0);
|
||||
+ ok(!ret, "expected PeekMessage to return FALSE, got %u\n", ret);
|
||||
+
|
||||
+ PostMessageA(hwnd, WM_USER, 0, 0);
|
||||
+ PostMessageA(hwnd, WM_TIMER, 0, 0);
|
||||
+ while (!PeekMessageA(&msg, NULL, WM_TIMER, WM_TIMER, PM_NOREMOVE));
|
||||
+ ok(msg.message == WM_TIMER, "msg.message = %u instead of WM_TIMER\n", msg.message);
|
||||
+ ret = GetMessageA(&msg, NULL, 0, 0);
|
||||
+ ok(ret && msg.message == WM_USER, "msg.message = %u instead of WM_USER\n", msg.message);
|
||||
+ ret = GetMessageA(&msg, NULL, 0, 0);
|
||||
+ ok(ret &&msg.message == WM_TIMER, "msg.message = %u instead of WM_TIMER\n", msg.message);
|
||||
+ ret = PeekMessageA(&msg, NULL, 0, 0, 0);
|
||||
+ ok(!ret, "expected PeekMessage to return FALSE, got %u\n", ret);
|
||||
+
|
||||
+ DestroyWindow(hwnd);
|
||||
+ flush_events();
|
||||
+}
|
||||
+
|
||||
static INT_PTR CALLBACK wm_quit_dlg_proc(HWND hwnd, UINT message, WPARAM wp, LPARAM lp)
|
||||
{
|
||||
struct recvd_message msg;
|
||||
@@ -14563,6 +14681,7 @@ START_TEST(msg)
|
||||
test_ShowWindow();
|
||||
test_PeekMessage();
|
||||
test_PeekMessage2();
|
||||
+ test_PeekMessage3();
|
||||
test_WaitForInputIdle( test_argv[0] );
|
||||
test_scrollwindowex();
|
||||
test_messages();
|
||||
--
|
||||
2.3.2
|
||||
|
@ -1,12 +1,64 @@
|
||||
From 70ce4b833309abb3df0751a01d88b3655e77d7a8 Mon Sep 17 00:00:00 2001
|
||||
From 514cdcbb66a3123b7f3922a54b16e8aa8ecd387f Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Sun, 15 Mar 2015 01:05:48 +0100
|
||||
Subject: server: Fix handling of GetMessage after previous PeekMessage call.
|
||||
|
||||
---
|
||||
server/queue.c | 31 ++++++++++++++++++++++++++-----
|
||||
1 file changed, 26 insertions(+), 5 deletions(-)
|
||||
dlls/user32/tests/msg.c | 9 ---------
|
||||
server/queue.c | 31 ++++++++++++++++++++++++++-----
|
||||
2 files changed, 26 insertions(+), 14 deletions(-)
|
||||
|
||||
diff --git a/dlls/user32/tests/msg.c b/dlls/user32/tests/msg.c
|
||||
index c297e40..19ddfde 100644
|
||||
--- a/dlls/user32/tests/msg.c
|
||||
+++ b/dlls/user32/tests/msg.c
|
||||
@@ -10459,13 +10459,10 @@ static void test_PeekMessage3(void)
|
||||
ok(msg.message == WM_TIMER, "msg.message = %u instead of WM_TIMER\n", msg.message);
|
||||
PostMessageA(hwnd, WM_USER, 0, 0);
|
||||
ret = PeekMessageA(&msg, NULL, 0, 0, PM_NOREMOVE);
|
||||
- todo_wine
|
||||
ok(ret && msg.message == WM_TIMER, "msg.message = %u instead of WM_TIMER\n", msg.message);
|
||||
ret = GetMessageA(&msg, NULL, 0, 0);
|
||||
- todo_wine
|
||||
ok(ret && msg.message == WM_TIMER, "msg.message = %u instead of WM_TIMER\n", msg.message);
|
||||
ret = GetMessageA(&msg, NULL, 0, 0);
|
||||
- todo_wine
|
||||
ok(ret &&msg.message == WM_USER, "msg.message = %u instead of WM_USER\n", msg.message);
|
||||
ret = PeekMessageA(&msg, NULL, 0, 0, 0);
|
||||
ok(!ret, "expected PeekMessage to return FALSE, got %u\n", ret);
|
||||
@@ -10475,10 +10472,8 @@ static void test_PeekMessage3(void)
|
||||
ok(msg.message == WM_TIMER, "msg.message = %u instead of WM_TIMER\n", msg.message);
|
||||
PostMessageA(hwnd, WM_USER, 0, 0);
|
||||
ret = PeekMessageA(&msg, NULL, 0, 0, PM_REMOVE);
|
||||
- todo_wine
|
||||
ok(ret && msg.message == WM_TIMER, "msg.message = %u instead of WM_TIMER\n", msg.message);
|
||||
ret = PeekMessageA(&msg, NULL, 0, 0, PM_REMOVE);
|
||||
- todo_wine
|
||||
ok(ret && msg.message == WM_USER, "msg.message = %u instead of WM_USER\n", msg.message);
|
||||
ret = PeekMessageA(&msg, NULL, 0, 0, 0);
|
||||
ok(!ret, "expected PeekMessage to return FALSE, got %u\n", ret);
|
||||
@@ -10490,10 +10485,8 @@ static void test_PeekMessage3(void)
|
||||
ok(msg.message == WM_TIMER, "msg.message = %u instead of WM_TIMER\n", msg.message);
|
||||
PostMessageA(hwnd, WM_USER, 0, 0);
|
||||
ret = GetMessageA(&msg, NULL, 0, 0);
|
||||
- todo_wine
|
||||
ok(ret && msg.message == WM_TIMER, "msg.message = %u instead of WM_TIMER\n", msg.message);
|
||||
ret = GetMessageA(&msg, NULL, 0, 0);
|
||||
- todo_wine
|
||||
ok(ret &&msg.message == WM_USER, "msg.message = %u instead of WM_USER\n", msg.message);
|
||||
ret = PeekMessageA(&msg, NULL, 0, 0, 0);
|
||||
ok(!ret, "expected PeekMessage to return FALSE, got %u\n", ret);
|
||||
@@ -10521,10 +10514,8 @@ static void test_PeekMessage3(void)
|
||||
ret = GetMessageA(&msg, NULL, 0, 0);
|
||||
ok(ret && msg.message == WM_USER, "msg.message = %u instead of WM_USER\n", msg.message);
|
||||
ret = GetMessageA(&msg, NULL, 0, 0);
|
||||
- todo_wine
|
||||
ok(ret &&msg.message == WM_TIMER, "msg.message = %u instead of WM_TIMER\n", msg.message);
|
||||
ret = GetMessageA(&msg, NULL, 0, 0);
|
||||
- todo_wine
|
||||
ok(ret && msg.message == WM_USER + 1, "msg.message = %u instead of WM_USER + 1\n", msg.message);
|
||||
ret = PeekMessageA(&msg, NULL, 0, 0, 0);
|
||||
ok(!ret, "expected PeekMessage to return FALSE, got %u\n", ret);
|
||||
diff --git a/server/queue.c b/server/queue.c
|
||||
index 3a321cd..ce78e4d 100644
|
||||
--- a/server/queue.c
|
Loading…
Reference in New Issue
Block a user