Merge branch 'subsurfaces-state-flag-v2' into 'master'

surface: add WLR_SURFACE_STATE_SUBSURFACES

See merge request wlroots/wlroots!4477
This commit is contained in:
Simon Ser 2026-04-02 01:57:03 +00:00
commit b96a67a5a1
3 changed files with 8 additions and 2 deletions

View file

@ -30,6 +30,7 @@ enum wlr_surface_state_field {
WLR_SURFACE_STATE_FRAME_CALLBACK_LIST = 1 << 7,
WLR_SURFACE_STATE_VIEWPORT = 1 << 8,
WLR_SURFACE_STATE_OFFSET = 1 << 9,
WLR_SURFACE_STATE_SUBSURFACES = 1 << 10, // sub-surface added or re-ordered
};
struct wlr_surface_state {

View file

@ -159,8 +159,10 @@ static void subsurface_tree_handle_surface_commit(struct wl_listener *listener,
struct wlr_scene_subsurface_tree *subsurface_tree =
wl_container_of(listener, subsurface_tree, surface_commit);
// TODO: only do this on subsurface order or position change
subsurface_tree_reconfigure(subsurface_tree);
// TODO: also need to do this on sub-surface position change
if (subsurface_tree->surface->current.committed & WLR_SURFACE_STATE_SUBSURFACES) {
subsurface_tree_reconfigure(subsurface_tree);
}
}
static void subsurface_tree_handle_subsurface_destroy(struct wl_listener *listener,

View file

@ -118,6 +118,7 @@ static void subsurface_handle_place_above(struct wl_client *client,
node = &sibling->pending.link;
}
subsurface->parent->pending.committed |= WLR_SURFACE_STATE_SUBSURFACES;
wl_list_remove(&subsurface->pending.link);
wl_list_insert(node, &subsurface->pending.link);
}
@ -148,6 +149,7 @@ static void subsurface_handle_place_below(struct wl_client *client,
node = &sibling->pending.link;
}
subsurface->parent->pending.committed |= WLR_SURFACE_STATE_SUBSURFACES;
wl_list_remove(&subsurface->pending.link);
wl_list_insert(node->prev, &subsurface->pending.link);
}
@ -380,6 +382,7 @@ static void subcompositor_handle_get_subsurface(struct wl_client *client,
wl_signal_add(&parent->events.destroy, &subsurface->parent_destroy);
subsurface->parent_destroy.notify = subsurface_handle_parent_destroy;
subsurface->parent->pending.committed |= WLR_SURFACE_STATE_SUBSURFACES;
wl_list_remove(&subsurface->pending.link);
wl_list_insert(parent->pending.subsurfaces_above.prev,
&subsurface->pending.link);