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