dwm-rulerefresher-6.2.diff (2156B)
1 From 5728e3bc46ef38cfcc0f2cbf04626a28ecc57379 Mon Sep 17 00:00:00 2001 2 From: Lars Niesen <lars.niesen@gmx.de> 3 Date: Thu, 9 Dec 2021 13:40:17 +0100 4 Subject: [PATCH] rulerefresher 5 6 --- 7 dwm.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 8 1 file changed, 50 insertions(+) 9 10 diff --git a/dwm.c b/dwm.c 11 index 4465af1..5f8ba9c 100644 12 --- a/dwm.c 13 +++ b/dwm.c 14 @@ -223,6 +223,7 @@ static int updategeom(void); 15 static void updatenumlockmask(void); 16 static void updatesizehints(Client *c); 17 static void updatestatus(void); 18 +static void updaterules(Client *c); 19 static void updatetitle(Client *c); 20 static void updatewindowtype(Client *c); 21 static void updatewmhints(Client *c); 22 @@ -1237,6 +1238,7 @@ propertynotify(XEvent *e) 23 } 24 if (ev->atom == XA_WM_NAME || ev->atom == netatom[NetWMName]) { 25 updatetitle(c); 26 + updaterules(c); 27 if (c == c->mon->sel) 28 drawbar(c->mon); 29 } 30 @@ -1992,6 +1994,54 @@ updatestatus(void) 31 drawbar(selmon); 32 } 33 34 +void 35 +updaterules(Client *c) 36 +{ 37 + //applyrules(c) 38 + const char *class, *instance; 39 + unsigned int i; 40 + const Rule *r; 41 + Monitor *m; 42 + XClassHint ch = { NULL, NULL }; 43 + 44 + /* rule matching */ 45 + XGetClassHint(dpy, c->win, &ch); 46 + class = ch.res_class ? ch.res_class : broken; 47 + instance = ch.res_name ? ch.res_name : broken; 48 + char found_rule = 0; 49 + 50 + for (i = 0; i < LENGTH(rules); i++) { 51 + r = &rules[i]; 52 + if ((!r->title || strstr(c->name, r->title)) 53 + && (!r->class || strstr(class, r->class)) 54 + && (!r->instance || strstr(instance, r->instance))) 55 + { 56 + c->isfloating = r->isfloating; 57 + 58 + if(!found_rule) 59 + { 60 + c->tags=0; 61 + found_rule=1; 62 + } 63 + c->tags |= r->tags; 64 + for (m = mons; m && m->num != r->monitor; m = m->next); 65 + if (m) 66 + c->mon = m; 67 + } 68 + } 69 + if (ch.res_class) 70 + XFree(ch.res_class); 71 + if (ch.res_name) 72 + XFree(ch.res_name); 73 + c->tags = c->tags & TAGMASK ? c->tags & TAGMASK : c->mon->tagset[c->mon->seltags]; 74 + 75 + // end apply rules 76 + if (c->isfloating) 77 + resize(c, c->x, c->y, 78 + c->w, c->h, 0); 79 + arrange(c->mon); 80 +} 81 + 82 void 83 updatetitle(Client *c) 84 { 85 -- 86 2.34.1 87