commit 4707d48

dalem  ·  2026-02-21 22:36:28 +0000 UTC
parent 9faf0d2
Add an offset on the Y axis to the panel protocol

This adds an option to offset the geometry of a panel by set amount of pixels

New function provided and accesible via the protocol: set_y_offset
2 files changed,  +21, -2
+17, -2
 1@@ -46,6 +46,7 @@ struct panel {
 2 	struct screen_modifier modifier;
 3 	uint32_t edge;
 4 	uint32_t offset, strut_size;
 5+	uint32_t y_offset;
 6 	bool docked;
 7 };
 8 
 9@@ -59,11 +60,11 @@ update_position(struct panel *panel)
10 	switch (panel->edge) {
11 	case SWC_PANEL_EDGE_TOP:
12 		x = screen->x + panel->offset;
13-		y = screen->y;
14+		y = screen->y + panel->y_offset;
15 		break;
16 	case SWC_PANEL_EDGE_BOTTOM:
17 		x = screen->x + panel->offset;
18-		y = screen->y + screen->height - view->height;
19+		y = screen->y + screen->height - view->height - panel->y_offset;
20 		break;
21 	case SWC_PANEL_EDGE_LEFT:
22 		x = screen->x;
23@@ -139,6 +140,18 @@ set_offset(struct wl_client *client, struct wl_resource *resource,
24 	}
25 }
26 
27+static void
28+set_y_offset(struct wl_client *client, struct wl_resource *resource,
29+           uint32_t offset)
30+{
31+	struct panel *panel = wl_resource_get_user_data(resource);
32+
33+	panel->y_offset = offset;
34+	if (panel->docked) {
35+		update_position(panel);
36+	}
37+}
38+
39 static void
40 set_strut(struct wl_client *client, struct wl_resource *resource, uint32_t size,
41           uint32_t begin, uint32_t end)
42@@ -154,6 +167,7 @@ set_strut(struct wl_client *client, struct wl_resource *resource, uint32_t size,
43 static const struct swc_panel_interface panel_impl = {
44     .dock = dock,
45     .set_offset = set_offset,
46+		.set_y_offset = set_y_offset,
47     .set_strut = set_strut,
48 };
49 
50@@ -257,6 +271,7 @@ panel_new(struct wl_client *client, uint32_t version, uint32_t id,
51 	panel->modifier.modify = &modify;
52 	panel->screen = NULL;
53 	panel->offset = 0;
54+	panel->y_offset = 0;
55 	panel->strut_size = 0;
56 	panel->docked = false;
57 	wl_list_insert(&panel->view->base.handlers, &panel->view_handler.link);
+4, -0
 1@@ -56,6 +56,10 @@
 2             <arg name="offset" type="uint" />
 3         </request>
 4 
 5+        <request name="set_y_offset">
 6+            <arg name="offset" type="uint" />
 7+        </request>
 8+
 9         <request name="set_strut">
10             <arg name="size" type="uint" />
11             <arg name="begin" type="uint" />