server: Set the idle event when PeekMessage is called with -1 as window filter.
diff --git a/dlls/user32/tests/msg.c b/dlls/user32/tests/msg.c
index 492de62..714e57f 100644
--- a/dlls/user32/tests/msg.c
+++ b/dlls/user32/tests/msg.c
@@ -12080,6 +12080,13 @@
{ 0, 0, FALSE },
{ 0, WAIT_TIMEOUT, FALSE },
{ 0, 0, FALSE },
+ { 0, 0, FALSE },
+/* 15 */ { 0, 0, FALSE },
+ { WAIT_TIMEOUT, 0, FALSE },
+ { WAIT_TIMEOUT, 0, FALSE },
+ { WAIT_TIMEOUT, 0, FALSE },
+ { WAIT_TIMEOUT, 0, FALSE },
+/* 20 */ { WAIT_TIMEOUT, 0, FALSE },
};
static DWORD CALLBACK do_wait_idle_child_thread( void *arg )
@@ -12205,6 +12212,41 @@
WaitForSingleObject( thread, 10000 );
CloseHandle( thread );
break;
+ case 14:
+ SetEvent( start_event );
+ Sleep( 200 );
+ PeekMessage( &msg, HWND_TOPMOST, 0, 0, PM_NOREMOVE );
+ break;
+ case 15:
+ SetEvent( start_event );
+ Sleep( 200 );
+ PeekMessage( &msg, HWND_BROADCAST, 0, 0, PM_NOREMOVE );
+ break;
+ case 16:
+ SetEvent( start_event );
+ Sleep( 200 );
+ PeekMessage( &msg, HWND_BOTTOM, 0, 0, PM_NOREMOVE );
+ break;
+ case 17:
+ SetEvent( start_event );
+ Sleep( 200 );
+ PeekMessage( &msg, (HWND)0xdeadbeef, 0, 0, PM_NOREMOVE );
+ break;
+ case 18:
+ SetEvent( start_event );
+ Sleep( 200 );
+ PeekMessage( &msg, HWND_NOTOPMOST, 0, 0, PM_NOREMOVE );
+ break;
+ case 19:
+ SetEvent( start_event );
+ Sleep( 200 );
+ PeekMessage( &msg, HWND_MESSAGE, 0, 0, PM_NOREMOVE );
+ break;
+ case 20:
+ SetEvent( start_event );
+ Sleep( 200 );
+ PeekMessage( &msg, GetDesktopWindow(), 0, 0, PM_NOREMOVE );
+ break;
}
WaitForSingleObject( end_event, 2000 );
CloseHandle( start_event );
diff --git a/server/queue.c b/server/queue.c
index 938d7cf..b2bc603 100644
--- a/server/queue.c
+++ b/server/queue.c
@@ -1819,6 +1819,7 @@
return;
}
+ if (get_win == -1 && current->process->idle_event) set_event( current->process->idle_event );
queue->wake_mask = req->wake_mask;
queue->changed_mask = req->changed_mask;
set_error( STATUS_PENDING ); /* FIXME */