Author: gschneider Date: Thu Jun 3 20:47:37 2010 New Revision: 47548
URL: http://svn.reactos.org/svn/reactos?rev=47548&view=rev Log: [DESK] - 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-msgwaitformulti...
See issue #4213 for more details.
Modified: trunk/reactos/dll/cpl/desk/screensaver.c
Modified: trunk/reactos/dll/cpl/desk/screensaver.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/desk/screensaver.c?... ============================================================================== --- trunk/reactos/dll/cpl/desk/screensaver.c [iso-8859-1] (original) +++ trunk/reactos/dll/cpl/desk/screensaver.c [iso-8859-1] Thu Jun 3 20:47:37 2010 @@ -147,33 +147,32 @@ WaitForSettingsDialog(HWND hwndDlg, HANDLE hProcess) { + DWORD dwResult; + MSG msg; + while (TRUE) { - DWORD Ret; - MSG msg; - - while (PeekMessage(&msg, - NULL, - 0, - 0, - PM_REMOVE)) - { - if (msg.message == WM_QUIT) - return FALSE; - - if (IsDialogMessage(hwndDlg, &msg)) + dwResult = MsgWaitForMultipleObjects(1, + &hProcess, + FALSE, + INFINITE, + QS_ALLINPUT); + if (dwResult == WAIT_OBJECT_0 + 1) + { + 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; }