From: Rémi Bernon rbernon@codeweavers.com
--- dlls/winewayland.drv/window.c | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-)
diff --git a/dlls/winewayland.drv/window.c b/dlls/winewayland.drv/window.c index c31374cc564..67d5ff5ddf2 100644 --- a/dlls/winewayland.drv/window.c +++ b/dlls/winewayland.drv/window.c @@ -254,18 +254,15 @@ static BOOL wayland_win_data_update_wayland_surface(struct wayland_win_data *dat return TRUE; }
-static void wayland_win_data_update_wayland_state(struct wayland_win_data *data) +static void wayland_surface_update_state_toplevel(struct wayland_surface *surface) { - struct wayland_surface *surface = data->wayland_surface; - BOOL processing_config; + BOOL processing_config = surface->processing.serial && + !surface->processing.processed;
- if (!surface->xdg_toplevel) goto out; - - processing_config = surface->processing.serial && - !surface->processing.processed; + if (!surface->xdg_toplevel) return; /* surface current role may be cleared */
TRACE("hwnd=%p window_state=%#x %s->state=%#x\n", - data->hwnd, surface->window.state, + surface->hwnd, surface->window.state, processing_config ? "processing" : "current", processing_config ? surface->processing.state : surface->current.state);
@@ -301,8 +298,21 @@ static void wayland_win_data_update_wayland_state(struct wayland_win_data *data) { surface->processing.processed = TRUE; } +} + +static void wayland_win_data_update_wayland_state(struct wayland_win_data *data) +{ + struct wayland_surface *surface = data->wayland_surface; + + switch (surface->role) + { + case WAYLAND_SURFACE_ROLE_NONE: + break; + case WAYLAND_SURFACE_ROLE_TOPLEVEL: + wayland_surface_update_state_toplevel(surface); + break; + }
-out: wl_display_flush(process_wayland.wl_display); }