From aea3411d0edb5a7293827d6f319d119e6d301898 Mon Sep 17 00:00:00 2001 From: Jeffy Chen Date: Wed, 3 Nov 2021 17:52:51 +0800 Subject: [PATCH 49/97] compositor: Support placing subsurface above or below all siblings By passing itself as sibling in ::place_above or ::place_below. Signed-off-by: Jeffy Chen --- libweston/compositor.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/libweston/compositor.c b/libweston/compositor.c index 86f9a4ef9..1b22f8f85 100644 --- a/libweston/compositor.c +++ b/libweston/compositor.c @@ -5852,7 +5852,12 @@ subsurface_place_above(struct wl_client *client, if (!sub) return; - sibling = subsurface_sibling_check(sub, surface, "place_above"); + if (surface == sub->surface) + sibling = container_of(sub->parent->subsurface_list.next, + struct weston_subsurface, parent_link); + else + sibling = subsurface_sibling_check(sub, surface, "place_above"); + if (!sibling) return; @@ -5877,7 +5882,12 @@ subsurface_place_below(struct wl_client *client, if (!sub) return; - sibling = subsurface_sibling_check(sub, surface, "place_below"); + if (surface == sub->surface) + sibling = container_of(sub->parent->subsurface_list.prev, + struct weston_subsurface, parent_link); + else + sibling = subsurface_sibling_check(sub, surface, "place_below"); + if (!sibling) return; -- 2.20.1