dwm-sizehints-ruled-6.2.diff - sites - public wiki contents of suckless.org
HTML git clone git://git.suckless.org/sites
DIR Log
DIR Files
DIR Refs
---
dwm-sizehints-ruled-6.2.diff (2907B)
---
1 From c605c7f4c3f421ef5b6f12031b07abe713cd8183 Mon Sep 17 00:00:00 2001
2 From: MLquest8 <miskuzius@gmail.com>
3 Date: Sun, 14 Jun 2020 13:06:31 +0400
4 Subject: [PATCH] resizehints-ruled. Modified to properly read the rules and
5 apply as needed. Behavior for clients that aren't found in rules struct is
6 remains the same.
7
8 ---
9 config.def.h | 2 ++
10 dwm.c | 34 +++++++++++++++++++++++++++++++++-
11 2 files changed, 35 insertions(+), 1 deletion(-)
12
13 diff --git a/config.def.h b/config.def.h
14 index 1c0b587..1d55286 100644
15 --- a/config.def.h
16 +++ b/config.def.h
17 @@ -29,6 +29,8 @@ static const Rule rules[] = {
18 /* class instance title tags mask isfloating monitor */
19 { "Gimp", NULL, NULL, 0, 1, -1 },
20 { "Firefox", NULL, NULL, 1 << 8, 0, -1 },
21 + { "st", NULL, NULL, 0, 0, -1 },
22 + { "St", NULL, NULL, 0, 0, -1 }, /* if Xresources[st] is patched in */
23 };
24
25 /* layout(s) */
26 diff --git a/dwm.c b/dwm.c
27 index 9fd0286..f0f569e 100644
28 --- a/dwm.c
29 +++ b/dwm.c
30 @@ -149,6 +149,7 @@ static void arrangemon(Monitor *m);
31 static void attach(Client *c);
32 static void attachstack(Client *c);
33 static void buttonpress(XEvent *e);
34 +static void checkfloatingrules(Client *c);
35 static void checkotherwm(void);
36 static void cleanup(void);
37 static void cleanupmon(Monitor *mon);
38 @@ -456,6 +457,31 @@ buttonpress(XEvent *e)
39 buttons[i].func(click == ClkTagBar && buttons[i].arg.i == 0 ? &arg : &buttons[i].arg);
40 }
41
42 +void
43 +checkfloatingrules(Client *c)
44 +{
45 + const char *class, *instance;
46 + unsigned int i;
47 + const Rule *r;
48 + XClassHint ch = { NULL, NULL };
49 +
50 + XGetClassHint(dpy, c->win, &ch);
51 + class = ch.res_class ? ch.res_class : broken;
52 + instance = ch.res_name ? ch.res_name : broken;
53 +
54 + for (i = 0; i < LENGTH(rules); i++) {
55 + r = &rules[i];
56 + if ((!r->title || strstr(c->name, r->title))
57 + && (!r->class || strstr(class, r->class))
58 + && (!r->instance || strstr(instance, r->instance)))
59 + c->isfloating = r->isfloating;
60 + }
61 + if (ch.res_class)
62 + XFree(ch.res_class);
63 + if (ch.res_name)
64 + XFree(ch.res_name);
65 +}
66 +
67 void
68 checkotherwm(void)
69 {
70 @@ -1952,7 +1978,7 @@ updatesizehints(Client *c)
71
72 if (!XGetWMNormalHints(dpy, c->win, &size, &msize))
73 /* size is uninitialized, ensure that size.flags aren't used */
74 - size.flags = PSize;
75 + size.flags = 0;
76 if (size.flags & PBaseSize) {
77 c->basew = size.base_width;
78 c->baseh = size.base_height;
79 @@ -1984,6 +2010,12 @@ updatesizehints(Client *c)
80 c->maxa = (float)size.max_aspect.x / size.max_aspect.y;
81 } else
82 c->maxa = c->mina = 0.0;
83 + if(size.flags & PSize) {
84 + c->basew = size.base_width;
85 + c->baseh = size.base_height;
86 + c->isfloating = 1;
87 + }
88 + checkfloatingrules(c);
89 c->isfixed = (c->maxw && c->maxh && c->maxw == c->minw && c->maxh == c->minh);
90 }
91
92 --
93 2.26.2
94