[PATCH 1/3] user32/tests: Sleep enough time to make sure all input message have been processed.
Qian Hong
qhong at codeweavers.com
Fri Jul 12 16:27:19 CDT 2013
On Fri, Jul 12, 2013 at 3:07 AM, Alexandre Julliard <julliard at winehq.org> wrote:
> Adding sleeps to work around timing issues is usually suspicious,
Hello, how about this one?
--
Regards,
Qian Hong
-
http://www.codeweavers.com
-------------- next part --------------
diff --git a/dlls/user32/tests/menu.c b/dlls/user32/tests/menu.c
index 3e4cf93..fab7539 100644
--- a/dlls/user32/tests/menu.c
+++ b/dlls/user32/tests/menu.c
@@ -120,8 +120,11 @@ typedef struct
static BOOL bMenuVisible;
static INT popmenu;
static BOOL got_input;
+static BOOL got_last_input;
static HMENU hMenus[4];
+#define WM_LAST_INPUT (WM_USER + 1)
+
#define MOD_SIZE 10
#define MOD_NRMENUS 8
@@ -2113,6 +2116,7 @@ static DWORD WINAPI test_menu_input_thread(LPVOID lpParameter)
int ret = TRUE, elapsed = 0;
got_input = i && menu_tests[i-1].bMenuVisible;
+ got_last_input = FALSE;
if (menu_tests[i].type == INPUT_KEYBOARD)
for (j = 0; menu_tests[i].wVk[j] != 0; j++)
@@ -2121,19 +2125,19 @@ static DWORD WINAPI test_menu_input_thread(LPVOID lpParameter)
for (j = 0; menu_tests[i].menu_item_pairs[j].uMenu != 0; j++)
if (!(ret = click_menu(hWnd, &menu_tests[i].menu_item_pairs[j]))) break;
+ PostMessage( hWnd, WM_LAST_INPUT, 0, 0);
if (!ret)
{
skip( "test %u: failed to send input\n", i );
PostMessage( hWnd, WM_CANCELMODE, 0, 0 );
return 0;
}
- while (menu_tests[i].bMenuVisible != bMenuVisible)
- {
+ do {
if (elapsed > 200)
break;
elapsed += 20;
Sleep(20);
- }
+ } while (!got_last_input);
if (!got_input)
{
@@ -2166,6 +2170,9 @@ static LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam,
case WM_EXITMENULOOP:
case WM_MENUSELECT:
break;
+ case WM_LAST_INPUT:
+ got_last_input = TRUE;
+ break;
case WM_KEYDOWN:
case WM_SYSKEYDOWN:
More information about the wine-devel
mailing list