Commit efade28d authored by Quentin Glidic's avatar Quentin Glidic

libweston-desktop/xdg-shell-v6: Actually send same-as-current configure if needed

If a surface is in state A, and we just sent a configure for state B,
setting back state A would be ignored, because state B has not been
committed yet.
Now, we check against the latest configured state (which is current
state if configure list is empty).

Reported on wlroots Quentin Glidic's avatarQuentin Glidic <>
Reviewed-by: Jonas Ådahl's avatarJonas Ådahl <>
parent 71ebc052
......@@ -903,20 +903,39 @@ weston_desktop_xdg_surface_send_configure(void *user_data)
static bool
weston_desktop_xdg_toplevel_state_compare(struct weston_desktop_xdg_toplevel *toplevel)
struct {
struct weston_desktop_xdg_toplevel_state state;
struct weston_size size;
} configured;
if (!toplevel->base.configured)
return false;
if (toplevel->pending.state.activated != toplevel->current.state.activated)
if (wl_list_empty(&toplevel->base.configure_list)) {
/* Last configure is actually the current state, just use it */
configured.state = toplevel->current.state;
configured.size.width = toplevel->base.surface->width;
configured.size.height = toplevel->base.surface->height;
} else {
struct weston_desktop_xdg_toplevel_configure *configure =
configured.state = configure->state;
configured.size = configure->size;
if (toplevel->pending.state.activated != configured.state.activated)
return false;
if (toplevel->pending.state.fullscreen != toplevel->current.state.fullscreen)
if (toplevel->pending.state.fullscreen != configured.state.fullscreen)
return false;
if (toplevel->pending.state.maximized != toplevel->current.state.maximized)
if (toplevel->pending.state.maximized != configured.state.maximized)
return false;
if (toplevel->pending.state.resizing != toplevel->current.state.resizing)
if (toplevel->pending.state.resizing != configured.state.resizing)
return false;
if (toplevel->base.surface->width == toplevel->pending.size.width &&
toplevel->base.surface->height == toplevel->pending.size.height)
if (toplevel->pending.size.width == configured.size.width &&
toplevel->pending.size.height == configured.size.height)
return true;
if (toplevel->pending.size.width == 0 &&
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment