Mutter and related window managers use a parent X window frame, and
temporarily unmap windows when their decoration is switched on/off.
This triggers an Unmap > FocusOut > Reparent > Map > FocusIn event
sequence, which we need to ignore in order to keep focus unchanged.
If we were wrong about it, the WM_STATE property should then change as
well, and we will eventually post a WM_WINE_WINDOW_STATE_CHANGED message
again and have another chance at changing the foreground window.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/8154
Instead of https://gitlab.winehq.org/wine/wine/-/merge_requests/7815, for https://gitlab.winehq.org/wine/wine/-/merge_requests/7226, this only split the sync ops to a separate vtable and let objects delegate theirs to a separate object.
This starts using a event-like interface for most objects, leaving the decision regarding if/how to split sync themselves / integrate inproc syncs for later.
--
v9: server: Use an event sync for fd objects.
server: Introduce a new event sync object.
server: Redirect fd-based objects sync to the fd.
server: Add an operation to retrieve an object sync.
server: Move object grab/release out of (add|remove)_queue.
server: Move signal access checks outside of the objects.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7848