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
client.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