commit 98120f8
shrub
·
2026-05-09 15:14:25 +0000 UTC
parent 70c6001
fix swc_panel clients not being above all caused by layer shell change
1 files changed,
+14,
-1
+14,
-1
1@@ -1031,7 +1031,8 @@ static void
2 restack_view_for_layer(struct compositor_view *view, bool raise)
3 {
4 struct compositor_view *other;
5- struct wl_list *insert_after = compositor.views.prev;
6+ struct wl_list *insert_after = &compositor.views;
7+ bool found_same = false;
8
9 wl_list_for_each(other, &compositor.views, link)
10 {
11@@ -1045,6 +1046,7 @@ restack_view_for_layer(struct compositor_view *view, bool raise)
12 }
13
14 if (other->stack_layer == view->stack_layer) {
15+ found_same = true;
16 if (raise) {
17 insert_after = other->link.prev;
18 } else {
19@@ -1057,6 +1059,17 @@ restack_view_for_layer(struct compositor_view *view, bool raise)
20 break;
21 }
22
23+ if (!found_same && !raise && insert_after == &compositor.views) {
24+ insert_after = compositor.views.prev;
25+ if (insert_after == &view->link) {
26+ insert_after = insert_after->prev;
27+ }
28+ }
29+
30+ if (insert_after == &view->link) {
31+ insert_after = insert_after->prev;
32+ }
33+
34 wl_list_remove(&view->link);
35 wl_list_insert(insert_after, &view->link);
36 }