sites

public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log | Files | Refs

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