This completely refactors the winex11 window state tracking, keeping track of the desired/pending/current window state and config in a fully asynchronous way, and avoiding duplicate requests. I believe this mitigates various race conditions that we're suffering from, solving most spurious event feedback loops when the X11 state is being applied while some win32 state change is being requested, and fixing the spurious d3d/ddraw/user32 test failures.
-- v6: d3d9/tests: Remove now unnecesary d3d9ex todo_wine / flaky. winex11: Try updating client window config on (_NET_)_WM_STATE updates. winex11: Try updating client window state on ConfigureNotify. winex11: Request only one _NET_WM_STATE bit change at a time. winex11: Remove now unnecessary (net_)wm_state window members. winex11: Get rid of the now unnecessary unmap_window helper. winex11: Request window state updates asynchronously. winex11: Try updating the client window state in net_wm_state_notify. winex11: Request window config updates asynchronously. winex11: Introduce a new window_update_client_config helper. winex11: Simplify the control flow in ConfigureNotify handlers. winex11: Introduce a new window_update_client_state helper. winex11: Simplify the control flow in WM_STATE handlers. winex11: Avoid updating _NET_WM_STATE on iconic windows. winex11: Tweak the WM_TAKE_FOCUS event time to workaround a FVWM bug. winex11: Ignore focus changes during WM_STATE updates. winex11: Get rid of the now unnecessary mapped window data flag. winex11: Use desired_state wm_state to decide of the mapped flag. winex11: Call window_set_wm_state when unmapping embedded windows. winex11: Get rid of the unnecessary net_wm_state window data member. winex11: Get rid of the now unnecessary iconic window data flag. winex11: Use pending_state wm_state to decide whether a window is currently iconic. winex11: Use pending_state to decide whether to set fullscreen monitor property. winex11: Use pending_state wm_state to decide if requests can be made directly. winex11: Compute WM_STATE notify updates in term of style changes. winex11: Compute ConfigureNotify updates in term of style changes. winex11: Compute WindowPosChanged updates in term of style changes. winex11: Avoid requesting unnecessary window config changes. winex11: Avoid requesting unnecessary _NET_WM_STATE changes. winex11: Track window config requests and updates. winex11: Introduce a new window_set_config helper. winex11: Track _NET_WM_STATE window property requests and updates. winex11: Introduce a new window_set_net_wm_state helper. winex11: Introduce a new window_set_wm_state helper. winex11: Track _XEMBED_INFO window property changes. winex11: Introduce a new window state tracker. winex11: Move embedded check in update_net_wm_states / sync_window_style. winex11: Move ConfigureNotify checks after computing visible rect. winex11: Rename read_net_wm_state to get_window_net_wm_state. winex11: Set configure_serial when resizing on display mode change. winex11: Avoid processing RRNotify events in xrandr14_get_id. d3d9/tests: Use static class for the dummy window. d3d9/tests: Avoid creating visible windows concurrently. wined3d: Check that format_id is >= 0 before assuming it's an index. DEBUG: gitlab: Only build the last commit.
This merge request has too many patches to be relayed via email. Please visit the URL below to see the contents of the merge request. https://gitlab.winehq.org/wine/wine/-/merge_requests/6569
I'd say results looks good, although there's a couple of failures still:
* The `d3d9:device device.c:1931 Test failed: The cursor handle is 00010022` uses `broken(1)` which lets me think that the test is quite meaningless. Still, perhaps a fluke, or a matter of processing events, as changing the cursor may require internal hardware messages to be processed.
* The user32:msg failures seem to be happening already before according to https://test.winehq.org/data/patterns.html, though I'm not able to reproduce locally after a few tries.