[PATCH 1/6] user32/tests: Wait more for ShowWindow(SW_SHOWMINIMIZED):overlapped test.
Zebediah Figura
z.figura12 at gmail.com
Tue Nov 5 13:57:11 CST 2019
On 11/5/19 1:44 PM, Rémi Bernon wrote:
> The first messages in the sequence are generated right away by the
> SW_MINIMIZE request, but the last ones are only a result of the native
> driver implementation of the window minimization and may take some time
> to be received, or may not be received at all.
>
> The test spuriously succeeds in the case where the driver messages are
> not received and only the optional messages at the end of the sequence
> are missing.
>
> Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
> ---
>
> Notes:
> The test actually passes on all the testbot runs I could start. It
> fails locally though -testing with fvwm in Xephyr- from time to time
> because the WM sometimes reacts fast enough.
>
> I'm not sure if that's a specificity of the testbot WM configuration,
> it looks like minimizing windows there does not trigger anymore
> messages not matter how long we wait.
>
> dlls/user32/tests/msg.c | 9 ++++++++-
> 1 file changed, 8 insertions(+), 1 deletion(-)
>
I actually debugged this a while ago. The problem is that another window
gets activated on focus loss, and the test actually accounts for this—it
happens on Windows too—but we do so incorrectly, sending WM_CANCELMODE
when we shouldn't. I sent a patch for it over a year ago, but it fell
off the list:
https://www.winehq.org/pipermail/wine-devel/2018-January/121881.html
Unless you're talking about a different failure, in which case, please
disregard.
> diff --git a/dlls/user32/tests/msg.c b/dlls/user32/tests/msg.c
> index 477661ab623..d0de1c6d8bd 100644
> --- a/dlls/user32/tests/msg.c
> +++ b/dlls/user32/tests/msg.c
> @@ -5101,6 +5101,7 @@ static void test_messages(void)
> LRESULT res;
> POINT pos;
> BOOL ret;
> + DWORD minimize_timeout;
>
> flush_sequence();
>
> @@ -5163,7 +5164,13 @@ static void test_messages(void)
>
> ShowWindow(hwnd, SW_MINIMIZE);
> flush_events();
> - ok_sequence(WmShowMinOverlappedSeq, "ShowWindow(SW_SHOWMINIMIZED):overlapped", TRUE);
> +
> + /* Minimizing may take some time to complete or may not be supported
> + * at all and this spuriously failed because everything after the 16th
> + * message of the sequence is optional. */
> + minimize_timeout = GetTickCount() + 500;
> + while (sequence_cnt <= 16 && GetTickCount() < minimize_timeout) flush_events();
> + ok_sequence(WmShowMinOverlappedSeq, "ShowWindow(SW_SHOWMINIMIZED):overlapped", sequence_cnt > 16);
> flush_sequence();
>
> if (GetWindowLongW( hwnd, GWL_STYLE ) & WS_MINIMIZE)
>
More information about the wine-devel
mailing list