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 }