----
- 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