[PATCH] winex11.drv: Request _NET_ACTIVE_WINDOW in SetFocus().

Zebediah Figura zfigura at codeweavers.com
Thu May 31 10:04:13 CDT 2018


On 05/31/2018 09:40 AM, Dmitry Timoshkov wrote:
> Zebediah Figura <zfigura at codeweavers.com> wrote:
> 
>>>> Changes from Staging patch: send message inside of SetFocus() handler
>>>> instead of adding a new driver message.
>>>
>>> These changes broke the patch, test program attached to the bug 2155
>>> enters an infinite loop (flickering windows constantly changing the focus)
>>> here with Mate as a WM.
>>>
>>
>> Thanks, I've sent an updated version. Please let me know if the patch
>> still breaks; it works here with Xfce4 and passes all of the user32
>> tests (or at least doesn't introduce any new failures).
> 
> New version of the patch still doesn't work here, same flickering in an
> infinite loop until I move mouse over the test's window.
> 

Thanks. It looks like Marco sends a WM_TAKE_FOCUS message when honouring 
a request to become the active window. Since we call 
SetForegroundWindow() inside of our WM_TAKE_FOCUS handler, we generate a 
loop. This wouldn't be a problem, except that the application creates 
two windows in quick succession before processing events, and Marco 
generates one WM_TAKE_FOCUS message for each, so we essentially start 
out one WM_TAKE_FOCUS message behind the most recent one.

It's not clear to me what we should do about this; the spec doesn't seem 
to explicitly forbid any of this behaviour, but neither does it say we 
can depend on receiving WM_TAKE_FOCUS in response to a 
_NET_ACTIVE_WINDOW request. Could someone more knowledgeable about X11 
provide input?



More information about the wine-devel mailing list