dwm-center-6.2.diff (2865B) - raw


      1 From 69f91089d9248fa9695eb925956e255a215171b8 Mon Sep 17 00:00:00 2001
      2 From: bakkeby <bakkeby@gmail.com>
      3 Date: Tue, 7 Apr 2020 12:29:08 +0200
      4 Subject: [PATCH] Adding 6.2 center patch with multi-monitor fix and
      5  auto-centering of floating popup windows
      6 ---
      7  config.def.h |  6 +++---
      8  dwm.c        | 13 +++++++++++--
      9  2 files changed, 14 insertions(+), 5 deletions(-)
     10 
     11 diff --git a/config.def.h b/config.def.h
     12 index 1c0b587..44b46e5 100644
     13 --- a/config.def.h
     14 +++ b/config.def.h
     15 @@ -26,9 +26,9 @@ static const Rule rules[] = {
     16  	 *	WM_CLASS(STRING) = instance, class
     17  	 *	WM_NAME(STRING) = title
     18  	 */
     19 -	/* class      instance    title       tags mask     isfloating   monitor */
     20 -	{ "Gimp",     NULL,       NULL,       0,            1,           -1 },
     21 -	{ "Firefox",  NULL,       NULL,       1 << 8,       0,           -1 },
     22 +	/* class      instance    title       tags mask     iscentered   isfloating   monitor */
     23 +	{ "Gimp",     NULL,       NULL,       0,            0,           1,           -1 },
     24 +	{ "Firefox",  NULL,       NULL,       1 << 8,       0,           0,           -1 },
     25  };
     26  
     27  /* layout(s) */
     28 diff --git a/dwm.c b/dwm.c
     29 index 4465af1..ab33757 100644
     30 --- a/dwm.c
     31 +++ b/dwm.c
     32 @@ -92,7 +92,7 @@ struct Client {
     33  	int basew, baseh, incw, inch, maxw, maxh, minw, minh;
     34  	int bw, oldbw;
     35  	unsigned int tags;
     36 -	int isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen;
     37 +	int isfixed, iscentered, isfloating, isurgent, neverfocus, oldstate, isfullscreen;
     38  	Client *next;
     39  	Client *snext;
     40  	Monitor *mon;
     41 @@ -137,6 +137,7 @@ typedef struct {
     42  	const char *instance;
     43  	const char *title;
     44  	unsigned int tags;
     45 +	int iscentered;
     46  	int isfloating;
     47  	int monitor;
     48  } Rule;
     49 @@ -285,6 +286,7 @@ applyrules(Client *c)
     50  	XClassHint ch = { NULL, NULL };
     51  
     52  	/* rule matching */
     53 +	c->iscentered = 0;
     54  	c->isfloating = 0;
     55  	c->tags = 0;
     56  	XGetClassHint(dpy, c->win, &ch);
     57 @@ -297,6 +299,7 @@ applyrules(Client *c)
     58  		&& (!r->class || strstr(class, r->class))
     59  		&& (!r->instance || strstr(instance, r->instance)))
     60  		{
     61 +			c->iscentered = r->iscentered;
     62  			c->isfloating = r->isfloating;
     63  			c->tags |= r->tags;
     64  			for (m = mons; m && m->num != r->monitor; m = m->next);
     65 @@ -1056,6 +1059,10 @@ manage(Window w, XWindowAttributes *wa)
     66  	updatewindowtype(c);
     67  	updatesizehints(c);
     68  	updatewmhints(c);
     69 +	if (c->iscentered) {
     70 +		c->x = c->mon->mx + (c->mon->mw - WIDTH(c)) / 2;
     71 +		c->y = c->mon->my + (c->mon->mh - HEIGHT(c)) / 2;
     72 +	}
     73  	XSelectInput(dpy, w, EnterWindowMask|FocusChangeMask|PropertyChangeMask|StructureNotifyMask);
     74  	grabbuttons(c, 0);
     75  	if (!c->isfloating)
     76 @@ -2009,8 +2016,10 @@ updatewindowtype(Client *c)
     77  
     78  	if (state == netatom[NetWMFullscreen])
     79  		setfullscreen(c, 1);
     80 -	if (wtype == netatom[NetWMWindowTypeDialog])
     81 +	if (wtype == netatom[NetWMWindowTypeDialog]) {
     82 +		c->iscentered = 1;
     83  		c->isfloating = 1;
     84 +	}
     85  }
     86  
     87  void
     88 -- 
     89 2.17.1
     90