commit c33dfe0
0uppy
·
2026-03-15 14:52:54 +0000 UTC
parent 10a9cf4
slgro 1.1 - the cleanup update Removed unused code that wasn't used for slgro
1 files changed,
+238,
-252
+238,
-252
1@@ -1,4 +1,3 @@
2-#include <asm-generic/errno.h>
3 #include <signal.h>
4 #include <stdio.h>
5 #include <stdlib.h>
6@@ -26,450 +25,437 @@ static void setup_binds(void);
7 static void sync_window_visibility(void);
8
9 #define WHEN_PRESSED(state) \
10- do { if ((state) != WL_KEYBOARD_KEY_STATE_PRESSED) return; } while (0)
11+do { if ((state) != WL_KEYBOARD_KEY_STATE_PRESSED) return; } while (0)
12
13 #define BIND_EVENT(time, value, state) \
14- (void)(time); (void)(value); \
15- WHEN_PRESSED(state);
16+(void)(time); (void)(value); \
17+WHEN_PRESSED(state);
18
19 #define BIND_ACTION(data, time, value, state) \
20- BIND_EVENT(time, value, state); \
21- if (!wm.sel_client) return; \
22- union arg* a = (data)
23+BIND_EVENT(time, value, state); \
24+if (!wm.sel_client) return; \
25+union arg* a = (data)
26
27 /* read geometry from client window; returns true if successful */
28 static bool get_geometry(struct client *c, struct swc_rectangle *geom)
29 {
30- if (!c || !c->win)
31- return false;
32+if (!c || !c->win)
33+return false;
34
35- return swc_window_get_geometry(c->win, geom);
36+return swc_window_get_geometry(c->win, geom);
37 }
38
39 /* adjust geometry fields and write back */
40 static void adjust_geom(struct client *c, int dx, int dy, int dw, int dh)
41 {
42- struct swc_rectangle geom;
43- if (!get_geometry(c, &geom)) return;
44+struct swc_rectangle geom;
45+if (!get_geometry(c, &geom)) return;
46
47- geom.x += dx;
48- geom.y += dy;
49+geom.x += dx;
50+geom.y += dy;
51
52- int new_w = (int)geom.width + dw;
53- int new_h = (int)geom.height + dh;
54- geom.width = (new_w < 1) ? 1 : (uint32_t)new_w;
55- geom.height = (new_h < 1) ? 1 : (uint32_t)new_h;
56+int new_w = (int)geom.width + dw;
57+int new_h = (int)geom.height + dh;
58+geom.width = (new_w < 1) ? 1 : (uint32_t)new_w;
59+geom.height = (new_h < 1) ? 1 : (uint32_t)new_h;
60
61- swc_window_set_geometry(c->win, &geom);
62+swc_window_set_geometry(c->win, &geom);
63 }
64
65 struct wm wm;
66 const struct swc_manager manager = {
67- .new_screen = new_screen, .new_window = new_window, .new_device = new_device,
68+.new_screen = new_screen, .new_window = new_window, .new_device = new_devic
69+e,
70 };
71 struct swc_window_handler window_handler = {
72- .destroy = on_win_destroy, .entered = on_win_entered,
73+.destroy = on_win_destroy, .entered = on_win_entered,
74 };
75 struct swc_screen_handler screen_handler = {
76- .destroy = on_screen_destroy,
77+.destroy = on_screen_destroy,
78 };
79
80 static struct client* get_focus_candidate(struct screen* s) {
81- struct client* c = first_client(s);
82- if (!c && s) c = first_client(NULL);
83- return c;
84+struct client* c = first_client(s);
85+if (!c && s) c = first_client(NULL);
86+return c;
87 }
88
89 static void focus(struct client* c)
90 {
91- if (wm.sel_client && wm.sel_client != c) {
92- swc_window_set_border(wm.sel_client->win, cfg.border_col_normal, cfg.border_width, 0, 0);
93- }
94- if (c) {
95- swc_window_set_border(c->win, cfg.border_col_active, cfg.border_width, 0, 0);
96- }
97+if (wm.sel_client && wm.sel_client != c) {
98+swc_window_set_border(wm.sel_client->win, cfg.border_col_normal, cf
99+g.border_width, 0, 0);
100+}
101+if (c) {
102+swc_window_set_border(c->win, cfg.border_col_active, cfg.border_wid
103+th, 0, 0);
104+}
105
106- swc_window_focus(c ? c->win : NULL);
107- wm.sel_client = c;
108+swc_window_focus(c ? c->win : NULL);
109+wm.sel_client = c;
110 }
111
112 static struct client* first_client(struct screen* s)
113 {
114- struct client* c;
115+struct client* c;
116
117- wl_list_for_each(c, &wm.clients, link) {
118- if (is_ws_client(c, s))
119- return c;
120- }
121+wl_list_for_each(c, &wm.clients, link) {
122+if (is_ws_client(c, s))
123+return c;
124+}
125
126- return NULL;
127+return NULL;
128 }
129
130 static bool is_ws_client(const struct client* c, const struct screen* s)
131 {
132- return c && c->ws == wm.ws && (!s || c->scr == s);
133+return c && c->ws == wm.ws && (!s || c->scr == s);
134 }
135
136 static void on_screen_destroy(void* data)
137 {
138- struct screen* s = data;
139+struct screen* s = data;
140
141- if (!s)
142- return;
143+if (!s)
144+return;
145
146- wl_list_remove(&s->link);
147+wl_list_remove(&s->link);
148
149- if (wm.sel_screen == s) {
150- wm.sel_screen = wl_list_empty(&wm.screens)
151- ? NULL
152- : wl_container_of(wm.screens.next, wm.sel_screen, link);
153- }
154+if (wm.sel_screen == s) {
155+wm.sel_screen = wl_list_empty(&wm.screens)
156+? NULL
157+: wl_container_of(wm.screens.next, wm.sel_screen, link);
158+}
159
160- free(s);
161+free(s);
162 }
163
164 static void on_win_destroy(void* data)
165 {
166- struct client* c = data;
167- if (!c) return;
168-
169- if (wm.grab.active && wm.grab.c == c)
170- wm.grab.active = false;
171+struct client* c = data;
172+if (!c) return;
173
174- if (wm.sel_client == c)
175- wm.sel_client = NULL;
176+if (wm.sel_client == c)
177+wm.sel_client = NULL;
178
179- wl_list_remove(&c->link);
180- free(c);
181+wl_list_remove(&c->link);
182+free(c);
183
184- focus(get_focus_candidate(wm.sel_screen));
185+focus(get_focus_candidate(wm.sel_screen));
186 }
187
188 static void on_win_entered(void* data)
189 {
190- if (wm.grab.active)
191- return;
192
193- struct client* c = data;
194- if (!is_ws_client(c, NULL))
195- return;
196+struct client* c = data;
197+if (!is_ws_client(c, NULL))
198+return;
199
200- focus(c);
201+focus(c);
202 }
203
204 static void setup(void)
205 {
206- /* display */
207- wm.dpy = wl_display_create();
208- if (!wm.dpy)
209- die(EXIT_FAILURE, "wl_display_create failed");
210+/* display */
211+wm.dpy = wl_display_create();
212+if (!wm.dpy)
213+die(EXIT_FAILURE, "wl_display_create failed");
214
215- /* variables */
216- wl_list_init(&wm.screens);
217- wl_list_init(&wm.clients);
218+/* variables */
219+wl_list_init(&wm.screens);
220+wl_list_init(&wm.clients);
221
222- wm.sel_client = NULL;
223- wm.sel_screen = NULL;
224- wm.grab.active = false;
225- wm.grab.resize = false;
226- wm.grab.c = NULL;
227- wm.ws = 1;
228+wm.sel_client = NULL;
229+wm.sel_screen = NULL;
230+wm.ws = 1;
231
232- /* event loop */
233- wm.ev_loop = wl_display_get_event_loop(wm.dpy);
234- if (!swc_initialize(wm.dpy, wm.ev_loop, &manager))
235- die(EXIT_FAILURE, "swc_initialize failed\n");
236+/* event loop */
237+wm.ev_loop = wl_display_get_event_loop(wm.dpy);
238+if (!swc_initialize(wm.dpy, wm.ev_loop, &manager))
239+die(EXIT_FAILURE, "swc_initialize failed\n");
240
241- setup_binds();
242+setup_binds();
243
244- /* display socket */
245- const char* sock;
246- sock = wl_display_add_socket_auto(wm.dpy);
247- if (!sock)
248- die(EXIT_FAILURE, "wl_display_add_socket_auto failed\n");
249+/* display socket */
250+const char* sock;
251+sock = wl_display_add_socket_auto(wm.dpy);
252+if (!sock)
253+die(EXIT_FAILURE, "wl_display_add_socket_auto failed\n");
254
255- setenv("WAYLAND_DISPLAY", sock, 1);
256- _log(stderr, "WAYLAND_DISPLAY=%s\n", sock);
257+setenv("WAYLAND_DISPLAY", sock, 1);
258+_log(stderr, "WAYLAND_DISPLAY=%s\n", sock);
259
260- /* signals */
261- signal(SIGINT, sig_handler);
262- signal(SIGTERM, sig_handler);
263- signal(SIGQUIT, sig_handler);
264+/* signals */
265+signal(SIGINT, sig_handler);
266+signal(SIGTERM, sig_handler);
267+signal(SIGQUIT, sig_handler);
268 }
269
270 static void setup_binds(void)
271 {
272- for (size_t i = 0; i < LENGTH(binds); i++) {
273- const struct bind* b = &binds[i];
274- swc_add_binding(b->type, b->mods, b->ksym, b->fn, (void*)&b->arg);
275- }
276+for (size_t i = 0; i < LENGTH(binds); i++) {
277+const struct bind* b = &binds[i];
278+swc_add_binding(b->type, b->mods, b->ksym, b->fn, (void*)&b->arg);
279+}
280 }
281
282 static void sync_window_visibility(void)
283 {
284- struct client* c;
285+struct client* c;
286
287- wl_list_for_each(c, &wm.clients, link) {
288- if (c->ws == wm.ws)
289- swc_window_show(c->win);
290- else
291- swc_window_hide(c->win);
292- }
293+wl_list_for_each(c, &wm.clients, link) {
294+if (c->ws == wm.ws)
295+swc_window_show(c->win);
296+else
297+swc_window_hide(c->win);
298+}
299 }
300-
301
302 /* focus next/prev helpers */
303 static void focus_walk_direction(bool forward)
304 {
305- if (wl_list_empty(&wm.clients)) return;
306+if (wl_list_empty(&wm.clients)) return;
307
308- if (!is_ws_client(wm.sel_client, wm.sel_screen)) {
309- focus(get_focus_candidate(wm.sel_screen));
310- return;
311- }
312+if (!is_ws_client(wm.sel_client, wm.sel_screen)) {
313+focus(get_focus_candidate(wm.sel_screen));
314+return;
315+}
316
317- struct wl_list *start =
318- forward ? wm.sel_client->link.next
319- : wm.sel_client->link.prev;
320+struct wl_list *start =
321+forward ? wm.sel_client->link.next
322+: wm.sel_client->link.prev;
323
324- struct wl_list *it = start;
325- struct client *c = NULL;
326+struct wl_list *it = start;
327+struct client *c = NULL;
328
329- do {
330- if (it == &wm.clients)
331- it = forward ? wm.clients.next : wm.clients.prev;
332+do {
333+if (it == &wm.clients)
334+it = forward ? wm.clients.next : wm.clients.prev;
335
336- if (it == &wm.clients) break;
337+if (it == &wm.clients) break;
338
339- c = wl_container_of(it, c, link);
340- if (is_ws_client(c, wm.sel_screen)) {
341- focus(c);
342- return;
343- }
344+c = wl_container_of(it, c, link);
345+if (is_ws_client(c, wm.sel_screen)) {
346+focus(c);
347+return;
348+}
349
350- it = forward ? it->next : it->prev;
351- } while (it != start);
352+it = forward ? it->next : it->prev;
353+} while (it != start);
354
355- focus(get_focus_candidate(wm.sel_screen));
356+focus(get_focus_candidate(wm.sel_screen));
357 }
358
359 void focus_next(void* data, uint32_t time, uint32_t value, uint32_t state)
360 {
361- (void)data; BIND_EVENT(time, value, state);
362- focus_walk_direction(true);
363-}
364-
365-void focus_prev(void* data, uint32_t time, uint32_t value, uint32_t state)
366-{
367- (void)data; BIND_EVENT(time, value, state);
368- focus_walk_direction(false);
369+(void)data; BIND_EVENT(time, value, state);
370+focus_walk_direction(true);
371 }
372
373 void kill_sel(void* data, uint32_t time, uint32_t value, uint32_t state)
374 {
375- (void)data; BIND_EVENT(time, value, state);
376+(void)data; BIND_EVENT(time, value, state);
377
378- if (wm.sel_client)
379- swc_window_close(wm.sel_client->win);
380+if (wm.sel_client)
381+swc_window_close(wm.sel_client->win);
382 }
383
384 void fullscreen(void* data, uint32_t time, uint32_t value, uint32_t state)
385 {
386- (void)data; BIND_EVENT(time, value, state);
387- if (!wm.sel_client) return;
388+(void)data; BIND_EVENT(time, value, state);
389+if (!wm.sel_client) return;
390
391- struct client *c = wm.sel_client;
392- struct swc_rectangle geom;
393+struct client *c = wm.sel_client;
394+struct swc_rectangle geom;
395
396- if (c->fullscreen) {
397- c->fullscreen = false;
398- swc_window_set_stacked(c->win);
399+if (c->fullscreen) {
400+c->fullscreen = false;
401+swc_window_set_stacked(c->win);
402
403- if (c->w > 0 && c->h > 0) {
404- geom = (struct swc_rectangle){ c->x, c->y, c->w, c->h };
405- swc_window_set_geometry(c->win, &geom);
406- }
407- return;
408- }
409+if (c->w > 0 && c->h > 0) {
410+geom = (struct swc_rectangle){ c->x, c->y, c->w, c->h };
411+swc_window_set_geometry(c->win, &geom);
412+}
413+return;
414+}
415
416- if (!c->scr || !c->scr->scr) return;
417+if (!c->scr || !c->scr->scr) return;
418
419- if (get_geometry(c, &geom)) {
420- c->x = geom.x;
421- c->y = geom.y;
422- c->w = geom.width;
423- c->h = geom.height;
424- }
425+if (get_geometry(c, &geom)) {
426+c->x = geom.x;
427+c->y = geom.y;
428+c->w = geom.width;
429+c->h = geom.height;
430+}
431
432- c->fullscreen = true;
433- swc_window_set_fullscreen(c->win, c->scr->scr);
434+c->fullscreen = true;
435+swc_window_set_fullscreen(c->win, c->scr->scr);
436 }
437
438 void kb_move_x(void* data, uint32_t time, uint32_t value, uint32_t state) {
439- BIND_ACTION(data, time, value, state);
440- adjust_geom(wm.sel_client, a->i, 0, 0, 0);
441+BIND_ACTION(data, time, value, state);
442+adjust_geom(wm.sel_client, a->i, 0, 0, 0);
443 }
444
445 void kb_move_y(void* data, uint32_t time, uint32_t value, uint32_t state) {
446- BIND_ACTION(data, time, value, state);
447- adjust_geom(wm.sel_client, 0, a->i, 0, 0);
448+BIND_ACTION(data, time, value, state);
449+adjust_geom(wm.sel_client, 0, a->i, 0, 0);
450 }
451
452 void kb_resize_width(void* data, uint32_t time, uint32_t value, uint32_t state) {
453- BIND_ACTION(data, time, value, state);
454- adjust_geom(wm.sel_client, 0, 0, a->i, 0);
455+BIND_ACTION(data, time, value, state);
456+adjust_geom(wm.sel_client, 0, 0, a->i, 0);
457 }
458
459 void kb_resize_height(void* data, uint32_t time, uint32_t value, uint32_t state) {
460- BIND_ACTION(data, time, value, state);
461- adjust_geom(wm.sel_client, 0, 0, 0, a->i);
462+BIND_ACTION(data, time, value, state);
463+adjust_geom(wm.sel_client, 0, 0, 0, a->i);
464 }
465
466 static void apply_grid_geometry(struct client *c, float x_frac, float w_frac) {
467- if (!c || !c->scr || !c->scr->scr) return;
468+if (!c || !c->scr || !c->scr->scr) return;
469
470- struct swc_rectangle geom;
471- struct swc_rectangle *ug = &c->scr->scr->usable_geometry;
472+struct swc_rectangle geom;
473+struct swc_rectangle *ug = &c->scr->scr->usable_geometry;
474
475- geom.x = ug->x + (ug->width * x_frac);
476- geom.y = ug->y;
477- geom.width = ug->width * w_frac;
478- geom.height = ug->height;
479+geom.x = ug->x + (ug->width * x_frac);
480+geom.y = ug->y;
481+geom.width = ug->width * w_frac;
482+geom.height = ug->height;
483
484- swc_window_set_geometry(c->win, &geom);
485+swc_window_set_geometry(c->win, &geom);
486 }
487
488 void center_window(void* data, uint32_t time, uint32_t value, uint32_t state) {
489- BIND_ACTION(data, time, value, state);
490- if (!wm.sel_client->scr || !wm.sel_client->scr->scr) return;
491+(void)data; BIND_EVENT(time, value, state);
492+if (!wm.sel_client->scr || !wm.sel_client->scr->scr) return;
493
494- struct swc_rectangle geom;
495- if (!get_geometry(wm.sel_client, &geom)) return;
496+struct swc_rectangle geom;
497+if (!get_geometry(wm.sel_client, &geom)) return;
498
499- struct swc_rectangle *ug = &wm.sel_client->scr->scr->usable_geometry;
500- geom.x = ug->x + (ug->width - geom.width) / 2;
501- geom.y = ug->y + (ug->height - geom.height) / 2;
502+struct swc_rectangle *ug = &wm.sel_client->scr->scr->usable_geometry;
503+geom.x = ug->x + (ug->width - geom.width) / 2;
504+geom.y = ug->y + (ug->height - geom.height) / 2;
505
506- swc_window_set_geometry(wm.sel_client->win, &geom);
507+swc_window_set_geometry(wm.sel_client->win, &geom);
508 }
509
510 void snap_left_half(void* data, uint32_t time, uint32_t value, uint32_t state) {
511- BIND_ACTION(data, time, value, state);
512- apply_grid_geometry(wm.sel_client, 0.0f, 0.5f);
513+(void)data; BIND_EVENT(time, value, state);
514+apply_grid_geometry(wm.sel_client, 0.0f, 0.5f);
515 }
516
517 void snap_right_half(void* data, uint32_t time, uint32_t value, uint32_t state) {
518- BIND_ACTION(data, time, value, state);
519- apply_grid_geometry(wm.sel_client, 0.5f, 0.5f);
520+(void)data; BIND_EVENT(time, value, state);
521+apply_grid_geometry(wm.sel_client, 0.5f, 0.5f);
522 }
523
524 void new_screen(struct swc_screen* scr)
525 {
526- struct screen* s = calloc(1, sizeof(*s));
527- if (!s) die(EXIT_FAILURE, "new screen calloc failed");
528+struct screen* s = calloc(1, sizeof(*s));
529+if (!s) die(EXIT_FAILURE, "new screen calloc failed");
530
531- s->scr = scr;
532- wl_list_insert(&wm.screens, &s->link);
533+s->scr = scr;
534+wl_list_insert(&wm.screens, &s->link);
535
536- if (!wm.sel_screen) wm.sel_screen = s;
537+if (!wm.sel_screen) wm.sel_screen = s;
538
539- swc_screen_set_handler(scr, &screen_handler, s);
540- _log(stderr, "new_screen=%p\n", (void*)scr);
541+swc_screen_set_handler(scr, &screen_handler, s);
542+_log(stderr, "new_screen=%p\n", (void*)scr);
543 }
544
545 void new_window(struct swc_window* win)
546 {
547- struct client* c = calloc(1, sizeof(*c));
548- if (!c) die(EXIT_FAILURE, "calloc client failed");
549+struct client* c = calloc(1, sizeof(*c));
550+if (!c) die(EXIT_FAILURE, "calloc client failed");
551
552- win->motion_throttle_ms = 1000 / cfg.motion_throttle_hz;
553- win->min_width = 1;
554- win->min_height = 1;
555+win->motion_throttle_ms = 1000 / cfg.motion_throttle_hz;
556+win->min_width = 1;
557+win->min_height = 1;
558
559- c->win = win;
560- c->scr = wm.sel_screen;
561- c->floating = true;
562- c->ws = wm.ws;
563+c->win = win;
564+c->scr = wm.sel_screen;
565+c->ws = wm.ws;
566
567- wl_list_insert(&wm.clients, &c->link);
568- swc_window_set_handler(win, &window_handler, c);
569- swc_window_set_stacked(win);
570+wl_list_insert(&wm.clients, &c->link);
571+swc_window_set_handler(win, &window_handler, c);
572+swc_window_set_stacked(win);
573
574- int32_t cx = 0, cy = 0;
575- if (swc_cursor_position(&cx, &cy))
576- swc_window_set_position(win, cx / 256, cy / 256);
577+int32_t cx = 0, cy = 0;
578+if (swc_cursor_position(&cx, &cy))
579+swc_window_set_position(win, cx / 256, cy / 256);
580
581- swc_window_show(win);
582- focus(c);
583+swc_window_show(win);
584+focus(c);
585
586- _log(stderr, "new_window=%p\n", (void*)win);
587+_log(stderr, "new_window=%p\n", (void*)win);
588 }
589
590 void new_device(struct libinput_device* dev)
591 {
592- (void)dev;
593+(void)dev;
594 }
595
596 void quit(void* data, uint32_t time, uint32_t value, uint32_t state)
597 {
598- (void)data; BIND_EVENT(time, value, state);
599- wl_display_terminate(wm.dpy);
600+(void)data; BIND_EVENT(time, value, state);
601+wl_display_terminate(wm.dpy);
602 }
603
604 void spawn(void* data, uint32_t time, uint32_t value, uint32_t state)
605 {
606- BIND_EVENT(time, value, state);
607+BIND_EVENT(time, value, state);
608
609- pid_t pid = fork();
610- if (pid == 0) {
611- setsid();
612- if (fork() == 0) {
613- union arg* a = data;
614- char* const* cmd = (char* const*)a->v;
615+pid_t pid = fork();
616+if (pid == 0) {
617+setsid();
618+if (fork() == 0) {
619+union arg* a = data;
620+char* const* cmd = (char* const*)a->v;
621
622- execvp(cmd[0], cmd);
623- _exit(127);
624- }
625- _exit(0);
626- } else if (pid > 0) {
627- waitpid(pid, NULL, 0);
628- }
629+execvp(cmd[0], cmd);
630+_exit(127);
631+}
632+_exit(0);
633+} else if (pid > 0) {
634+waitpid(pid, NULL, 0);
635+}
636 }
637
638 void workspace_goto(void* data, uint32_t time, uint32_t value, uint32_t state)
639 {
640- union arg* a = data;
641- BIND_EVENT(time, value, state);
642+union arg* a = data;
643+BIND_EVENT(time, value, state);
644
645- if (a->ui < 1 || a->ui > 9 || a->ui == wm.ws) return;
646+if (a->ui < 1 || a->ui > 9 || a->ui == wm.ws) return;
647
648- wm.ws = a->ui;
649- sync_window_visibility();
650+wm.ws = a->ui;
651+sync_window_visibility();
652
653- focus(get_focus_candidate(wm.sel_screen));
654+focus(get_focus_candidate(wm.sel_screen));
655 }
656
657 void workspace_moveto(void* data, uint32_t time, uint32_t value, uint32_t state)
658 {
659- BIND_ACTION(data, time, value, state);
660- if (a->ui < 1 || a->ui > 9 || wm.sel_client->ws == a->ui) return;
661+BIND_ACTION(data, time, value, state);
662+if (a->ui < 1 || a->ui > 9 || wm.sel_client->ws == a->ui) return;
663
664- struct client* c = wm.sel_client;
665- c->ws = a->ui;
666+struct client* c = wm.sel_client;
667+c->ws = a->ui;
668
669- if (c->ws == wm.ws)
670- swc_window_show(c->win);
671- else
672- swc_window_hide(c->win);
673+if (c->ws == wm.ws)
674+swc_window_show(c->win);
675+else
676+swc_window_hide(c->win);
677
678- focus(get_focus_candidate(wm.sel_screen));
679+focus(get_focus_candidate(wm.sel_screen));
680 }
681
682 int main(void)
683 {
684- setup();
685- wl_display_run(wm.dpy);
686- swc_finalize();
687- wl_display_destroy(wm.dpy);
688- return EXIT_SUCCESS;
689+setup();
690+wl_display_run(wm.dpy);
691+swc_finalize();
692+wl_display_destroy(wm.dpy);
693+return EXIT_SUCCESS;
694 }