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