[DESK]
authorGregor Schneider <grschneider@gmail.com>
Thu, 3 Jun 2010 18:47:37 +0000 (18:47 +0000)
committerGregor Schneider <grschneider@gmail.com>
Thu, 3 Jun 2010 18:47:37 +0000 (18:47 +0000)
- Rearrange screensaver wait codes around the MsgWaitForMultipleObjects function
- Fixes screensaver configuration windows blocking the control panel
- Refs: http://blogs.msdn.com/b/oldnewthing/archive/2005/02/17/375307.aspx and http://codereflect.com/2008/09/19/when-and-how-should-we-use-msgwaitformultipleobjects/

See issue #4213 for more details.

svn path=/trunk/; revision=47548

reactos/dll/cpl/desk/screensaver.c

index c24cf78..00ce095 100644 (file)
@@ -147,33 +147,32 @@ static BOOL
 WaitForSettingsDialog(HWND hwndDlg,
                       HANDLE hProcess)
 {
+    DWORD dwResult;
+    MSG msg;
+
     while (TRUE)
     {
-        DWORD Ret;
-        MSG msg;
-
-        while (PeekMessage(&msg,
-                           NULL,
-                           0,
-                           0,
-                           PM_REMOVE))
+        dwResult = MsgWaitForMultipleObjects(1,
+                                             &hProcess,
+                                             FALSE,
+                                             INFINITE,
+                                             QS_ALLINPUT);
+        if (dwResult == WAIT_OBJECT_0 + 1)
         {
-            if (msg.message == WM_QUIT)
-                return FALSE;
-
-            if (IsDialogMessage(hwndDlg, &msg))
+            if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
             {
-                TranslateMessage(&msg);
-                DispatchMessage(&msg);
+                if (msg.message == WM_QUIT)
+                {
+                    return FALSE;
+                }
+                if (IsDialogMessage(hwndDlg, &msg))
+                {
+                    TranslateMessage(&msg);
+                    DispatchMessage(&msg);
+                }
             }
         }
-
-        Ret = MsgWaitForMultipleObjects(1,
-                                        &hProcess,
-                                        FALSE,
-                                        INFINITE,
-                                        QS_ALLINPUT);
-        if (Ret == (WAIT_OBJECT_0))
+        else
         {
             return TRUE;
         }