sir-lexa sir-lexa@yandex.ru wrote:
case WM_DESTROY:
PostQuitMessage(0);
/* PostQuitMessage(0); It lets some tests to be skipped */ return TRUE;
This is not acceptable, there is much more behind the scene. You need to figure out the real reason of skipping the tests.
I figured out now. As described in wine sources, PostQuitMessage() sets a flag in the thread's message queue that signals it to generate a WM_QUIT message when there are no other pending sent or posted messages in the queue. The tests with skipped testcases are those which use WM_TIMER messages - test_timer_message() and my test. In DIALOG_DoDialogBox() there is clearly defined that on receiving WM_QUIT message the window is destroyed. So timer messages just do not reach queue.
I thought about solution again and now I think that it would be better to remove at all lines about WM_DESTROY handling, such as we don't handle this message. And let it be handled by default. That code does nothing except posting WM_QUIT messages leading to test skipping. (test passed on WineBot)
What do you think?
28.05.2012, 10:32, "Dmitry Timoshkov" dmitry@baikal.ru:
sir-lexa sir-lexa@yandex.ru wrote:
case WM_DESTROY: - PostQuitMessage(0); + /* PostQuitMessage(0); It lets some tests to be skipped */ return TRUE;
This is not acceptable, there is much more behind the scene. You need to figure out the real reason of skipping the tests.
-- Dmitry.
Guys, so how about this?
diff --git a/dlls/user32/tests/dialog.c b/dlls/user32/tests/dialog.c index 6bd34b3..4301c8d 100644 --- a/dlls/user32/tests/dialog.c +++ b/dlls/user32/tests/dialog.c @@ -1027,9 +1027,6 @@ static INT_PTR CALLBACK DestroyOnCloseDlgWinProc (HWND hDlg, UINT uiMsg, case WM_CLOSE: DestroyWindow(hDlg); return TRUE; - case WM_DESTROY: - PostQuitMessage(0); - return TRUE; } return FALSE; }
29.05.2012, 01:16, "Alexey Slepov" sir-lexa@yandex.ru:
I figured out now. As described in wine sources, PostQuitMessage() sets a flag in the thread's message queue that signals it to generate a WM_QUIT message when there are no other pending sent or posted messages in the queue. The tests with skipped testcases are those which use WM_TIMER messages - test_timer_message() and my test. In DIALOG_DoDialogBox() there is clearly defined that on receiving WM_QUIT message the window is destroyed. So timer messages just do not reach queue.
I thought about solution again and now I think that it would be better to remove at all lines about WM_DESTROY handling, such as we don't handle this message. And let it be handled by default. That code does nothing except posting WM_QUIT messages leading to test skipping. (test passed on WineBot)
What do you think?
28.05.2012, 10:32, "Dmitry Timoshkov" dmitry@baikal.ru:
sir-lexa sir-lexa@yandex.ru wrote:
case WM_DESTROY: - PostQuitMessage(0); + /* PostQuitMessage(0); It lets some tests to be skipped */ return TRUE;
This is not acceptable, there is much more behind the scene. You need to figure out the real reason of skipping the tests.
-- Dmitry.