sites

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

multimon-4-added-statusall-toggle-replacing-need-for-patch.diff (6165B)


      1 From d318ffdc7ab7a365e548776a1d8ed5ccbd67cd42 Mon Sep 17 00:00:00 2001
      2 From: "Gary B. Genett" <me@garybgenett.net>
      3 Date: Mon, 24 Mar 2014 14:44:04 -0700
      4 Subject: added statusall toggle, replacing need for patch
      5 MIME-Version: 1.0
      6 Content-Type: multipart/mixed; boundary="------------1.8.3.2"
      7 
      8 This is a multi-part message in MIME format.
      9 --------------1.8.3.2
     10 Content-Type: text/plain; charset=UTF-8; format=fixed
     11 Content-Transfer-Encoding: 8bit
     12 
     13 ---
     14  config.def.h |  1 +
     15  dwm.c        | 12 ++++++------
     16  2 files changed, 7 insertions(+), 6 deletions(-)
     17 
     18 
     19 --------------1.8.3.2
     20 Content-Type: text/x-patch; name="0004-added-statusall-toggle-replacing-need-for-patch.patch"
     21 Content-Transfer-Encoding: 8bit
     22 Content-Disposition: attachment; filename="0004-added-statusall-toggle-replacing-need-for-patch.patch"
     23 
     24 diff --git a/config.def.h b/config.def.h
     25 index 92b1a461604c81c061f60780dc189a83dd697562..b4759a569dc23754dd240da51dd12607ae93e0f3 100644
     26 --- a/config.def.h
     27 +++ b/config.def.h
     28 @@ -24,20 +24,21 @@ static const Rule rules[] = {
     29  	/* class      instance    title       tags mask     isfloating   monitor */
     30  	{ "Gimp",     NULL,       NULL,       0,            True,        -1 },
     31  	{ "Firefox",  NULL,       NULL,       1 << 8,       False,       -1 },
     32  };
     33  
     34  /* layout(s) */
     35  static const float mfact      = 0.55; /* factor of master area size [0.05..0.95] */
     36  static const int nmaster      = 1;    /* number of clients in master area */
     37  static const int nviews       = 1;    /* number of tags highlighted by default */
     38  static const Bool resizehints = True; /* True means respect size hints in tiled resizals */
     39 +static const Bool statusall   = False;/* True means status is shown in all bars, not just active monitor */
     40  
     41  static const int master[1];           /* nmaster override per monitor */
     42  //static const int master[] = {1,-1}; /* monitor 0 = nmaster 1, monitor 1 = no nmaster (all vertical) */
     43  static const int views[1];            /* nviews override per monitor */
     44  //static const int views[]  = {4,~0}; /* monitor 0 = nviews 4, monitor 1 = all (all highlighted) */
     45  
     46  static const Layout layouts[] = {
     47  	/* symbol     arrange function */
     48  	{ "[]=",      tile },    /* first entry is default */
     49  	{ "><>",      NULL },    /* no layout function means floating behavior */
     50 diff --git a/dwm.c b/dwm.c
     51 index 2b3bf5f99c95180cfb5a3bb04b4181481fbe7bbd..92aa91a75a39cf1ed298a2279db9974a4f456129 100644
     52 --- a/dwm.c
     53 +++ b/dwm.c
     54 @@ -719,21 +719,21 @@ drawbar(Monitor *m) {
     55  	drw_setscheme(drw, &scheme[SchemeNorm]);
     56  	drw_text(drw, x, 0, w, bh, m->ltsymbol, 0);
     57  	x += w;
     58  	char custom[4] = {0}; // needs to be +1 of actual size, for some reason
     59  	snprintf(custom, sizeof(custom), "<%d>", m->num);
     60  	w = bmw = TEXTW(custom);
     61  	drw_setscheme(drw, m == selmon ? &scheme[SchemeSel] : &scheme[SchemeNorm]);
     62  	drw_text(drw, x, 0, w, bh, custom, 0);
     63  	x += w;
     64  	xx = x;
     65 -	if(m == selmon) { /* status is only drawn on selected monitor */
     66 +	if(m == selmon || statusall) { /* status is only drawn on selected monitor, unless statusall is true */
     67  		w = TEXTW(stext);
     68  		x = m->ww - w;
     69  		if(x < xx) {
     70  			x = xx;
     71  			w = m->ww - xx;
     72  		}
     73  		drw_setscheme(drw, &scheme[SchemeNorm]);
     74  		drw_text(drw, x, 0, w, bh, stext, 0);
     75  	}
     76  	else
     77 @@ -779,21 +779,21 @@ enternotify(XEvent *e) {
     78  		return;
     79  	focus(c);
     80  }
     81  
     82  void
     83  expose(XEvent *e) {
     84  	Monitor *m;
     85  	XExposeEvent *ev = &e->xexpose;
     86  
     87  	if(ev->count == 0 && (m = wintomon(ev->window)))
     88 -		drawbar(m);
     89 +		statusall ? drawbars() : drawbar(m);
     90  }
     91  
     92  void
     93  focus(Client *c) {
     94  	if(!c || !ISVISIBLE(c))
     95  		for(c = selmon->stack; c && !ISVISIBLE(c); c = c->snext);
     96  	/* was if(selmon->sel) */
     97  	if(selmon->sel && selmon->sel != c)
     98  		unfocus(selmon->sel, False);
     99  	if(c) {
    100 @@ -1222,21 +1222,21 @@ propertynotify(XEvent *e) {
    101  			updatesizehints(c);
    102  			break;
    103  		case XA_WM_HINTS:
    104  			updatewmhints(c);
    105  			drawbars();
    106  			break;
    107  		}
    108  		if(ev->atom == XA_WM_NAME || ev->atom == netatom[NetWMName]) {
    109  			updatetitle(c);
    110  			if(c == c->mon->sel)
    111 -				drawbar(c->mon);
    112 +				statusall ? drawbars() : drawbar(c->mon);
    113  		}
    114  		if(ev->atom == netatom[NetWMWindowType])
    115  			updatewindowtype(c);
    116  	}
    117  }
    118  
    119  void
    120  quit(const Arg *arg) {
    121  	running = False;
    122  }
    123 @@ -1325,21 +1325,21 @@ resizemouse(const Arg *arg) {
    124  		focus(NULL);
    125  	}
    126  }
    127  
    128  void
    129  restack(Monitor *m) {
    130  	Client *c;
    131  	XEvent ev;
    132  	XWindowChanges wc;
    133  
    134 -	drawbar(m);
    135 +	statusall ? drawbars() : drawbar(m);
    136  	if(!m->sel)
    137  		return;
    138  	if(m->sel->isfloating || !m->lt[m->sellt]->arrange)
    139  		XRaiseWindow(dpy, m->sel->win);
    140  	if(m->lt[m->sellt]->arrange) {
    141  		wc.stack_mode = Below;
    142  		wc.sibling = m->barwin;
    143  		for(c = m->stack; c; c = c->snext)
    144  			if(!c->isfloating && ISVISIBLE(c)) {
    145  				XConfigureWindow(dpy, c->win, CWSibling|CWStackMode, &wc);
    146 @@ -1475,21 +1475,21 @@ setfullscreen(Client *c, Bool fullscreen) {
    147  void
    148  setlayout(const Arg *arg) {
    149  	if(!arg || !arg->v || arg->v != selmon->lt[selmon->sellt])
    150  		selmon->sellt ^= 1;
    151  	if(arg && arg->v)
    152  		selmon->lt[selmon->sellt] = (Layout *)arg->v;
    153  	strncpy(selmon->ltsymbol, selmon->lt[selmon->sellt]->symbol, sizeof selmon->ltsymbol);
    154  	if(selmon->sel)
    155  		arrange(selmon);
    156  	else
    157 -		drawbar(selmon);
    158 +		statusall ? drawbars() : drawbar(selmon);
    159  }
    160  
    161  /* arg > 1.0 will set mfact absolutly */
    162  void
    163  setmfact(const Arg *arg) {
    164  	float f;
    165  
    166  	if(!arg || !selmon->lt[selmon->sellt]->arrange)
    167  		return;
    168  	f = arg->f < 1.0 ? arg->f + selmon->mfact : arg->f - 1.0;
    169 @@ -1941,21 +1941,21 @@ updatetitle(Client *c) {
    170  	if(!gettextprop(c->win, netatom[NetWMName], c->name, sizeof c->name))
    171  		gettextprop(c->win, XA_WM_NAME, c->name, sizeof c->name);
    172  	if(c->name[0] == '\0') /* hack to mark broken clients */
    173  		strcpy(c->name, broken);
    174  }
    175  
    176  void
    177  updatestatus(void) {
    178  	if(!gettextprop(root, XA_WM_NAME, stext, sizeof(stext)))
    179  		strcpy(stext, "dwm-"VERSION);
    180 -	drawbar(selmon);
    181 +	statusall ? drawbars() : drawbar(selmon);
    182  }
    183  
    184  void
    185  updatewindowtype(Client *c) {
    186  	Atom state = getatomprop(c, netatom[NetWMState]);
    187  	Atom wtype = getatomprop(c, netatom[NetWMWindowType]);
    188  
    189  	if(state == netatom[NetWMFullscreen])
    190  		setfullscreen(c, True);
    191  	if(wtype == netatom[NetWMWindowTypeDialog])
    192 
    193 --------------1.8.3.2--
    194 
    195