From: Rémi Bernon <rbernon@codeweavers.com> When window has the _NET_WM_STATE_FULLSCREEN bit set. --- dlls/winex11.drv/window.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/dlls/winex11.drv/window.c b/dlls/winex11.drv/window.c index 23cc3edb0a6..02e9de83f76 100644 --- a/dlls/winex11.drv/window.c +++ b/dlls/winex11.drv/window.c @@ -1295,6 +1295,12 @@ static void window_set_monitors( struct x11drv_win_data *data, const struct moni { XEvent xev; + if (is_fullscreen && (data->configure_serial || window_needs_config_change_delay( data ))) + { + TRACE( "window %p/%lx is updating or delaying config requests, delaying monitors update\n", data->hwnd, data->whole_window ); + return; /* another window config change is pending or delayed, wait for it to complete */ + } + xev.xclient.type = ClientMessage; xev.xclient.window = data->whole_window; xev.xclient.message_type = x11drv_atom(_NET_WM_FULLSCREEN_MONITORS); @@ -1311,6 +1317,14 @@ static void window_set_monitors( struct x11drv_win_data *data, const struct moni data->whole_window, debugstr_monitor_indices( new_monitors ), data->monitors_serial ); XSendEvent( data->display, DefaultRootWindow( data->display ), False, SubstructureRedirectMask | SubstructureNotifyMask, &xev ); + + if (is_fullscreen) + { + data->configure_serial = data->monitors_serial; + data->pending_state.rect = data->rects.visible; + TRACE( "window %p/%lx changes fullscreen monitors, expecting config %s, serial %lu\n", data->hwnd, + data->whole_window, wine_dbgstr_rect( &data->pending_state.rect ), data->configure_serial ); + } } } -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10620