dwm-ifroot-6.6.diff - sites - public wiki contents of suckless.org
(HTM) git clone git://git.suckless.org/sites
(DIR) Log
(DIR) Files
(DIR) Refs
---
dwm-ifroot-6.6.diff (2343B)
---
1 From 7100c2c92ea694d3146517f7913e6b9a8c054788 Mon Sep 17 00:00:00 2001
2 From: Noah Osterholz <osterholznoah@gmail.com>
3 Date: Wed, 8 Oct 2025 16:17:12 +0200
4 Subject: [PATCH] Adding the ifroot function to be able to assign one keymap to
5 two functions depending on wether a client or the root window is focused.
6
7 ---
8 config.def.h | 2 +-
9 dwm.c | 19 +++++++++++++++++++
10 2 files changed, 20 insertions(+), 1 deletion(-)
11
12 diff --git a/config.def.h b/config.def.h
13 index 81c3fc0..afc21ec 100644
14 --- a/config.def.h
15 +++ b/config.def.h
16 @@ -74,7 +74,7 @@ static const Key keys[] = {
17 { MODKEY, XK_l, setmfact, {.f = +0.05} },
18 { MODKEY, XK_Return, zoom, {0} },
19 { MODKEY, XK_Tab, view, {0} },
20 - { MODKEY|ShiftMask, XK_c, killclient, {0} },
21 + { MODKEY|ShiftMask, XK_c, ifroot, {.v = &(TwoFuncPtr){quit, killclient, {0}, {0} } } },
22 { MODKEY, XK_t, setlayout, {.v = &layouts[0]} },
23 { MODKEY, XK_f, setlayout, {.v = &layouts[1]} },
24 { MODKEY, XK_m, setlayout, {.v = &layouts[2]} },
25 diff --git a/dwm.c b/dwm.c
26 index 4f345ee..b144e90 100644
27 --- a/dwm.c
28 +++ b/dwm.c
29 @@ -140,6 +140,13 @@ typedef struct {
30 int monitor;
31 } Rule;
32
33 +typedef struct {
34 + void (*func1)(const Arg *arg);
35 + void (*func2)(const Arg *arg);
36 + const Arg arg1;
37 + const Arg arg2;
38 +} TwoFuncPtr;
39 +
40 /* function declarations */
41 static void applyrules(Client *c);
42 static int applysizehints(Client *c, int *x, int *y, int *w, int *h, int interact);
43 @@ -174,6 +181,7 @@ static long getstate(Window w);
44 static int gettextprop(Window w, Atom atom, char *text, unsigned int size);
45 static void grabbuttons(Client *c, int focused);
46 static void grabkeys(void);
47 +static void ifroot(const Arg *arg);
48 static void incnmaster(const Arg *arg);
49 static void keypress(XEvent *e);
50 static void killclient(const Arg *arg);
51 @@ -976,6 +984,17 @@ grabkeys(void)
52 }
53 }
54
55 +void
56 +ifroot(const Arg *arg)
57 +{
58 + TwoFuncPtr *funcs = (TwoFuncPtr*)arg->v;
59 + if (!selmon->sel) { /*no client -> root window*/
60 + funcs->func1(&(funcs->arg1));
61 + return;
62 + } /*client window*/
63 + funcs->func2(&(funcs->arg2));
64 +}
65 +
66 void
67 incnmaster(const Arg *arg)
68 {
69 --
70 2.51.0
71