sites

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

dwm-extrabar-6.2-20210209.diff (5639B)


      1 commit e8111727686dc5d8194ff95af70c3e4abcc2da54
      2 Author: Finn Rayment <finn@rayment.fr>
      3 Date:   Tue Feb 9 16:33:51 2021 +0100
      4 
      5     [PATCH] Updated extra bar support
      6 
      7 diff --git a/config.def.h b/config.def.h
      8 index 1c0b587..91593ee 100644
      9 --- a/config.def.h
     10 +++ b/config.def.h
     11 @@ -5,6 +5,8 @@ static const unsigned int borderpx  = 1;        /* border pixel of windows */
     12  static const unsigned int snap      = 32;       /* snap pixel */
     13  static const int showbar            = 1;        /* 0 means no bar */
     14  static const int topbar             = 1;        /* 0 means bottom bar */
     15 +static const int extrabarright      = 0;        /* 1 means extra bar text on right */
     16 +static const char statussep         = ';';      /* separator between status bars */
     17  static const char *fonts[]          = { "monospace:size=10" };
     18  static const char dmenufont[]       = "monospace:size=10";
     19  static const char col_gray1[]       = "#222222";
     20 diff --git a/dwm.c b/dwm.c
     21 index 4465af1..3db6761 100644
     22 --- a/dwm.c
     23 +++ b/dwm.c
     24 @@ -117,6 +117,7 @@ struct Monitor {
     25  	int nmaster;
     26  	int num;
     27  	int by;               /* bar geometry */
     28 +	int eby;              /* extra bar geometry */
     29  	int mx, my, mw, mh;   /* screen size */
     30  	int wx, wy, ww, wh;   /* window area  */
     31  	unsigned int seltags;
     32 @@ -129,6 +130,7 @@ struct Monitor {
     33  	Client *stack;
     34  	Monitor *next;
     35  	Window barwin;
     36 +	Window extrabarwin;
     37  	const Layout *lt[2];
     38  };
     39  
     40 @@ -237,6 +239,7 @@ static void zoom(const Arg *arg);
     41  /* variables */
     42  static const char broken[] = "broken";
     43  static char stext[256];
     44 +static char estext[256];
     45  static int screen;
     46  static int sw, sh;           /* X display screen geometry width, height */
     47  static int bh, blw = 0;      /* bar geometry */
     48 @@ -505,7 +508,9 @@ cleanupmon(Monitor *mon)
     49  		m->next = mon->next;
     50  	}
     51  	XUnmapWindow(dpy, mon->barwin);
     52 +	XUnmapWindow(dpy, mon->extrabarwin);
     53  	XDestroyWindow(dpy, mon->barwin);
     54 +	XDestroyWindow(dpy, mon->extrabarwin);
     55  	free(mon);
     56  }
     57  
     58 @@ -568,6 +573,7 @@ configurenotify(XEvent *e)
     59  					if (c->isfullscreen)
     60  						resizeclient(c, m->mx, m->my, m->mw, m->mh);
     61  				XMoveResizeWindow(dpy, m->barwin, m->wx, m->by, m->ww, bh);
     62 +				XMoveResizeWindow(dpy, m->extrabarwin, m->wx, m->eby, m->ww, bh);
     63  			}
     64  			focus(NULL);
     65  			arrange(NULL);
     66 @@ -740,6 +746,19 @@ drawbar(Monitor *m)
     67  		}
     68  	}
     69  	drw_map(drw, m->barwin, 0, 0, m->ww, bh);
     70 +
     71 +	if (m == selmon) { /* extra status is only drawn on selected monitor */
     72 +		drw_setscheme(drw, scheme[SchemeNorm]);
     73 +		/* clear default bar draw buffer by drawing a blank rectangle */
     74 +		drw_rect(drw, 0, 0, m->ww, bh, 1, 1);
     75 +		if (extrabarright) {
     76 +			sw = TEXTW(estext) - lrpad + 2; /* 2px right padding */
     77 +			drw_text(drw, m->ww - sw, 0, sw, bh, 0, estext, 0);
     78 +		} else {
     79 +			drw_text(drw, 0, 0, mons->ww, bh, 0, estext, 0);
     80 +		}
     81 +		drw_map(drw, m->extrabarwin, 0, 0, m->ww, bh);
     82 +	}
     83  }
     84  
     85  void
     86 @@ -1702,6 +1721,7 @@ togglebar(const Arg *arg)
     87  	selmon->showbar = !selmon->showbar;
     88  	updatebarpos(selmon);
     89  	XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, selmon->ww, bh);
     90 +	XMoveResizeWindow(dpy, selmon->extrabarwin, selmon->wx, selmon->eby, selmon->ww, bh);
     91  	arrange(selmon);
     92  }
     93  
     94 @@ -1809,14 +1829,22 @@ updatebars(void)
     95  	};
     96  	XClassHint ch = {"dwm", "dwm"};
     97  	for (m = mons; m; m = m->next) {
     98 -		if (m->barwin)
     99 -			continue;
    100 -		m->barwin = XCreateWindow(dpy, root, m->wx, m->by, m->ww, bh, 0, DefaultDepth(dpy, screen),
    101 -				CopyFromParent, DefaultVisual(dpy, screen),
    102 -				CWOverrideRedirect|CWBackPixmap|CWEventMask, &wa);
    103 -		XDefineCursor(dpy, m->barwin, cursor[CurNormal]->cursor);
    104 -		XMapRaised(dpy, m->barwin);
    105 -		XSetClassHint(dpy, m->barwin, &ch);
    106 +		if (!m->barwin) {
    107 +			m->barwin = XCreateWindow(dpy, root, m->wx, m->by, m->ww, bh, 0, DefaultDepth(dpy, screen),
    108 +					CopyFromParent, DefaultVisual(dpy, screen),
    109 +					CWOverrideRedirect|CWBackPixmap|CWEventMask, &wa);
    110 +			XDefineCursor(dpy, m->barwin, cursor[CurNormal]->cursor);
    111 +			XMapRaised(dpy, m->barwin);
    112 +			XSetClassHint(dpy, m->barwin, &ch);
    113 +		}
    114 +		if (!m->extrabarwin) {
    115 +			m->extrabarwin = XCreateWindow(dpy, root, m->wx, m->eby, m->ww, bh, 0, DefaultDepth(dpy, screen),
    116 +					CopyFromParent, DefaultVisual(dpy, screen),
    117 +					CWOverrideRedirect|CWBackPixmap|CWEventMask, &wa);
    118 +			XDefineCursor(dpy, m->extrabarwin, cursor[CurNormal]->cursor);
    119 +			XMapRaised(dpy, m->extrabarwin);
    120 +			XSetClassHint(dpy, m->extrabarwin, &ch);
    121 +		}
    122  	}
    123  }
    124  
    125 @@ -1825,12 +1853,15 @@ updatebarpos(Monitor *m)
    126  {
    127  	m->wy = m->my;
    128  	m->wh = m->mh;
    129 +	m->wh -= bh * m->showbar * 2;
    130 +	m->wy = m->showbar ? m->wy + bh : m->wy;
    131  	if (m->showbar) {
    132 -		m->wh -= bh;
    133 -		m->by = m->topbar ? m->wy : m->wy + m->wh;
    134 -		m->wy = m->topbar ? m->wy + bh : m->wy;
    135 -	} else
    136 +		m->by = m->topbar ? m->wy - bh : m->wy + m->wh;
    137 +		m->eby = m->topbar ? m->wy + m->wh : m->wy - bh;
    138 +	} else {
    139  		m->by = -bh;
    140 +		m->eby = -bh;
    141 +	}
    142  }
    143  
    144  void
    145 @@ -1987,8 +2018,20 @@ updatesizehints(Client *c)
    146  void
    147  updatestatus(void)
    148  {
    149 -	if (!gettextprop(root, XA_WM_NAME, stext, sizeof(stext)))
    150 +	char text[512];
    151 +	if (!gettextprop(root, XA_WM_NAME, text, sizeof(text))) {
    152  		strcpy(stext, "dwm-"VERSION);
    153 +		estext[0] = '\0';
    154 +	} else {
    155 +		char *e = strchr(text, statussep);
    156 +		if (e) {
    157 +			*e = '\0'; e++;
    158 +			strncpy(estext, e, sizeof(estext) - 1);
    159 +		} else {
    160 +			estext[0] = '\0';
    161 +		}
    162 +		strncpy(stext, text, sizeof(stext) - 1);
    163 +	}
    164  	drawbar(selmon);
    165  }
    166  
    167 @@ -2067,7 +2110,7 @@ wintomon(Window w)
    168  	if (w == root && getrootptr(&x, &y))
    169  		return recttomon(x, y, 1, 1);
    170  	for (m = mons; m; m = m->next)
    171 -		if (w == m->barwin)
    172 +		if (w == m->barwin || w == m->extrabarwin)
    173  			return m;
    174  	if ((c = wintoclient(w)))
    175  		return c->mon;