dwm-canfocusfloating-20210724-b914109.diff - sites - public wiki contents of su… | |
git clone git://git.suckless.org/sites | |
Log | |
Files | |
Refs | |
--- | |
dwm-canfocusfloating-20210724-b914109.diff (4256B) | |
--- | |
1 From b9141091994ba657af534453ab913663a8258f9a Mon Sep 17 00:00:00 2001 | |
2 From: oxinosg <[email protected]> | |
3 Date: Sat, 24 Jul 2021 23:31:30 +0200 | |
4 Subject: [PATCH] [dwm][cantogglefloating] patch that allows disabling fo… | |
5 floating clients | |
6 | |
7 --- | |
8 config.def.h | 1 + | |
9 dwm.c | 67 ++++++++++++++++++++++++++++++++++++++++++++++++---- | |
10 2 files changed, 63 insertions(+), 5 deletions(-) | |
11 | |
12 diff --git a/config.def.h b/config.def.h | |
13 index 1c0b587..005fb5d 100644 | |
14 --- a/config.def.h | |
15 +++ b/config.def.h | |
16 @@ -70,6 +70,7 @@ static Key keys[] = { | |
17 { MODKEY, XK_d, incnmaster, {.i … | |
18 { MODKEY, XK_h, setmfact, {.f … | |
19 { MODKEY, XK_l, setmfact, {.f … | |
20 + { MODKEY, XK_s, togglecanfocusfloating, … | |
21 { MODKEY, XK_Return, zoom, {0} … | |
22 { MODKEY, XK_Tab, view, {0} … | |
23 { MODKEY|ShiftMask, XK_c, killclient, {0} … | |
24 diff --git a/dwm.c b/dwm.c | |
25 index 4465af1..ae0a0ea 100644 | |
26 --- a/dwm.c | |
27 +++ b/dwm.c | |
28 @@ -92,7 +92,7 @@ struct Client { | |
29 int basew, baseh, incw, inch, maxw, maxh, minw, minh; | |
30 int bw, oldbw; | |
31 unsigned int tags; | |
32 - int isfixed, isfloating, isurgent, neverfocus, oldstate, isfull… | |
33 + int isfixed, isfloating, isurgent, neverfocus, oldstate, isfull… | |
34 Client *next; | |
35 Client *snext; | |
36 Monitor *mon; | |
37 @@ -191,6 +191,7 @@ static Monitor *recttomon(int x, int y, int w, int h… | |
38 static void resize(Client *c, int x, int y, int w, int h, int interact); | |
39 static void resizeclient(Client *c, int x, int y, int w, int h); | |
40 static void resizemouse(const Arg *arg); | |
41 +static void resetcanfocusfloating(); | |
42 static void restack(Monitor *m); | |
43 static void run(void); | |
44 static void scan(void); | |
45 @@ -211,6 +212,7 @@ static void tagmon(const Arg *arg); | |
46 static void tile(Monitor *); | |
47 static void togglebar(const Arg *arg); | |
48 static void togglefloating(const Arg *arg); | |
49 +static void togglecanfocusfloating(const Arg *arg); | |
50 static void toggletag(const Arg *arg); | |
51 static void toggleview(const Arg *arg); | |
52 static void unfocus(Client *c, int setfocus); | |
53 @@ -788,6 +790,8 @@ focus(Client *c) | |
54 if (selmon->sel && selmon->sel != c) | |
55 unfocus(selmon->sel, 0); | |
56 if (c) { | |
57 + if (c->cantfocus) | |
58 + return; | |
59 if (c->mon != selmon) | |
60 selmon = c->mon; | |
61 if (c->isurgent) | |
62 @@ -837,16 +841,16 @@ focusstack(const Arg *arg) | |
63 if (!selmon->sel) | |
64 return; | |
65 if (arg->i > 0) { | |
66 - for (c = selmon->sel->next; c && !ISVISIBLE(c); c = c->… | |
67 + for (c = selmon->sel->next; c && (!ISVISIBLE(c) || c->c… | |
68 if (!c) | |
69 - for (c = selmon->clients; c && !ISVISIBLE(c); c… | |
70 + for (c = selmon->clients; c && (!ISVISIBLE(c) |… | |
71 } else { | |
72 for (i = selmon->clients; i != selmon->sel; i = i->next) | |
73 - if (ISVISIBLE(i)) | |
74 + if (ISVISIBLE(i) && !i->cantfocus) | |
75 c = i; | |
76 if (!c) | |
77 for (; i; i = i->next) | |
78 - if (ISVISIBLE(i)) | |
79 + if (ISVISIBLE(i) && !i->cantfocus) | |
80 c = i; | |
81 } | |
82 if (c) { | |
83 @@ -1716,6 +1720,59 @@ togglefloating(const Arg *arg) | |
84 if (selmon->sel->isfloating) | |
85 resize(selmon->sel, selmon->sel->x, selmon->sel->y, | |
86 selmon->sel->w, selmon->sel->h, 0); | |
87 + | |
88 + resetcanfocusfloating(); | |
89 + | |
90 + arrange(selmon); | |
91 +} | |
92 + | |
93 +void | |
94 +resetcanfocusfloating() | |
95 +{ | |
96 + unsigned int i, n; | |
97 + Client *c; | |
98 + | |
99 + for (n = 0, c = selmon->clients; c; c = c->next, n++); | |
100 + if (n == 0) | |
101 + return; | |
102 + | |
103 + for (i = 0, c = selmon->clients; c; c = c->next, i++) | |
104 + if (c->isfloating) | |
105 + c->cantfocus = 0; | |
106 + | |
107 + arrange(selmon); | |
108 +} | |
109 + | |
110 +void | |
111 +togglecanfocusfloating(const Arg *arg) | |
112 +{ | |
113 + unsigned int n; | |
114 + Client *c, *cf = NULL; | |
115 + | |
116 + if (!selmon->sel) | |
117 + return; | |
118 + | |
119 + for (c = selmon->clients; c; c = c->next) | |
120 + if (c->cantfocus == 1) { | |
121 + cf = c; | |
122 + } | |
123 + | |
124 + if (cf) { | |
125 + resetcanfocusfloating(); | |
126 + focus(cf); | |
127 + } else { | |
128 + for (n = 0, c = selmon->clients; c; c = c->next) | |
129 + if (c->isfloating) | |
130 + c->cantfocus = !c->cantfocus; | |
131 + else | |
132 + n++; | |
133 + | |
134 + if (n && selmon->sel->isfloating) { | |
135 + c = nexttiled(selmon->clients); | |
136 + focus(c); | |
137 + } | |
138 + } | |
139 + | |
140 arrange(selmon); | |
141 } | |
142 | |
143 -- | |
144 2.27.0 | |
145 |