[wiki] [sites] [dwm][patches][nostatusbar] Delete patch || aleks

From: <git_AT_suckless.org>
Date: Tue, 06 Aug 2019 14:01:57 +0200

commit 659109464d3f60d10c627f101dafaa450c8293da
Author: aleks <aleks.stier_AT_icloud.com>
Date: Tue Aug 6 13:51:09 2019 +0200

    [dwm][patches][nostatusbar] Delete patch
    
    I created this patch and now I am deleting it because I don't think it
    provides any value. Somebody who does not want to use the statusbar can
    hide it. Hence it does not add any new functionality or improves the
    workflow. On the other hand it can make things more difficult because it
    removes a lot of code and applying new patches results often in conflicts.
    However, I still think that the statusbar should not be hardcoded in dwm
    but rather be a separate program.

diff --git a/dwm.suckless.org/patches/nostatusbar/dwm-nostatusbar-6.2.diff b/dwm.suckless.org/patches/nostatusbar/dwm-nostatusbar-6.2.diff
deleted file mode 100644
index ecc97044..00000000
--- a/dwm.suckless.org/patches/nostatusbar/dwm-nostatusbar-6.2.diff
+++ /dev/null
_AT_@ -1,916 +0,0 @@
-From 8e8d077d6aef1ed1969f30eb66931d56afba3599 Mon Sep 17 00:00:00 2001
-From: aleks <aleks.stier_AT_icloud.com>
-Date: Thu, 27 Jun 2019 15:41:56 +0200
-Subject: [PATCH] Remove statusbar and all related code
-
----
- config.def.h |  16 +--
- drw.c        | 304 ---------------------------------------------------
- drw.h        |   8 --
- dwm.c        | 207 +----------------------------------
- 4 files changed, 9 insertions(+), 526 deletions(-)
-
-diff --git a/config.def.h b/config.def.h
-index 1c0b587..a62df75 100644
---- a/config.def.h
-+++ b/config.def.h
-_AT_@ -3,9 +3,6 @@
- /* appearance */
- static const unsigned int borderpx  = 1;        /* border pixel of windows */
- static const unsigned int snap      = 32;       /* snap pixel */
--static const int showbar            = 1;        /* 0 means no bar */
--static const int topbar             = 1;        /* 0 means bottom bar */
--static const char *fonts[]          = { "monospace:size=10" };
- static const char dmenufont[]       = "monospace:size=10";
- static const char col_gray1[]       = "#222222";
- static const char col_gray2[]       = "#444444";
-_AT_@ -18,6 +15,7 @@ static const char *colors[][3]      = {
- 	[SchemeSel]  = { col_gray4, col_cyan,  col_cyan  },
- };
- 
-+/* TODO replace array with int */
- /* tagging */
- static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
- 
-_AT_@ -36,6 +34,7 @@ static const float mfact     = 0.55; /* factor of master area size [0.05..0.95]
- static const int nmaster     = 1;    /* number of clients in master area */
- static const int resizehints = 1;    /* 1 means respect size hints in tiled resizals */
- 
-+/* TODO remove symbols */
- static const Layout layouts[] = {
- 	/* symbol     arrange function */
- 	{ "[]=",      tile },    /* first entry is default */
-_AT_@ -63,7 +62,6 @@ static Key keys[] = {
- 	/* modifier                     key        function        argument */
- 	{ MODKEY,                       XK_p,      spawn,          {.v = dmenucmd } },
- 	{ MODKEY|ShiftMask,             XK_Return, spawn,          {.v = termcmd } },
--	{ MODKEY,                       XK_b,      togglebar,      {0} },
- 	{ MODKEY,                       XK_j,      focusstack,     {.i = +1 } },
- 	{ MODKEY,                       XK_k,      focusstack,     {.i = -1 } },
- 	{ MODKEY,                       XK_i,      incnmaster,     {.i = +1 } },
-_AT_@ -97,19 +95,11 @@ static Key keys[] = {
- };
- 
- /* button definitions */
--/* click can be ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle, ClkClientWin, or ClkRootWin */
-+/* click can be ClkClientWin or ClkRootWin */
- static Button buttons[] = {
- 	/* click                event mask      button          function        argument */
--	{ ClkLtSymbol,          0,              Button1,        setlayout,      {0} },
--	{ ClkLtSymbol,          0,              Button3,        setlayout,      {.v = &layouts[2]} },
--	{ ClkWinTitle,          0,              Button2,        zoom,           {0} },
--	{ ClkStatusText,        0,              Button2,        spawn,          {.v = termcmd } },
- 	{ ClkClientWin,         MODKEY,         Button1,        movemouse,      {0} },
- 	{ ClkClientWin,         MODKEY,         Button2,        togglefloating, {0} },
- 	{ ClkClientWin,         MODKEY,         Button3,        resizemouse,    {0} },
--	{ ClkTagBar,            0,              Button1,        view,           {0} },
--	{ ClkTagBar,            0,              Button3,        toggleview,     {0} },
--	{ ClkTagBar,            MODKEY,         Button1,        tag,            {0} },
--	{ ClkTagBar,            MODKEY,         Button3,        toggletag,      {0} },
- };
- 
-diff --git a/drw.c b/drw.c
-index 8fd1ca4..c9b796f 100644
---- a/drw.c
-+++ b/drw.c
-_AT_@ -11,55 +11,6 @@
- #define UTF_INVALID 0xFFFD
- #define UTF_SIZ     4
- 
--static const unsigned char utfbyte[UTF_SIZ + 1] = {0x80,    0, 0xC0, 0xE0, 0xF0};
--static const unsigned char utfmask[UTF_SIZ + 1] = {0xC0, 0x80, 0xE0, 0xF0, 0xF8};
--static const long utfmin[UTF_SIZ + 1] = {       0,    0,  0x80,  0x800,  0x10000};
--static const long utfmax[UTF_SIZ + 1] = {0x10FFFF, 0x7F, 0x7FF, 0xFFFF, 0x10FFFF};
--
--static long
--utf8decodebyte(const char c, size_t *i)
--{
--	for (*i = 0; *i < (UTF_SIZ + 1); ++(*i))
--		if (((unsigned char)c & utfmask[*i]) == utfbyte[*i])
--			return (unsigned char)c & ~utfmask[*i];
--	return 0;
--}
--
--static size_t
--utf8validate(long *u, size_t i)
--{
--	if (!BETWEEN(*u, utfmin[i], utfmax[i]) || BETWEEN(*u, 0xD800, 0xDFFF))
--		*u = UTF_INVALID;
--	for (i = 1; *u > utfmax[i]; ++i)
--		;
--	return i;
--}
--
--static size_t
--utf8decode(const char *c, long *u, size_t clen)
--{
--	size_t i, j, len, type;
--	long udecoded;
--
--	*u = UTF_INVALID;
--	if (!clen)
--		return 0;
--	udecoded = utf8decodebyte(c[0], &len);
--	if (!BETWEEN(len, 1, UTF_SIZ))
--		return 1;
--	for (i = 1, j = 1; i < clen && j < len; ++i, ++j) {
--		udecoded = (udecoded << 6) | utf8decodebyte(c[i], &type);
--		if (type)
--			return j;
--	}
--	if (j < len)
--		return 0;
--	*u = udecoded;
--	utf8validate(u, len);
--
--	return len;
--}
--
- Drw *
- drw_create(Display *dpy, int screen, Window root, unsigned int w, unsigned int h)
- {
-_AT_@ -98,100 +49,6 @@ drw_free(Drw *drw)
- 	free(drw);
- }
- 
--/* This function is an implementation detail. Library users should use
-- * drw_fontset_create instead.
-- */
--static Fnt *
--xfont_create(Drw *drw, const char *fontname, FcPattern *fontpattern)
--{
--	Fnt *font;
--	XftFont *xfont = NULL;
--	FcPattern *pattern = NULL;
--
--	if (fontname) {
--		/* Using the pattern found at font->xfont->pattern does not yield the
--		 * same substitution results as using the pattern returned by
--		 * FcNameParse; using the latter results in the desired fallback
--		 * behaviour whereas the former just results in missing-character
--		 * rectangles being drawn, at least with some fonts. */
--		if (!(xfont = XftFontOpenName(drw->dpy, drw->screen, fontname))) {
--			fprintf(stderr, "error, cannot load font from name: '%s'
", fontname);
--			return NULL;
--		}
--		if (!(pattern = FcNameParse((FcChar8 *) fontname))) {
--			fprintf(stderr, "error, cannot parse font name to pattern: '%s'
", fontname);
--			XftFontClose(drw->dpy, xfont);
--			return NULL;
--		}
--	} else if (fontpattern) {
--		if (!(xfont = XftFontOpenPattern(drw->dpy, fontpattern))) {
--			fprintf(stderr, "error, cannot load font from pattern.
");
--			return NULL;
--		}
--	} else {
--		die("no font specified.");
--	}
--
--	/* Do not allow using color fonts. This is a workaround for a BadLength
--	 * error from Xft with color glyphs. Modelled on the Xterm workaround. See
--	 * https://bugzilla.redhat.com/show_bug.cgi?id=1498269
--	 * https://lists.suckless.org/dev/1701/30932.html
--	 * https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=916349
--	 * and lots more all over the internet.
--	 */
--	FcBool iscol;
--	if(FcPatternGetBool(xfont->pattern, FC_COLOR, 0, &iscol) == FcResultMatch && iscol) {
--		XftFontClose(drw->dpy, xfont);
--		return NULL;
--	}
--
--	font = ecalloc(1, sizeof(Fnt));
--	font->xfont = xfont;
--	font->pattern = pattern;
--	font->h = xfont->ascent + xfont->descent;
--	font->dpy = drw->dpy;
--
--	return font;
--}
--
--static void
--xfont_free(Fnt *font)
--{
--	if (!font)
--		return;
--	if (font->pattern)
--		FcPatternDestroy(font->pattern);
--	XftFontClose(font->dpy, font->xfont);
--	free(font);
--}
--
--Fnt*
--drw_fontset_create(Drw* drw, const char *fonts[], size_t fontcount)
--{
--	Fnt *cur, *ret = NULL;
--	size_t i;
--
--	if (!drw || !fonts)
--		return NULL;
--
--	for (i = 1; i <= fontcount; i++) {
--		if ((cur = xfont_create(drw, fonts[fontcount - i], NULL))) {
--			cur->next = ret;
--			ret = cur;
--		}
--	}
--	return (drw->fonts = ret);
--}
--
--void
--drw_fontset_free(Fnt *font)
--{
--	if (font) {
--		drw_fontset_free(font->next);
--		xfont_free(font);
--	}
--}
--
- void
- drw_clr_create(Drw *drw, Clr *dest, const char *clrname)
- {
-_AT_@ -221,13 +78,6 @@ drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount)
- 	return ret;
- }
- 
--void
--drw_setfontset(Drw *drw, Fnt *set)
--{
--	if (drw)
--		drw->fonts = set;
--}
--
- void
- drw_setscheme(Drw *drw, Clr *scm)
- {
-_AT_@ -247,137 +97,6 @@ drw_rect(Drw *drw, int x, int y, unsigned int w, unsigned int h, int filled, int
- 		XDrawRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w - 1, h - 1);
- }
- 
--int
--drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lpad, const char *text, int invert)
--{
--	char buf[1024];
--	int ty;
--	unsigned int ew;
--	XftDraw *d = NULL;
--	Fnt *usedfont, *curfont, *nextfont;
--	size_t i, len;
--	int utf8strlen, utf8charlen, render = x || y || w || h;
--	long utf8codepoint = 0;
--	const char *utf8str;
--	FcCharSet *fccharset;
--	FcPattern *fcpattern;
--	FcPattern *match;
--	XftResult result;
--	int charexists = 0;
--
--	if (!drw || (render && !drw->scheme) || !text || !drw->fonts)
--		return 0;
--
--	if (!render) {
--		w = ~w;
--	} else {
--		XSetForeground(drw->dpy, drw->gc, drw->scheme[invert ? ColFg : ColBg].pixel);
--		XFillRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w, h);
--		d = XftDrawCreate(drw->dpy, drw->drawable,
--		                  DefaultVisual(drw->dpy, drw->screen),
--		                  DefaultColormap(drw->dpy, drw->screen));
--		x += lpad;
--		w -= lpad;
--	}
--
--	usedfont = drw->fonts;
--	while (1) {
--		utf8strlen = 0;
--		utf8str = text;
--		nextfont = NULL;
--		while (*text) {
--			utf8charlen = utf8decode(text, &utf8codepoint, UTF_SIZ);
--			for (curfont = drw->fonts; curfont; curfont = curfont->next) {
--				charexists = charexists || XftCharExists(drw->dpy, curfont->xfont, utf8codepoint);
--				if (charexists) {
--					if (curfont == usedfont) {
--						utf8strlen += utf8charlen;
--						text += utf8charlen;
--					} else {
--						nextfont = curfont;
--					}
--					break;
--				}
--			}
--
--			if (!charexists || nextfont)
--				break;
--			else
--				charexists = 0;
--		}
--
--		if (utf8strlen) {
--			drw_font_getexts(usedfont, utf8str, utf8strlen, &ew, NULL);
--			/* shorten text if necessary */
--			for (len = MIN(utf8strlen, sizeof(buf) - 1); len && ew > w; len--)
--				drw_font_getexts(usedfont, utf8str, len, &ew, NULL);
--
--			if (len) {
--				memcpy(buf, utf8str, len);
--				buf[len] = '--				if (len < utf8strlen)
--					for (i = len; i && i > len - 3; buf[--i] = '.')
--						; /* NOP */
--
--				if (render) {
--					ty = y + (h - usedfont->h) / 2 + usedfont->xfont->ascent;
--					XftDrawStringUtf8(d, &drw->scheme[invert ? ColBg : ColFg],
--					                  usedfont->xfont, x, ty, (XftChar8 *)buf, len);
--				}
--				x += ew;
--				w -= ew;
--			}
--		}
--
--		if (!*text) {
--			break;
--		} else if (nextfont) {
--			charexists = 0;
--			usedfont = nextfont;
--		} else {
--			/* Regardless of whether or not a fallback font is found, the
--			 * character must be drawn. */
--			charexists = 1;
--
--			fccharset = FcCharSetCreate();
--			FcCharSetAddChar(fccharset, utf8codepoint);
--
--			if (!drw->fonts->pattern) {
--				/* Refer to the comment in xfont_create for more information. */
--				die("the first font in the cache must be loaded from a font string.");
--			}
--
--			fcpattern = FcPatternDuplicate(drw->fonts->pattern);
--			FcPatternAddCharSet(fcpattern, FC_CHARSET, fccharset);
--			FcPatternAddBool(fcpattern, FC_SCALABLE, FcTrue);
--			FcPatternAddBool(fcpattern, FC_COLOR, FcFalse);
--
--			FcConfigSubstitute(NULL, fcpattern, FcMatchPattern);
--			FcDefaultSubstitute(fcpattern);
--			match = XftFontMatch(drw->dpy, drw->screen, fcpattern, &result);
--
--			FcCharSetDestroy(fccharset);
--			FcPatternDestroy(fcpattern);
--
--			if (match) {
--				usedfont = xfont_create(drw, NULL, match);
--				if (usedfont && XftCharExists(drw->dpy, usedfont->xfont, utf8codepoint)) {
--					for (curfont = drw->fonts; curfont->next; curfont = curfont->next)
--						; /* NOP */
--					curfont->next = usedfont;
--				} else {
--					xfont_free(usedfont);
--					usedfont = drw->fonts;
--				}
--			}
--		}
--	}
--	if (d)
--		XftDrawDestroy(d);
--
--	return x + (render ? w : 0);
--}
--
- void
- drw_map(Drw *drw, Window win, int x, int y, unsigned int w, unsigned int h)
- {
-_AT_@ -388,29 +107,6 @@ drw_map(Drw *drw, Window win, int x, int y, unsigned int w, unsigned int h)
- 	XSync(drw->dpy, False);
- }
- 
--unsigned int
--drw_fontset_getwidth(Drw *drw, const char *text)
--{
--	if (!drw || !drw->fonts || !text)
--		return 0;
--	return drw_text(drw, 0, 0, 0, 0, 0, text, 0);
--}
--
--void
--drw_font_getexts(Fnt *font, const char *text, unsigned int len, unsigned int *w, unsigned int *h)
--{
--	XGlyphInfo ext;
--
--	if (!font || !text)
--		return;
--
--	XftTextExtentsUtf8(font->dpy, font->xfont, (XftChar8 *)text, len, &ext);
--	if (w)
--		*w = ext.xOff;
--	if (h)
--		*h = font->h;
--}
--
- Cur *
- drw_cur_create(Drw *drw, int shape)
- {
-diff --git a/drw.h b/drw.h
-index 4bcd5ad..0f73b59 100644
---- a/drw.h
-+++ b/drw.h
-_AT_@ -31,12 +31,6 @@ Drw *drw_create(Display *dpy, int screen, Window win, unsigned int w, unsigned i
- void drw_resize(Drw *drw, unsigned int w, unsigned int h);
- void drw_free(Drw *drw);
- 
--/* Fnt abstraction */
--Fnt *drw_fontset_create(Drw* drw, const char *fonts[], size_t fontcount);
--void drw_fontset_free(Fnt* set);
--unsigned int drw_fontset_getwidth(Drw *drw, const char *text);
--void drw_font_getexts(Fnt *font, const char *text, unsigned int len, unsigned int *w, unsigned int *h);
--
- /* Colorscheme abstraction */
- void drw_clr_create(Drw *drw, Clr *dest, const char *clrname);
- Clr *drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount);
-_AT_@ -46,12 +40,10 @@ Cur *drw_cur_create(Drw *drw, int shape);
- void drw_cur_free(Drw *drw, Cur *cursor);
- 
- /* Drawing context manipulation */
--void drw_setfontset(Drw *drw, Fnt *set);
- void drw_setscheme(Drw *drw, Clr *scm);
- 
- /* Drawing functions */
- void drw_rect(Drw *drw, int x, int y, unsigned int w, unsigned int h, int filled, int invert);
--int drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lpad, const char *text, int invert);
- 
- /* Map functions */
- void drw_map(Drw *drw, Window win, int x, int y, unsigned int w, unsigned int h);
-diff --git a/dwm.c b/dwm.c
-index 4465af1..2e41a5b 100644
---- a/dwm.c
-+++ b/dwm.c
-_AT_@ -55,7 +55,6 @@
- #define WIDTH(X)                ((X)->w + 2 * (X)->bw)
- #define HEIGHT(X)               ((X)->h + 2 * (X)->bw)
- #define TAGMASK                 ((1 << LENGTH(tags)) - 1)
--#define TEXTW(X)                (drw_fontset_getwidth(drw, (X)) + lrpad)
- 
- /* enums */
- enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */
-_AT_@ -64,8 +63,7 @@ enum { NetSupported, NetWMName, NetWMState, NetWMCheck,
-        NetWMFullscreen, NetActiveWindow, NetWMWindowType,
-        NetWMWindowTypeDialog, NetClientList, NetLast }; /* EWMH atoms */
- enum { WMProtocols, WMDelete, WMState, WMTakeFocus, WMLast }; /* default atoms */
--enum { ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle,
--       ClkClientWin, ClkRootWin, ClkLast }; /* clicks */
-+enum { ClkClientWin, ClkRootWin }; /* clicks */
- 
- typedef union {
- 	int i;
-_AT_@ -116,19 +114,15 @@ struct Monitor {
- 	float mfact;
- 	int nmaster;
- 	int num;
--	int by;               /* bar geometry */
- 	int mx, my, mw, mh;   /* screen size */
- 	int wx, wy, ww, wh;   /* window area  */
- 	unsigned int seltags;
- 	unsigned int sellt;
- 	unsigned int tagset[2];
--	int showbar;
--	int topbar;
- 	Client *clients;
- 	Client *sel;
- 	Client *stack;
- 	Monitor *next;
--	Window barwin;
- 	const Layout *lt[2];
- };
- 
-_AT_@ -161,10 +155,7 @@ static void destroynotify(XEvent *e);
- static void detach(Client *c);
- static void detachstack(Client *c);
- static Monitor *dirtomon(int dir);
--static void drawbar(Monitor *m);
--static void drawbars(void);
- static void enternotify(XEvent *e);
--static void expose(XEvent *e);
- static void focus(Client *c);
- static void focusin(XEvent *e);
- static void focusmon(const Arg *arg);
-_AT_@ -209,20 +200,16 @@ static void spawn(const Arg *arg);
- static void tag(const Arg *arg);
- static void tagmon(const Arg *arg);
- static void tile(Monitor *);
--static void togglebar(const Arg *arg);
- static void togglefloating(const Arg *arg);
- static void toggletag(const Arg *arg);
- static void toggleview(const Arg *arg);
- static void unfocus(Client *c, int setfocus);
- static void unmanage(Client *c, int destroyed);
- static void unmapnotify(XEvent *e);
--static void updatebarpos(Monitor *m);
--static void updatebars(void);
- static void updateclientlist(void);
- static int updategeom(void);
- static void updatenumlockmask(void);
- static void updatesizehints(Client *c);
--static void updatestatus(void);
- static void updatetitle(Client *c);
- static void updatewindowtype(Client *c);
- static void updatewmhints(Client *c);
-_AT_@ -236,11 +223,8 @@ static void zoom(const Arg *arg);
- 
- /* variables */
- static const char broken[] = "broken";
--static char stext[256];
- static int screen;
- static int sw, sh;           /* X display screen geometry width, height */
--static int bh, blw = 0;      /* bar geometry */
--static int lrpad;            /* sum of left and right padding for text */
- static int (*xerrorxlib)(Display *, XErrorEvent *);
- static unsigned int numlockmask = 0;
- static void (*handler[LASTEvent]) (XEvent *) = {
-_AT_@ -250,7 +234,6 @@ static void (*handler[LASTEvent]) (XEvent *) = {
- 	[ConfigureNotify] = configurenotify,
- 	[DestroyNotify] = destroynotify,
- 	[EnterNotify] = enternotify,
--	[Expose] = expose,
- 	[FocusIn] = focusin,
- 	[KeyPress] = keypress,
- 	[MappingNotify] = mappingnotify,
-_AT_@ -339,10 +322,6 @@ applysizehints(Client *c, int *x, int *y, int *w, int *h, int interact)
- 		if (*y + *h + 2 * c->bw <= m->wy)
- 			*y = m->wy;
- 	}
--	if (*h < bh)
--		*h = bh;
--	if (*w < bh)
--		*w = bh;
- 	if (resizehints || c->isfloating || !c->mon->lt[c->mon->sellt]->arrange) {
- 		/* see last two sentences in ICCCM 4.1.2.3 */
- 		baseismin = c->basew == c->minw && c->baseh == c->minh;
-_AT_@ -416,8 +395,7 @@ attachstack(Client *c)
- void
- buttonpress(XEvent *e)
- {
--	unsigned int i, x, click;
--	Arg arg = {0};
-+	unsigned int i, click;
- 	Client *c;
- 	Monitor *m;
- 	XButtonPressedEvent *ev = &e->xbutton;
-_AT_@ -429,21 +407,7 @@ buttonpress(XEvent *e)
- 		selmon = m;
- 		focus(NULL);
- 	}
--	if (ev->window == selmon->barwin) {
--		i = x = 0;
--		do
--			x += TEXTW(tags[i]);
--		while (ev->x >= x && ++i < LENGTH(tags));
--		if (i < LENGTH(tags)) {
--			click = ClkTagBar;
--			arg.ui = 1 << i;
--		} else if (ev->x < x + blw)
--			click = ClkLtSymbol;
--		else if (ev->x > selmon->ww - TEXTW(stext))
--			click = ClkStatusText;
--		else
--			click = ClkWinTitle;
--	} else if ((c = wintoclient(ev->window))) {
-+	if ((c = wintoclient(ev->window))) {
- 		focus(c);
- 		restack(selmon);
- 		XAllowEvents(dpy, ReplayPointer, CurrentTime);
-_AT_@ -452,7 +416,7 @@ buttonpress(XEvent *e)
- 	for (i = 0; i < LENGTH(buttons); i++)
- 		if (click == buttons[i].click && buttons[i].func && buttons[i].button == ev->button
- 		&& CLEANMASK(buttons[i].mask) == CLEANMASK(ev->state))
--			buttons[i].func(click == ClkTagBar && buttons[i].arg.i == 0 ? &arg : &buttons[i].arg);
-+			buttons[i].func(&buttons[i].arg);
- }
- 
- void
-_AT_@ -504,8 +468,6 @@ cleanupmon(Monitor *mon)
- 		for (m = mons; m && m->next != mon; m = m->next);
- 		m->next = mon->next;
- 	}
--	XUnmapWindow(dpy, mon->barwin);
--	XDestroyWindow(dpy, mon->barwin);
- 	free(mon);
- }
- 
-_AT_@ -561,13 +523,11 @@ configurenotify(XEvent *e)
- 		sw = ev->width;
- 		sh = ev->height;
- 		if (updategeom() || dirty) {
--			drw_resize(drw, sw, bh);
--			updatebars();
-+			drw_resize(drw, sw, sh);
- 			for (m = mons; m; m = m->next) {
- 				for (c = m->clients; c; c = c->next)
- 					if (c->isfullscreen)
- 						resizeclient(c, m->mx, m->my, m->mw, m->mh);
--				XMoveResizeWindow(dpy, m->barwin, m->wx, m->by, m->ww, bh);
- 			}
- 			focus(NULL);
- 			arrange(NULL);
-_AT_@ -636,8 +596,6 @@ createmon(void)
- 	m->tagset[0] = m->tagset[1] = 1;
- 	m->mfact = mfact;
- 	m->nmaster = nmaster;
--	m->showbar = showbar;
--	m->topbar = topbar;
- 	m->lt[0] = &layouts[0];
- 	m->lt[1] = &layouts[1 % LENGTH(layouts)];
- 	strncpy(m->ltsymbol, layouts[0].symbol, sizeof m->ltsymbol);
-_AT_@ -692,65 +650,6 @@ dirtomon(int dir)
- 	return m;
- }
- 
--void
--drawbar(Monitor *m)
--{
--	int x, w, sw = 0;
--	int boxs = drw->fonts->h / 9;
--	int boxw = drw->fonts->h / 6 + 2;
--	unsigned int i, occ = 0, urg = 0;
--	Client *c;
--
--	/* draw status first so it can be overdrawn by tags later */
--	if (m == selmon) { /* status is only drawn on selected monitor */
--		drw_setscheme(drw, scheme[SchemeNorm]);
--		sw = TEXTW(stext) - lrpad + 2; /* 2px right padding */
--		drw_text(drw, m->ww - sw, 0, sw, bh, 0, stext, 0);
--	}
--
--	for (c = m->clients; c; c = c->next) {
--		occ |= c->tags;
--		if (c->isurgent)
--			urg |= c->tags;
--	}
--	x = 0;
--	for (i = 0; i < LENGTH(tags); i++) {
--		w = TEXTW(tags[i]);
--		drw_setscheme(drw, scheme[m->tagset[m->seltags] & 1 << i ? SchemeSel : SchemeNorm]);
--		drw_text(drw, x, 0, w, bh, lrpad / 2, tags[i], urg & 1 << i);
--		if (occ & 1 << i)
--			drw_rect(drw, x + boxs, boxs, boxw, boxw,
--				m == selmon && selmon->sel && selmon->sel->tags & 1 << i,
--				urg & 1 << i);
--		x += w;
--	}
--	w = blw = TEXTW(m->ltsymbol);
--	drw_setscheme(drw, scheme[SchemeNorm]);
--	x = drw_text(drw, x, 0, w, bh, lrpad / 2, m->ltsymbol, 0);
--
--	if ((w = m->ww - sw - x) > bh) {
--		if (m->sel) {
--			drw_setscheme(drw, scheme[m == selmon ? SchemeSel : SchemeNorm]);
--			drw_text(drw, x, 0, w, bh, lrpad / 2, m->sel->name, 0);
--			if (m->sel->isfloating)
--				drw_rect(drw, x + boxs, boxs, boxw, boxw, m->sel->isfixed, 0);
--		} else {
--			drw_setscheme(drw, scheme[SchemeNorm]);
--			drw_rect(drw, x, 0, w, bh, 1, 1);
--		}
--	}
--	drw_map(drw, m->barwin, 0, 0, m->ww, bh);
--}
--
--void
--drawbars(void)
--{
--	Monitor *m;
--
--	for (m = mons; m; m = m->next)
--		drawbar(m);
--}
--
- void
- enternotify(XEvent *e)
- {
-_AT_@ -770,16 +669,6 @@ enternotify(XEvent *e)
- 	focus(c);
- }
- 
--void
--expose(XEvent *e)
--{
--	Monitor *m;
--	XExposeEvent *ev = &e->xexpose;
--
--	if (ev->count == 0 && (m = wintomon(ev->window)))
--		drawbar(m);
--}
--
- void
- focus(Client *c)
- {
-_AT_@ -802,7 +691,6 @@ focus(Client *c)
- 		XDeleteProperty(dpy, root, netatom[NetActiveWindow]);
- 	}
- 	selmon->sel = c;
--	drawbars();
- }
- 
- /* there are some broken focus acquiring clients needing extra handling */
-_AT_@ -1044,9 +932,6 @@ manage(Window w, XWindowAttributes *wa)
- 	if (c->y + HEIGHT(c) > c->mon->my + c->mon->mh)
- 		c->y = c->mon->my + c->mon->mh - HEIGHT(c);
- 	c->x = MAX(c->x, c->mon->mx);
--	/* only fix client y-offset, if the client center might cover the bar */
--	c->y = MAX(c->y, ((c->mon->by == c->mon->my) && (c->x + (c->w / 2) >= c->mon->wx)
--		&& (c->x + (c->w / 2) < c->mon->wx + c->mon->ww)) ? bh : c->mon->my);
- 	c->bw = borderpx;
- 
- 	wc.border_width = c->bw;
-_AT_@ -1103,14 +988,8 @@ maprequest(XEvent *e)
- void
- monocle(Monitor *m)
- {
--	unsigned int n = 0;
- 	Client *c;
- 
--	for (c = m->clients; c; c = c->next)
--		if (ISVISIBLE(c))
--			n++;
--	if (n > 0) /* override layout symbol */
--		snprintf(m->ltsymbol, sizeof m->ltsymbol, "[%d]", n);
- 	for (c = nexttiled(m->clients); c; c = nexttiled(c->next))
- 		resize(c, m->wx, m->wy, m->ww - 2 * c->bw, m->wh - 2 * c->bw, 0);
- }
-_AT_@ -1215,9 +1094,7 @@ propertynotify(XEvent *e)
- 	Window trans;
- 	XPropertyEvent *ev = &e->xproperty;
- 
--	if ((ev->window == root) && (ev->atom == XA_WM_NAME))
--		updatestatus();
--	else if (ev->state == PropertyDelete)
-+	if (ev->state == PropertyDelete)
- 		return; /* ignore */
- 	else if ((c = wintoclient(ev->window))) {
- 		switch(ev->atom) {
-_AT_@ -1232,13 +1109,10 @@ propertynotify(XEvent *e)
- 			break;
- 		case XA_WM_HINTS:
- 			updatewmhints(c);
--			drawbars();
- 			break;
- 		}
- 		if (ev->atom == XA_WM_NAME || ev->atom == netatom[NetWMName]) {
- 			updatetitle(c);
--			if (c == c->mon->sel)
--				drawbar(c->mon);
- 		}
- 		if (ev->atom == netatom[NetWMWindowType])
- 			updatewindowtype(c);
-_AT_@ -1351,14 +1225,12 @@ restack(Monitor *m)
- 	XEvent ev;
- 	XWindowChanges wc;
- 
--	drawbar(m);
- 	if (!m->sel)
- 		return;
- 	if (m->sel->isfloating || !m->lt[m->sellt]->arrange)
- 		XRaiseWindow(dpy, m->sel->win);
- 	if (m->lt[m->sellt]->arrange) {
- 		wc.stack_mode = Below;
--		wc.sibling = m->barwin;
- 		for (c = m->stack; c; c = c->snext)
- 			if (!c->isfloating && ISVISIBLE(c)) {
- 				XConfigureWindow(dpy, c->win, CWSibling|CWStackMode, &wc);
-_AT_@ -1507,8 +1379,6 @@ setlayout(const Arg *arg)
- 	strncpy(selmon->ltsymbol, selmon->lt[selmon->sellt]->symbol, sizeof selmon->ltsymbol);
- 	if (selmon->sel)
- 		arrange(selmon);
--	else
--		drawbar(selmon);
- }
- 
- /* arg > 1.0 will set mfact absolutely */
-_AT_@ -1542,10 +1412,6 @@ setup(void)
- 	sh = DisplayHeight(dpy, screen);
- 	root = RootWindow(dpy, screen);
- 	drw = drw_create(dpy, screen, root, sw, sh);
--	if (!drw_fontset_create(drw, fonts, LENGTH(fonts)))
--		die("no fonts could be loaded.");
--	lrpad = drw->fonts->h;
--	bh = drw->fonts->h + 2;
- 	updategeom();
- 	/* init atoms */
- 	utf8string = XInternAtom(dpy, "UTF8_STRING", False);
-_AT_@ -1570,9 +1436,6 @@ setup(void)
- 	scheme = ecalloc(LENGTH(colors), sizeof(Clr *));
- 	for (i = 0; i < LENGTH(colors); i++)
- 		scheme[i] = drw_scm_create(drw, colors[i], 3);
--	/* init bars */
--	updatebars();
--	updatestatus();
- 	/* supporting window for NetWMCheck */
- 	wmcheckwin = XCreateSimpleWindow(dpy, root, 0, 0, 1, 1, 0, 0, 0);
- 	XChangeProperty(dpy, wmcheckwin, netatom[NetWMCheck], XA_WINDOW, 32,
-_AT_@ -1696,15 +1559,6 @@ tile(Monitor *m)
- 		}
- }
- 
--void
--togglebar(const Arg *arg)
--{
--	selmon->showbar = !selmon->showbar;
--	updatebarpos(selmon);
--	XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, selmon->ww, bh);
--	arrange(selmon);
--}
--
- void
- togglefloating(const Arg *arg)
- {
-_AT_@ -1798,41 +1652,6 @@ unmapnotify(XEvent *e)
- 	}
- }
- 
--void
--updatebars(void)
--{
--	Monitor *m;
--	XSetWindowAttributes wa = {
--		.override_redirect = True,
--		.background_pixmap = ParentRelative,
--		.event_mask = ButtonPressMask|ExposureMask
--	};
--	XClassHint ch = {"dwm", "dwm"};
--	for (m = mons; m; m = m->next) {
--		if (m->barwin)
--			continue;
--		m->barwin = XCreateWindow(dpy, root, m->wx, m->by, m->ww, bh, 0, DefaultDepth(dpy, screen),
--				CopyFromParent, DefaultVisual(dpy, screen),
--				CWOverrideRedirect|CWBackPixmap|CWEventMask, &wa);
--		XDefineCursor(dpy, m->barwin, cursor[CurNormal]->cursor);
--		XMapRaised(dpy, m->barwin);
--		XSetClassHint(dpy, m->barwin, &ch);
--	}
--}
--
--void
--updatebarpos(Monitor *m)
--{
--	m->wy = m->my;
--	m->wh = m->mh;
--	if (m->showbar) {
--		m->wh -= bh;
--		m->by = m->topbar ? m->wy : m->wy + m->wh;
--		m->wy = m->topbar ? m->wy + bh : m->wy;
--	} else
--		m->by = -bh;
--}
--
- void
- updateclientlist()
- {
-_AT_@ -1887,7 +1706,6 @@ updategeom(void)
- 					m->my = m->wy = unique[i].y_org;
- 					m->mw = m->ww = unique[i].width;
- 					m->mh = m->wh = unique[i].height;
--					updatebarpos(m);
- 				}
- 		} else { /* less monitors available nn < n */
- 			for (i = nn; i < n; i++) {
-_AT_@ -1915,7 +1733,6 @@ updategeom(void)
- 			dirty = 1;
- 			mons->mw = mons->ww = sw;
- 			mons->mh = mons->wh = sh;
--			updatebarpos(mons);
- 		}
- 	}
- 	if (dirty) {
-_AT_@ -1984,14 +1801,6 @@ updatesizehints(Client *c)
- 	c->isfixed = (c->maxw && c->maxh && c->maxw == c->minw && c->maxh == c->minh);
- }
- 
--void
--updatestatus(void)
--{
--	if (!gettextprop(root, XA_WM_NAME, stext, sizeof(stext)))
--		strcpy(stext, "dwm-"VERSION);
--	drawbar(selmon);
--}
--
- void
- updatetitle(Client *c)
- {
-_AT_@ -2062,13 +1871,9 @@ wintomon(Window w)
- {
- 	int x, y;
- 	Client *c;
--	Monitor *m;
- 
- 	if (w == root && getrootptr(&x, &y))
- 		return recttomon(x, y, 1, 1);
--	for (m = mons; m; m = m->next)
--		if (w == m->barwin)
--			return m;
- 	if ((c = wintoclient(w)))
- 		return c->mon;
- 	return selmon;
--- 
-2.22.0
-
diff --git a/dwm.suckless.org/patches/nostatusbar/index.md b/dwm.suckless.org/patches/nostatusbar/index.md
deleted file mode 100644
index fab98e39..00000000
--- a/dwm.suckless.org/patches/nostatusbar/index.md
+++ /dev/null
_AT_@ -1,19 +0,0 @@
-nostatusbar
-===========
-
-Description
------------
-Remove statusbar and all related code from dwm (more than 500 lines).
-dwm is already very slim. But if you do not use the built-in statusbar
-this patch will make it even more minimal and efficient.
-
-If you find any code which I forgot to remove feel free to contact me
-and/or upload an updated version of this patch.
-
-Download
---------
-* [dwm-nostatusbar-6.2.diff](dwm-nostatusbar-6.2.diff)
-
-Author
-------
-* Aleksandrs Stier
Received on Tue Aug 06 2019 - 14:01:57 CEST

This archive was generated by hypermail 2.3.0 : Tue Aug 06 2019 - 14:12:32 CEST