commit ba43e86

wf  ·  2026-04-22 11:06:46 +0000 UTC
parent 4a8b3fd
Add get_screen_geometry, use PRIu32 for printf
4 files changed,  +48, -29
M howl.c
M ipc.c
+1, -0
1@@ -40,6 +40,7 @@ static const struct command commands[] = {
2 	{ "get_focus",           cmd_get_focus,           0, false },
3 	{ "get_workspace",       cmd_get_workspace,       0, false },
4 	{ "list_windows",        cmd_list_windows,        0, false },
5+	{ "get_screen_geometry", cmd_get_screen_geometry, 0, false },
6 	{ "bind",                cmd_bind,                2, false },
7 	{ "modkey",              cmd_modkey,              1, true  },
8 	{ "inner_focus_color",   cmd_inner_focus_color,   1, true  },
M howl.c
+28, -26
 1@@ -46,6 +46,7 @@ extern status ipc_get_app_id(char **);
 2 extern status ipc_get_focus(char **);
 3 extern status ipc_get_workspace(char **);
 4 extern status ipc_list_windows(char **);
 5+extern status ipc_get_screen_geometry(char **);
 6 extern status ipc_bind(char **);
 7 extern status ipc_quit(char **);
 8 extern status ipc_config(char **);
 9@@ -70,32 +71,33 @@ static struct swc_screen_handler scr_handler = {
10 
11 typedef status (*cmd_handler_t)(char **);
12 static const cmd_handler_t cmd_handler [cmd_last] = {
13-	[cmd_move]            = ipc_move,
14-	[cmd_move_absolute]   = ipc_move_absolute,
15-	[cmd_resize]          = ipc_resize,
16-	[cmd_resize_absolute] = ipc_resize_absolute,
17-	[cmd_teleport]        = ipc_teleport,
18-	[cmd_center]          = ipc_center,
19-	[cmd_fullscreen]      = ipc_fullscreen,
20-	[cmd_hide]            = ipc_hide,
21-	[cmd_show]            = ipc_show,
22-	[cmd_lower]           = ipc_lower,
23-	[cmd_raise]           = ipc_raise,
24-	[cmd_focus_prev]      = ipc_focus_prev,
25-	[cmd_focus_next]      = ipc_focus_next,
26-	[cmd_close]           = ipc_close,
27-	[cmd_workspace]       = ipc_workspace,
28-	[cmd_send_workspace]  = ipc_send_workspace,
29-	[cmd_get_geometry]    = ipc_get_geometry,
30-	[cmd_get_pid]         = ipc_get_pid,
31-	[cmd_get_title]       = ipc_get_title,
32-	[cmd_get_app_id]      = ipc_get_app_id,
33-	[cmd_get_focus]       = ipc_get_focus,
34-	[cmd_get_workspace]   = ipc_get_workspace,
35-	[cmd_list_windows]    = ipc_list_windows,
36-	[cmd_bind]            = ipc_bind,
37-	[cmd_quit]            = ipc_quit,
38-	[cmd_config]          = ipc_config
39+	[cmd_move]                = ipc_move,
40+	[cmd_move_absolute]       = ipc_move_absolute,
41+	[cmd_resize]              = ipc_resize,
42+	[cmd_resize_absolute]     = ipc_resize_absolute,
43+	[cmd_teleport]            = ipc_teleport,
44+	[cmd_center]              = ipc_center,
45+	[cmd_fullscreen]          = ipc_fullscreen,
46+	[cmd_hide]                = ipc_hide,
47+	[cmd_show]                = ipc_show,
48+	[cmd_lower]               = ipc_lower,
49+	[cmd_raise]               = ipc_raise,
50+	[cmd_focus_prev]          = ipc_focus_prev,
51+	[cmd_focus_next]          = ipc_focus_next,
52+	[cmd_close]               = ipc_close,
53+	[cmd_workspace]           = ipc_workspace,
54+	[cmd_send_workspace]      = ipc_send_workspace,
55+	[cmd_get_geometry]        = ipc_get_geometry,
56+	[cmd_get_pid]             = ipc_get_pid,
57+	[cmd_get_title]           = ipc_get_title,
58+	[cmd_get_app_id]          = ipc_get_app_id,
59+	[cmd_get_focus]           = ipc_get_focus,
60+	[cmd_get_workspace]       = ipc_get_workspace,
61+	[cmd_list_windows]        = ipc_list_windows,
62+	[cmd_get_screen_geometry] = ipc_get_screen_geometry,
63+	[cmd_bind]                = ipc_bind,
64+	[cmd_quit]                = ipc_quit,
65+	[cmd_config]              = ipc_config
66 };
67 
68 static int
+1, -0
1@@ -19,6 +19,7 @@ enum cmd {
2 	cmd_workspace,
3 	cmd_send_workspace,
4 	cmd_get_geometry,
5+	cmd_get_screen_geometry,
6 	cmd_list_windows,
7 	cmd_get_pid,
8 	cmd_get_title,
M ipc.c
+18, -3
 1@@ -1,6 +1,7 @@
 2 #include <stdio.h>
 3 #include <string.h>
 4 #include <stdlib.h>
 5+#include <inttypes.h>
 6 
 7 #include <wayland-server.h>
 8 #include <swc.h>
 9@@ -316,7 +317,7 @@ ipc_get_geometry(char **arg) {
10 
11 	struct swc_rectangle geom;
12 	if (swc_window_get_geometry(wm.cur->win, &geom)) {
13-		snprintf(s.msg, MAXSIZE * sizeof(char), "%d %d %u %u\n", geom.x, geom.y, geom.width, geom.height);  
14+		snprintf(s.msg, MAXSIZE * sizeof(char), "%d %d %" PRIu32 " %" PRIu32 "\n", geom.x, geom.y, geom.width, geom.height);  
15 	}
16 
17 	s.ok = true;
18@@ -374,7 +375,7 @@ ipc_get_focus(char **arg) {
19 	if (!wm.cur)
20 		return (status){ false, "" };
21 
22-	snprintf(s.msg, MAXSIZE * sizeof(char), "%u\n", wm.cur->id);
23+	snprintf(s.msg, MAXSIZE * sizeof(char), "%" PRIu32 "\n", wm.cur->id);
24 
25 	s.ok = true;
26 	return s;
27@@ -400,13 +401,27 @@ ipc_list_windows(char **arg) {
28 		size_t o = 0;
29 		struct client *c;
30 		wl_list_for_each(c, &wm.clients, link)
31-			o += snprintf(s.msg + o, sizeof(s.msg) - o, "%u\n", c->id);
32+			o += snprintf(s.msg + o, sizeof(s.msg) - o, "%" PRIu32 "\n", c->id);
33 	}
34 
35 	s.ok = true;
36 	return s;
37 }
38 
39+status
40+ipc_get_screen_geometry(char **arg) {
41+	status s = {0};
42+
43+	UNUSED(arg);
44+	if (!wm.scr)
45+		return (status){ false, "" };
46+
47+	snprintf(s.msg, MAXSIZE * sizeof(char), "%" PRIu32 " %" PRIu32 "\n", wm.scr->width, wm.scr->height);
48+
49+	s.ok = true;
50+	return s;
51+}
52+
53 /*********/
54 
55 status