- 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
WaitForSettingsDialog(HWND hwndDlg,
HANDLE hProcess)
{
WaitForSettingsDialog(HWND hwndDlg,
HANDLE hProcess)
{
+ DWORD dwResult;
+ MSG msg;
+
- 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))