diff --git a/suckless/dwm/Makefile b/suckless/dwm/Makefile index c2ea8dfd..5ce19539 100644 --- a/suckless/dwm/Makefile +++ b/suckless/dwm/Makefile @@ -23,14 +23,11 @@ options: .c.o: ${CC} -c ${CFLAGS} $< -${OBJ}: config.h config.mk patches.h +${OBJ}: config.h config.mk config.h: cp config.def.h $@ -patches.h: - cp patches.def.h $@ - dwm: ${OBJ} ${CC} -o $@ ${OBJ} ${LDFLAGS} @@ -57,7 +54,6 @@ install: all ifdef YAJLLIBS cp -f dwm-msg ${DESTDIR}${PREFIX}/bin endif - #cp -f patch/dwmc ${DESTDIR}${PREFIX}/bin chmod 755 ${DESTDIR}${PREFIX}/bin/dwm ifdef YAJLLIBS chmod 755 ${DESTDIR}${PREFIX}/bin/dwm-msg diff --git a/suckless/dwm/theme.h b/suckless/dwm/colors.h similarity index 100% rename from suckless/dwm/theme.h rename to suckless/dwm/colors.h diff --git a/suckless/dwm/config.bak b/suckless/dwm/config.bak deleted file mode 100644 index dcd4b4e3..00000000 --- a/suckless/dwm/config.bak +++ /dev/null @@ -1,33 +0,0 @@ -/* See LICENSE file for copyright and license details. */ - -#include -/* appearance */ -static const int rmaster = 0; /* 1 = master at right*/ -static const unsigned int systraypinning = 0; /* 0: sloppy systray follows selected monitor, >0: pin systray to monitor X */ -static const unsigned int systrayspacing = 2; /* systray spacing */ -static const int systraypinningfailfirst = 1; /* 1: if pinning fails, display systray on the first monitor, False: display systray on the last monitor*/ -static const int showsystray = 1; /* 0 means no systray */ -static const int tag_padding = 0; -static const int vertpad = 0; /* vertical padding of bar */ -static const int sidepad = 0; /* horizontal padding of bar */ - -/* tagging */ -static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "0"}; -//static const char *alttags[] = { "󰄯", "󰄯", "󰄯", "󰄯"}; - -/* layout(s) */ -static const float mfact = 0.5; /* factor of master area size [0.05..0.95] */ -static const int nmaster = 1; /* number of clients in master area */ -static const int resizehints = 0; /* 1 means respect size hints in tiled resizals */ - -static const Layout layouts[] = { - /* symbol arrange function */ - { "鉶", tile }, /* first entry is default */ -/* { "", dwindle }, */ - { "ﱖ", grid }, - { "", centeredmaster }, - { "", centeredfloatingmaster }, - { "[M]", monocle }, - { "[D]", deck }, - { NULL, NULL }, -}; diff --git a/suckless/dwm/drw.c b/suckless/dwm/drw.c index da9101ae..cb9e1176 100644 --- a/suckless/dwm/drw.c +++ b/suckless/dwm/drw.c @@ -5,11 +5,9 @@ #include #include -#include "patches.h" #include "drw.h" #include "util.h" -#if !BAR_PANGO_PATCH #define UTF_INVALID 0xFFFD #define UTF_SIZ 4 @@ -17,13 +15,8 @@ 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}; -#endif // BAR_PANGO_PATCH -#if BAR_POWERLINE_TAGS_PATCH || BAR_POWERLINE_STATUS_PATCH -Clr transcheme[3]; -#endif // BAR_POWERLINE_TAGS_PATCH | BAR_POWERLINE_STATUS_PATCH -#if !BAR_PANGO_PATCH static long utf8decodebyte(const char c, size_t *i) { @@ -67,14 +60,9 @@ utf8decode(const char *c, long *u, size_t clen) return len; } -#endif // BAR_PANGO_PATCH Drw * -#if BAR_ALPHA_PATCH -drw_create(Display *dpy, int screen, Window root, unsigned int w, unsigned int h, Visual *visual, unsigned int depth, Colormap cmap) -#else drw_create(Display *dpy, int screen, Window root, unsigned int w, unsigned int h) -#endif // BAR_ALPHA_PATCH { Drw *drw = ecalloc(1, sizeof(Drw)); @@ -84,16 +72,8 @@ drw_create(Display *dpy, int screen, Window root, unsigned int w, unsigned int h drw->w = w; drw->h = h; - #if BAR_ALPHA_PATCH - drw->visual = visual; - drw->depth = depth; - drw->cmap = cmap; - drw->drawable = XCreatePixmap(dpy, root, w, h, depth); - drw->gc = XCreateGC(dpy, drw->drawable, 0, NULL); - #else drw->drawable = XCreatePixmap(dpy, root, w, h, DefaultDepth(dpy, screen)); drw->gc = XCreateGC(dpy, root, 0, NULL); - #endif // BAR_ALPHA_PATCH XSetLineAttributes(dpy, drw->gc, 1, LineSolid, CapButt, JoinMiter); return drw; @@ -109,11 +89,7 @@ drw_resize(Drw *drw, unsigned int w, unsigned int h) drw->h = h; if (drw->drawable) XFreePixmap(drw->dpy, drw->drawable); - #if BAR_ALPHA_PATCH - drw->drawable = XCreatePixmap(drw->dpy, drw->root, w, h, drw->depth); - #else drw->drawable = XCreatePixmap(drw->dpy, drw->root, w, h, DefaultDepth(drw->dpy, drw->screen)); - #endif // BAR_ALPHA_PATCH } void @@ -125,41 +101,6 @@ drw_free(Drw *drw) free(drw); } -#if BAR_PANGO_PATCH -/* This function is an implementation detail. Library users should use - * drw_font_create instead. - */ -static Fnt * -xfont_create(Drw *drw, const char *fontname) -{ - Fnt *font; - PangoFontMap *fontmap; - PangoContext *context; - PangoFontDescription *desc; - PangoFontMetrics *metrics; - - if (!fontname) { - die("no font specified."); - } - - font = ecalloc(1, sizeof(Fnt)); - font->dpy = drw->dpy; - - fontmap = pango_xft_get_font_map(drw->dpy, drw->screen); - context = pango_font_map_create_context(fontmap); - desc = pango_font_description_from_string(fontname); - font->layout = pango_layout_new(context); - pango_layout_set_font_description(font->layout, desc); - - metrics = pango_context_get_metrics(context, desc, pango_language_from_string ("en-us")); - font->h = pango_font_metrics_get_height(metrics) / PANGO_SCALE; - - pango_font_metrics_unref(metrics); - g_object_unref(context); - - return font; -} -#else /* This function is an implementation detail. Library users should use * drw_fontset_create instead. */ @@ -194,7 +135,6 @@ xfont_create(Drw *drw, const char *fontname, FcPattern *fontpattern) die("no font specified."); } - #if !BAR_COLOR_EMOJI_PATCH /* 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 @@ -207,7 +147,6 @@ xfont_create(Drw *drw, const char *fontname, FcPattern *fontpattern) XftFontClose(drw->dpy, xfont); return NULL; } - #endif // BAR_COLOR_EMOJI_PATCH font = ecalloc(1, sizeof(Fnt)); font->xfont = xfont; @@ -217,38 +156,18 @@ xfont_create(Drw *drw, const char *fontname, FcPattern *fontpattern) return font; } -#endif // BAR_PANGO_PATCH static void xfont_free(Fnt *font) { if (!font) return; - #if BAR_PANGO_PATCH - if (font->layout) - g_object_unref(font->layout); - #else if (font->pattern) FcPatternDestroy(font->pattern); XftFontClose(font->dpy, font->xfont); - #endif // BAR_PANGO_PATCH free(font); } -#if BAR_PANGO_PATCH -Fnt* -drw_font_create(Drw* drw, const char font[]) -{ - Fnt *fnt = NULL; - - if (!drw || !font) - return NULL; - - fnt = xfont_create(drw, font); - - return (drw->fonts = fnt); -} -#else Fnt* drw_fontset_create(Drw* drw, const char *fonts[], size_t fontcount) { @@ -266,15 +185,12 @@ drw_fontset_create(Drw* drw, const char *fonts[], size_t fontcount) } return (drw->fonts = ret); } -#endif // BAR_PANGO_PATCH void drw_fontset_free(Fnt *font) { if (font) { - #if !BAR_PANGO_PATCH drw_fontset_free(font->next); - #endif // BAR_PANGO_PATCH xfont_free(font); } } @@ -284,29 +200,16 @@ drw_clr_create( Drw *drw, Clr *dest, const char *clrname - #if BAR_ALPHA_PATCH - , unsigned int alpha - #endif // BAR_ALPHA_PATCH ) { if (!drw || !dest || !clrname) return; - #if BAR_ALPHA_PATCH - if (!XftColorAllocName(drw->dpy, drw->visual, drw->cmap, - clrname, dest)) - die("error, cannot allocate color '%s'", clrname); - - dest->pixel = (dest->pixel & 0x00ffffffU) | (alpha << 24); - #else if (!XftColorAllocName(drw->dpy, DefaultVisual(drw->dpy, drw->screen), DefaultColormap(drw->dpy, drw->screen), clrname, dest)) die("error, cannot allocate color '%s'", clrname); - #if NO_TRANSPARENT_BORDERS_PATCH dest->pixel |= 0xff << 24; - #endif // NO_TRANSPARENT_BORDERS_PATCH - #endif // BAR_ALPHA_PATCH } /* Wrapper to create color schemes. The caller has to call free(3) on the @@ -315,9 +218,6 @@ Clr * drw_scm_create( Drw *drw, char *clrnames[], - #if BAR_ALPHA_PATCH - const unsigned int alphas[], - #endif // BAR_ALPHA_PATCH size_t clrcount ) { size_t i; @@ -328,22 +228,16 @@ drw_scm_create( return NULL; for (i = 0; i < clrcount; i++) - #if BAR_ALPHA_PATCH - drw_clr_create(drw, &ret[i], clrnames[i], alphas[i]); - #else drw_clr_create(drw, &ret[i], clrnames[i]); - #endif // BAR_ALPHA_PATCH return ret; } -#if !BAR_PANGO_PATCH void drw_setfontset(Drw *drw, Fnt *set) { if (drw) drw->fonts = set; } -#endif // BAR_PANGO_PATCH void drw_setscheme(Drw *drw, Clr *scm) @@ -352,16 +246,6 @@ drw_setscheme(Drw *drw, Clr *scm) drw->scheme = scm; } -#if BAR_POWERLINE_TAGS_PATCH || BAR_POWERLINE_STATUS_PATCH -void -drw_settrans(Drw *drw, Clr *psc, Clr *nsc) -{ - if (drw) { - transcheme[0] = psc[ColBg]; transcheme[1] = nsc[ColBg]; transcheme[2] = psc[ColBorder]; - drw->scheme = transcheme; - } -} -#endif // BAR_POWERLINE_TAGS_PATCH | BAR_POWERLINE_STATUS_PATCH void drw_rect(Drw *drw, int x, int y, unsigned int w, unsigned int h, int filled, int invert) @@ -375,72 +259,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); } -#if BAR_PANGO_PATCH -int -drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lpad, const char *text, int invert, Bool markup) -{ - char buf[1024]; - int ty; - unsigned int ew; - XftDraw *d = NULL; - size_t i, len; - int render = x || y || w || h; - - 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); - #if BAR_ALPHA_PATCH - d = XftDrawCreate(drw->dpy, drw->drawable, drw->visual, drw->cmap); - #else - d = XftDrawCreate(drw->dpy, drw->drawable, - DefaultVisual(drw->dpy, drw->screen), - DefaultColormap(drw->dpy, drw->screen)); - #endif // BAR_ALPHA_PATCH - x += lpad; - w -= lpad; - } - - len = strlen(text); - - if (len) { - drw_font_getexts(drw->fonts, text, len, &ew, NULL, markup); - /* shorten text if necessary */ - for (len = MIN(len, sizeof(buf) - 1); len && ew > w; len--) - drw_font_getexts(drw->fonts, text, len, &ew, NULL, markup); - - if (len) { - memcpy(buf, text, len); - buf[len] = '\0'; - if (len < strlen(text)) - for (i = len; i && i > len - 3; buf[--i] = '.') - ; /* NOP */ - - if (render) { - ty = y + (h - drw->fonts->h) / 2; - if (markup) - pango_layout_set_markup(drw->fonts->layout, buf, len); - else - pango_layout_set_text(drw->fonts->layout, buf, len); - pango_xft_render_layout(d, &drw->scheme[invert ? ColBg : ColFg], - drw->fonts->layout, x * PANGO_SCALE, ty * PANGO_SCALE); - if (markup) /* clear markup attributes */ - pango_layout_set_attributes(drw->fonts->layout, NULL); - } - x += ew; - w -= ew; - } - } - if (d) - XftDrawDestroy(d); - - return x + (render ? w : 0); -} -#else int drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lpad, const char *text, int invert, Bool ignored) { @@ -467,13 +285,9 @@ drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lp } else { XSetForeground(drw->dpy, drw->gc, drw->scheme[invert ? ColFg : ColBg].pixel); XFillRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w, h); - #if BAR_ALPHA_PATCH - d = XftDrawCreate(drw->dpy, drw->drawable, drw->visual, drw->cmap); - #else d = XftDrawCreate(drw->dpy, drw->drawable, DefaultVisual(drw->dpy, drw->screen), DefaultColormap(drw->dpy, drw->screen)); - #endif // BAR_ALPHA_PATCH x += lpad; w -= lpad; } @@ -575,40 +389,7 @@ drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lp return x + (render ? w : 0); } -#endif // BAR_PANGO_PATCH - -#if BAR_POWERLINE_TAGS_PATCH || BAR_POWERLINE_STATUS_PATCH -void -drw_arrow(Drw *drw, int x, int y, unsigned int w, unsigned int h, int direction, int slash) -{ - if (!drw || !drw->scheme) - return; - /* direction=1 draws right arrow */ - x = direction ? x : x + w; - w = direction ? w : -w; - /* slash=1 draws slash instead of arrow */ - unsigned int hh = slash ? (direction ? 0 : h) : h/2; - - XPoint points[] = { - {x , y }, - {x + w, y + hh }, - {x , y + h }, - }; - - XPoint bg[] = { - {x , y }, - {x + w, y }, - {x + w, y + h}, - {x , y + h}, - }; - - XSetForeground(drw->dpy, drw->gc, drw->scheme[ColBg].pixel); - XFillPolygon(drw->dpy, drw->drawable, drw->gc, bg, 4, Convex, CoordModeOrigin); - XSetForeground(drw->dpy, drw->gc, drw->scheme[ColFg].pixel); - XFillPolygon(drw->dpy, drw->drawable, drw->gc, points, 3, Nonconvex, CoordModeOrigin); -} -#endif // BAR_POWERLINE_TAGS_PATCH | BAR_POWERLINE_STATUS_PATCH void drw_map(Drw *drw, Window win, int x, int y, unsigned int w, unsigned int h) @@ -628,27 +409,6 @@ drw_fontset_getwidth(Drw *drw, const char *text, Bool markup) return drw_text(drw, 0, 0, 0, 0, 0, text, 0, markup); } -#if BAR_PANGO_PATCH -void -drw_font_getexts(Fnt *font, const char *text, unsigned int len, unsigned int *w, unsigned int *h, Bool markup) -{ - if (!font || !text) - return; - - PangoRectangle r; - if (markup) - pango_layout_set_markup(font->layout, text, len); - else - pango_layout_set_text(font->layout, text, len); - pango_layout_get_extents(font->layout, 0, &r); - if (markup) /* clear markup attributes */ - pango_layout_set_attributes(font->layout, NULL); - if (w) - *w = r.width / PANGO_SCALE; - if (h) - *h = font->h; -} -#else void drw_font_getexts(Fnt *font, const char *text, unsigned int len, unsigned int *w, unsigned int *h) { @@ -663,7 +423,6 @@ drw_font_getexts(Fnt *font, const char *text, unsigned int len, unsigned int *w, if (h) *h = font->h; } -#endif // BAR_PANGO_PATCH Cur * drw_cur_create(Drw *drw, int shape) diff --git a/suckless/dwm/drw.h b/suckless/dwm/drw.h index f4eac030..61c1d90d 100644 --- a/suckless/dwm/drw.h +++ b/suckless/dwm/drw.h @@ -1,9 +1,5 @@ /* See LICENSE file for copyright and license details. */ -#if BAR_PANGO_PATCH -#include -#include -#endif // BAR_PANGO_PATCH typedef struct { Cursor cursor; @@ -12,13 +8,9 @@ typedef struct { typedef struct Fnt { Display *dpy; unsigned int h; - #if BAR_PANGO_PATCH - PangoLayout *layout; - #else XftFont *xfont; FcPattern *pattern; struct Fnt *next; - #endif // BAR_PANGO_PATCH } Fnt; enum { ColFg, ColBg, ColBorder, ColFloat, ColCount }; /* Clr scheme index */ @@ -29,11 +21,6 @@ typedef struct { Display *dpy; int screen; Window root; - #if BAR_ALPHA_PATCH - Visual *visual; - unsigned int depth; - Colormap cmap; - #endif // BAR_ALPHA_PATCH Drawable drawable; GC gc; Clr *scheme; @@ -41,22 +28,13 @@ typedef struct { } Drw; /* Drawable abstraction */ -#if BAR_ALPHA_PATCH -Drw *drw_create(Display *dpy, int screen, Window win, unsigned int w, unsigned int h, Visual *visual, unsigned int depth, Colormap cmap); -#else Drw *drw_create(Display *dpy, int screen, Window win, unsigned int w, unsigned int h); -#endif // BAR_ALPHA_PATCH void drw_resize(Drw *drw, unsigned int w, unsigned int h); void drw_free(Drw *drw); /* Fnt abstraction */ -#if BAR_PANGO_PATCH -Fnt *drw_font_create(Drw* drw, const char font[]); -void drw_font_getexts(Fnt *font, const char *text, unsigned int len, unsigned int *w, unsigned int *h, Bool markup); -#else Fnt *drw_fontset_create(Drw* drw, const char *fonts[], size_t fontcount); void drw_font_getexts(Fnt *font, const char *text, unsigned int len, unsigned int *w, unsigned int *h); -#endif // BAR_PANGO_PATCH void drw_fontset_free(Fnt* set); unsigned int drw_fontset_getwidth(Drw *drw, const char *text, Bool markup); @@ -65,16 +43,10 @@ void drw_clr_create( Drw *drw, Clr *dest, const char *clrname - #if BAR_ALPHA_PATCH - , unsigned int alpha - #endif // BAR_ALPHA_PATCH ); Clr *drw_scm_create( Drw *drw, char *clrnames[], - #if BAR_ALPHA_PATCH - const unsigned int alphas[], - #endif // BAR_ALPHA_PATCH size_t clrcount ); @@ -83,20 +55,12 @@ Cur *drw_cur_create(Drw *drw, int shape); void drw_cur_free(Drw *drw, Cur *cursor); /* Drawing context manipulation */ -#if !BAR_PANGO_PATCH void drw_setfontset(Drw *drw, Fnt *set); -#endif // BAR_PANGO_PATCH void drw_setscheme(Drw *drw, Clr *scm); -#if BAR_POWERLINE_TAGS_PATCH || BAR_POWERLINE_STATUS_PATCH -void drw_settrans(Drw *drw, Clr *psc, Clr *nsc); -#endif // BAR_POWERLINE_TAGS_PATCH | BAR_POWERLINE_STATUS_PATCH /* 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, Bool markup); -#if BAR_POWERLINE_TAGS_PATCH || BAR_POWERLINE_STATUS_PATCH -void drw_arrow(Drw *drw, int x, int y, unsigned int w, unsigned int h, int direction, int slash); -#endif // BAR_POWERLINE_TAGS_PATCH | BAR_POWERLINE_STATUS_PATCH /* Map functions */ void drw_map(Drw *drw, Window win, int x, int y, unsigned int w, unsigned int h); diff --git a/suckless/dwm/dwm.c b/suckless/dwm/dwm.c index 599fa3d5..de83bf8e 100644 --- a/suckless/dwm/dwm.c +++ b/suckless/dwm/dwm.c @@ -41,26 +41,11 @@ #endif /* XINERAMA */ #include -#include "patches.h" #include "drw.h" #include "util.h" -#if BAR_FLEXWINTITLE_PATCH -#ifndef FLEXTILE_DELUXE_LAYOUT -#define FLEXTILE_DELUXE_LAYOUT 1 -#endif -#endif -#if BAR_PANGO_PATCH -#include -#endif // BAR_PANGO_PATCH -#if SPAWNCMD_PATCH -#include -#include -#include -#define SPAWN_CWD_DELIM " []{}()<>\"':" -#endif // SPAWNCMD_PATCH /* macros */ #define Button6 6 @@ -71,56 +56,24 @@ #define BARRULES 20 #define BUTTONMASK (ButtonPressMask|ButtonReleaseMask) #define CLEANMASK(mask) (mask & ~(numlockmask|LockMask) & (ShiftMask|ControlMask|Mod1Mask|Mod2Mask|Mod3Mask|Mod4Mask|Mod5Mask)) -#if BAR_ANYBAR_PATCH -#define INTERSECT(x,y,w,h,m) (MAX(0, MIN((x)+(w),(m)->mx+(m)->mw) - MAX((x),(m)->mx)) \ - * MAX(0, MIN((y)+(h),(m)->my+(m)->mh) - MAX((y),(m)->my))) -#else #define INTERSECT(x,y,w,h,m) (MAX(0, MIN((x)+(w),(m)->wx+(m)->ww) - MAX((x),(m)->wx)) \ * MAX(0, MIN((y)+(h),(m)->wy+(m)->wh) - MAX((y),(m)->wy))) -#endif // BAR_ANYBAR_PATCH -#if ATTACHASIDE_PATCH && STICKY_PATCH -#define ISVISIBLEONTAG(C, T) ((C->tags & T) || C->issticky) -#define ISVISIBLE(C) ISVISIBLEONTAG(C, C->mon->tagset[C->mon->seltags]) -#elif ATTACHASIDE_PATCH -#define ISVISIBLEONTAG(C, T) ((C->tags & T)) -#define ISVISIBLE(C) ISVISIBLEONTAG(C, C->mon->tagset[C->mon->seltags]) -#elif STICKY_PATCH -#define ISVISIBLE(C) ((C->tags & C->mon->tagset[C->mon->seltags]) || C->issticky) -#else #define ISVISIBLE(C) ((C->tags & C->mon->tagset[C->mon->seltags])) -#endif // ATTACHASIDE_PATCH #define LENGTH(X) (sizeof X / sizeof X[0]) #define MOUSEMASK (BUTTONMASK|PointerMotionMask) #define WIDTH(X) ((X)->w + 2 * (X)->bw) #define HEIGHT(X) ((X)->h + 2 * (X)->bw) #define WTYPE "_NET_WM_WINDOW_TYPE_" -#if SCRATCHPADS_PATCH #define TOTALTAGS (NUMTAGS + LENGTH(scratchpads)) #define TAGMASK ((1 << TOTALTAGS) - 1) #define SPTAG(i) ((1 << NUMTAGS) << (i)) #define SPTAGMASK (((1 << LENGTH(scratchpads))-1) << NUMTAGS) -#else -#define TAGMASK ((1 << NUMTAGS) - 1) -#endif // SCRATCHPADS_PATCH #define TEXTWM(X) (drw_fontset_getwidth(drw, (X), True) + lrpad) #define TEXTW(X) (drw_fontset_getwidth(drw, (X), False) + lrpad) #define HIDDEN(C) ((getstate(C->win) == IconicState)) /* enums */ enum { - #if RESIZEPOINT_PATCH || RESIZECORNERS_PATCH - CurResizeBR, - CurResizeBL, - CurResizeTR, - CurResizeTL, - #endif // RESIZEPOINT_PATCH | RESIZECORNERS_PATCH - #if DRAGMFACT_PATCH - CurResizeHorzArrow, - CurResizeVertArrow, - #endif // DRAGMFACT_PATCH - #if DRAGCFACT_PATCH - CurIronCross, - #endif // DRAGCFACT_PATCH CurNormal, CurResize, CurMove, @@ -136,57 +89,14 @@ enum { SchemeTagsSel, SchemeHid, SchemeUrg, - #if BAR_FLEXWINTITLE_PATCH - SchemeFlexActTTB, - SchemeFlexActLTR, - SchemeFlexActMONO, - SchemeFlexActGRID, - SchemeFlexActGRD1, - SchemeFlexActGRD2, - SchemeFlexActGRDM, - SchemeFlexActHGRD, - SchemeFlexActDWDL, - SchemeFlexActSPRL, - SchemeFlexInaTTB, - SchemeFlexInaLTR, - SchemeFlexInaMONO, - SchemeFlexInaGRID, - SchemeFlexInaGRD1, - SchemeFlexInaGRD2, - SchemeFlexInaGRDM, - SchemeFlexInaHGRD, - SchemeFlexInaDWDL, - SchemeFlexInaSPRL, - SchemeFlexSelTTB, - SchemeFlexSelLTR, - SchemeFlexSelMONO, - SchemeFlexSelGRID, - SchemeFlexSelGRD1, - SchemeFlexSelGRD2, - SchemeFlexSelGRDM, - SchemeFlexSelHGRD, - SchemeFlexSelDWDL, - SchemeFlexSelSPRL, - SchemeFlexActFloat, - SchemeFlexInaFloat, - SchemeFlexSelFloat, - #endif // BAR_FLEXWINTITLE_PATCH }; /* color schemes */ enum { NetSupported, NetWMName, NetWMState, NetWMCheck, NetWMFullscreen, NetActiveWindow, NetWMWindowType, - #if BAR_SYSTRAY_PATCH NetSystemTray, NetSystemTrayOP, NetSystemTrayOrientation, NetSystemTrayVisual, NetWMWindowTypeDock, NetSystemTrayOrientationHorz, - #endif // BAR_SYSTRAY_PATCH - #if BAR_EWMHTAGS_PATCH - NetDesktopNames, NetDesktopViewport, NetNumberOfDesktops, NetCurrentDesktop, - #endif // BAR_EWMHTAGS_PATCH NetClientList, - #if NET_CLIENT_LIST_STACKING_PATCH - NetClientListStacking, - #endif // NET_CLIENT_LIST_STACKING_PATCH NetLast }; /* EWMH atoms */ @@ -195,16 +105,10 @@ enum { WMDelete, WMState, WMTakeFocus, - #if WINDOWROLERULE_PATCH - WMWindowRole, - #endif // WINDOWROLERULE_PATCH WMLast }; /* default atoms */ enum { - #if BAR_STATUSBUTTON_PATCH - ClkButton, - #endif // BAR_STATUSBUTTON_PATCH ClkTagBar, ClkLtSymbol, ClkStatusText, @@ -228,28 +132,10 @@ enum { BAR_ALIGN_LAST }; /* bar alignment */ -#if IPC_PATCH -typedef struct TagState TagState; -struct TagState { - int selected; - int occupied; - int urgent; -}; - -typedef struct ClientState ClientState; -struct ClientState { - int isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen; -}; -#endif // IPC_PATCH typedef union { - #if IPC_PATCH - long i; - unsigned long ui; - #else int i; unsigned int ui; - #endif // IPC_PATCH float f; const void *v; } Arg; @@ -301,66 +187,17 @@ typedef struct Client Client; struct Client { char name[256]; float mina, maxa; - #if CFACTS_PATCH - float cfact; - #endif // CFACTS_PATCH int x, y, w, h; - #if SAVEFLOATS_PATCH || EXRESIZE_PATCH int sfx, sfy, sfw, sfh; /* stored float geometry, used on mode revert */ - #endif // SAVEFLOATS_PATCH / EXRESIZE_PATCH int oldx, oldy, oldw, oldh; int basew, baseh, incw, inch, maxw, maxh, minw, minh; int bw, oldbw; unsigned int tags; - #if SWITCHTAG_PATCH - unsigned int switchtag; - #endif // SWITCHTAG_PATCH int isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen; - #if !FAKEFULLSCREEN_PATCH && FAKEFULLSCREEN_CLIENT_PATCH - int fakefullscreen; - #endif // FAKEFULLSCREEN_CLIENT_PATCH - #if EXRESIZE_PATCH - unsigned char expandmask; - int expandx1, expandy1, expandx2, expandy2; - #if !MAXIMIZE_PATCH - int wasfloating; - #endif // MAXIMIZE_PATCH - #endif // EXRESIZE_PATCH - #if MAXIMIZE_PATCH - int ismax, wasfloating; - #endif // MAXIMIZE_PATCH - #if AUTORESIZE_PATCH - int needresize; - #endif // AUTORESIZE_PATCH - #if CENTER_PATCH - int iscentered; - #endif // CENTER_PATCH - #if ISPERMANENT_PATCH - int ispermanent; - #endif // ISPERMANENT_PATCH - #if PLACEMOUSE_PATCH - int beingmoved; - #endif // PLACEMOUSE_PATCH - #if SWALLOW_PATCH - int isterminal, noswallow; - pid_t pid; - #endif // SWALLOW_PATCH - #if STEAM_PATCH - int issteam; - #endif // STEAM_PATCH - #if STICKY_PATCH - int issticky; - #endif // STICKY_PATCH Client *next; Client *snext; - #if SWALLOW_PATCH - Client *swallowing; - #endif // SWALLOW_PATCH Monitor *mon; Window win; - #if IPC_PATCH - ClientState prevstate; - #endif // IPC_PATCH }; typedef struct { @@ -370,59 +207,26 @@ typedef struct { const Arg arg; } Key; -#if FLEXTILE_DELUXE_LAYOUT -typedef struct { - int nmaster; - int nstack; - int layout; - int masteraxis; // master stack area - int stack1axis; // primary stack area - int stack2axis; // secondary stack area, e.g. centered master - void (*symbolfunc)(Monitor *, unsigned int); -} LayoutPreset; -#endif // FLEXTILE_DELUXE_LAYOUT typedef struct { const char *symbol; void (*arrange)(Monitor *); - #if FLEXTILE_DELUXE_LAYOUT - LayoutPreset preset; - #endif // FLEXTILE_DELUXE_LAYOUT } Layout; -#if INSETS_PATCH -typedef struct { - int x; - int y; - int w; - int h; -} Inset; -#endif // INSETS_PATCH -#if PERTAG_PATCH typedef struct Pertag Pertag; -#endif // PERTAG_PATCH struct Monitor { int index; char ltsymbol[16]; float mfact; - #if FLEXTILE_DELUXE_LAYOUT - int ltaxis[4]; - int nstack; - #endif // FLEXTILE_DELUXE_LAYOUT int nmaster; int num; int mx, my, mw, mh; /* screen size */ int wx, wy, ww, wh; /* window area */ - #if VANITYGAPS_PATCH int gappih; /* horizontal gap between windows */ int gappiv; /* vertical gap between windows */ int gappoh; /* horizontal outer gaps */ int gappov; /* vertical outer gaps */ - #endif // VANITYGAPS_PATCH - #if SETBORDERPX_PATCH - unsigned int borderpx; - #endif // SETBORDERPX_PATCH unsigned int seltags; unsigned int sellt; unsigned int tagset[2]; @@ -433,52 +237,17 @@ struct Monitor { Monitor *next; Bar *bar; const Layout *lt[2]; - #if BAR_ALTERNATIVE_TAGS_PATCH - unsigned int alttag; - #endif // BAR_ALTERNATIVE_TAGS_PATCH - #if PERTAG_PATCH Pertag *pertag; - #endif // PERTAG_PATCH - #if INSETS_PATCH - Inset inset; - #endif // INSETS_PATCH - #if IPC_PATCH - char lastltsymbol[16]; - TagState tagstate; - Client *lastsel; - const Layout *lastlt; - #endif // IPC_PATCH }; typedef struct { const char *class; - #if WINDOWROLERULE_PATCH - const char *role; - #endif // WINDOWROLERULE_PATCH const char *instance; const char *title; const char *wintype; unsigned int tags; - #if SWITCHTAG_PATCH - int switchtag; - #endif // SWITCHTAG_PATCH - #if CENTER_PATCH - int iscentered; - #endif // CENTER_PATCH int isfloating; - #if SELECTIVEFAKEFULLSCREEN_PATCH && FAKEFULLSCREEN_CLIENT_PATCH - int isfakefullscreen; - #endif // SELECTIVEFAKEFULLSCREEN_PATCH - #if ISPERMANENT_PATCH - int ispermanent; - #endif // ISPERMANENT_PATCH - #if SWALLOW_PATCH - int isterminal; - int noswallow; - #endif // SWALLOW_PATCH - #if FLOATPOS_PATCH const char *floatpos; - #endif // FLOATPOS_PATCH int monitor; } Rule; @@ -486,47 +255,13 @@ typedef struct { /* Cross patch compatibility rule macro helper macros */ #define FLOATING , .isfloating = 1 -#if CENTER_PATCH -#define CENTERED , .iscentered = 1 -#else #define CENTERED -#endif // CENTER_PATCH -#if ISPERMANENT_PATCH -#define PERMANENT , .ispermanent = 1 -#else #define PERMANENT -#endif // ISPERMANENT_PATCH -#if SELECTIVEFAKEFULLSCREEN_PATCH && FAKEFULLSCREEN_CLIENT_PATCH -#define FAKEFULLSCREEN , .isfakefullscreen = 1 -#else #define FAKEFULLSCREEN -#endif // SELECTIVEFAKEFULLSCREEN_PATCH -#if SWALLOW_PATCH -#define NOSWALLOW , .noswallow = 1 -#define TERMINAL , .isterminal = 1 -#else #define NOSWALLOW #define TERMINAL -#endif // SWALLOW_PATCH -#if SWITCHTAG_PATCH -#define SWITCHTAG , .switchtag = 1 -#else #define SWITCHTAG -#endif // SWITCHTAG_PATCH -#if MONITOR_RULES_PATCH -typedef struct { - int monitor; - #if PERTAG_PATCH - int tag; - #endif // PERTAG_PATCH - int layout; - float mfact; - int nmaster; - int showbar; - int topbar; -} MonitorRule; -#endif // MONITOR_RULES_PATCH /* function declarations */ static void applyrules(Client *c); @@ -551,44 +286,28 @@ static Monitor *dirtomon(int dir); static void drawbar(Monitor *m); static void drawbars(void); static void drawbarwin(Bar *bar); -#if !FOCUSONCLICK_PATCH static void enternotify(XEvent *e); -#endif // FOCUSONCLICK_PATCH static void expose(XEvent *e); static void focus(Client *c); static void focusin(XEvent *e); static void focusmon(const Arg *arg); -#if !STACKER_PATCH static void focusstack(const Arg *arg); -#endif // STACKER_PATCH static Atom getatomprop(Client *c, Atom prop); static int getrootptr(int *x, int *y); static long getstate(Window w); static int gettextprop(Window w, Atom atom, char *text, unsigned int size); static void grabbuttons(Client *c, int focused); -#if KEYMODES_PATCH -static void grabdefkeys(void); -#else static void grabkeys(void); -#endif // KEYMODES_PATCH static void incnmaster(const Arg *arg); -#if KEYMODES_PATCH -static void keydefpress(XEvent *e); -#else static void keypress(XEvent *e); -#endif // KEYMODES_PATCH static void killclient(const Arg *arg); static void manage(Window w, XWindowAttributes *wa); static void mappingnotify(XEvent *e); static void maprequest(XEvent *e); -#if !FOCUSONCLICK_PATCH static void motionnotify(XEvent *e); -#endif // FOCUSONCLICK_PATCH static void movemouse(const Arg *arg); static Client *nexttiled(Client *c); -#if !ZOOMSWAP_PATCH || TAGINTOSTACK_ALLMASTER_PATCH || TAGINTOSTACK_ONEMASTER_PATCH static void pop(Client *); -#endif // !ZOOMSWAP_PATCH / TAGINTOSTACK_ALLMASTER_PATCH / TAGINTOSTACK_ONEMASTER_PATCH static void propertynotify(XEvent *e); static void quit(const Arg *arg); static Monitor *recttomon(int x, int y, int w, int h); @@ -598,11 +317,7 @@ static void resizemouse(const Arg *arg); static void restack(Monitor *m); static void run(void); static void scan(void); -#if BAR_SYSTRAY_PATCH static int sendevent(Window w, Atom proto, int m, long d0, long d1, long d2, long d3, long d4); -#else -static int sendevent(Client *c, Atom proto); -#endif // BAR_SYSTRAY_PATCH static void sendmon(Client *c, Monitor *m); static void setclientstate(Client *c, long state); static void setfocus(Client *c); @@ -614,9 +329,6 @@ static void seturgent(Client *c, int urg); static void showhide(Client *c); static void sigchld(int unused); static void spawn(const Arg *arg); -#if RIODRAW_PATCH -static pid_t spawncmd(const Arg *arg); -#endif // RIODRAW_PATCH static void tag(const Arg *arg); static void tagmon(const Arg *arg); static void togglebar(const Arg *arg); @@ -649,28 +361,8 @@ static void zoom(const Arg *arg); /* variables */ static const char broken[] = "broken"; -#if BAR_PANGO_PATCH || BAR_STATUS2D_PATCH && !BAR_STATUSCOLORS_PATCH static char stext[1024]; -#else -static char stext[512]; -#endif // BAR_PANGO_PATCH | BAR_STATUS2D_PATCH -#if BAR_EXTRASTATUS_PATCH || BAR_STATUSCMD_PATCH -#if BAR_STATUS2D_PATCH static char rawstext[1024]; -#else -static char rawstext[512]; -#endif // BAR_STATUS2D_PATCH -#endif // BAR_EXTRASTATUS_PATCH | BAR_STATUSCMD_PATCH -#if BAR_EXTRASTATUS_PATCH -#if BAR_STATUS2D_PATCH && !BAR_STATUSCOLORS_PATCH -static char estext[1024]; -#else -static char estext[512]; -#endif // BAR_STATUS2D_PATCH -#if BAR_STATUSCMD_PATCH -static char rawestext[1024]; -#endif // BAR_STATUS2D_PATCH | BAR_STATUSCMD_PATCH -#endif // BAR_EXTRASTATUS_PATCH static int screen; static int sw, sh; /* X display screen geometry width, height */ @@ -681,53 +373,28 @@ static int lrpad; /* sum of left and right padding for text */ * when moving (or resizing) client windows from one monitor to another. This variable is used * internally to ignore such configure requests while movemouse or resizemouse are being used. */ static int ignoreconfigurerequests = 0; -#if WARP_PATCH -static int force_warp = 0; // force warp in some situations, e.g. killclient -static int ignore_warp = 0; // force skip warp in some situations, e.g. dragmfact, dragcfact -#endif // WARP_PATCH static int (*xerrorxlib)(Display *, XErrorEvent *); static unsigned int numlockmask = 0; -#if RIODRAW_PATCH -static int riodimensions[4] = { -1, -1, -1, -1 }; -static pid_t riopid = 0; -#endif // RIODRAW_PATCH static void (*handler[LASTEvent]) (XEvent *) = { [ButtonPress] = buttonpress, - #if COMBO_PATCH || BAR_HOLDBAR_PATCH [ButtonRelease] = keyrelease, - #endif // COMBO_PATCH / BAR_HOLDBAR_PATCH [ClientMessage] = clientmessage, [ConfigureRequest] = configurerequest, [ConfigureNotify] = configurenotify, [DestroyNotify] = destroynotify, - #if !FOCUSONCLICK_PATCH [EnterNotify] = enternotify, - #endif // FOCUSONCLICK_PATCH [Expose] = expose, [FocusIn] = focusin, [KeyPress] = keypress, - #if COMBO_PATCH || BAR_HOLDBAR_PATCH [KeyRelease] = keyrelease, - #endif // COMBO_PATCH / BAR_HOLDBAR_PATCH [MappingNotify] = mappingnotify, [MapRequest] = maprequest, - #if !FOCUSONCLICK_PATCH [MotionNotify] = motionnotify, - #endif // FOCUSONCLICK_PATCH [PropertyNotify] = propertynotify, - #if BAR_SYSTRAY_PATCH [ResizeRequest] = resizerequest, - #endif // BAR_SYSTRAY_PATCH [UnmapNotify] = unmapnotify }; -#if BAR_SYSTRAY_PATCH static Atom wmatom[WMLast], netatom[NetLast], xatom[XLast]; -#else -static Atom wmatom[WMLast], netatom[NetLast]; -#endif // BAR_SYSTRAY_PATCH -#if ON_EMPTY_KEYS_PATCH -static int isempty = 0; -#endif // ON_EMPTY_KEYS_PATCH static int running = 1; static Cur *cursor[CurLast]; static Clr **scheme; @@ -739,7 +406,7 @@ static Window root, wmcheckwin; /* configuration, allows nested code to access above variables */ #include "config.h" -#include "theme.h" +#include "colors.h" #include "rules.h" #include "keybind.h" @@ -747,11 +414,7 @@ static Window root, wmcheckwin; /* compile-time check if all tags fit into an unsigned int bit array. */ -#if SCRATCHPAD_ALT_1_PATCH -struct NumTags { char limitexceeded[NUMTAGS > 30 ? -1 : 1]; }; -#else struct NumTags { char limitexceeded[NUMTAGS > 31 ? -1 : 1]; }; -#endif // SCRATCHPAD_ALT_1_PATCH /* function implementations */ void @@ -759,140 +422,47 @@ applyrules(Client *c) { const char *class, *instance; Atom wintype; - #if WINDOWROLERULE_PATCH - char role[64]; - #endif // WINDOWROLERULE_PATCH unsigned int i; - #if SWITCHTAG_PATCH - unsigned int newtagset; - #endif // SWITCHTAG_PATCH const Rule *r; Monitor *m; XClassHint ch = { NULL, NULL }; /* rule matching */ - #if SWALLOW_PATCH - c->noswallow = -1; - #endif // SWALLOW_PATCH c->isfloating = 0; c->tags = 0; XGetClassHint(dpy, c->win, &ch); class = ch.res_class ? ch.res_class : broken; instance = ch.res_name ? ch.res_name : broken; wintype = getatomprop(c, netatom[NetWMWindowType]); - #if WINDOWROLERULE_PATCH - gettextprop(c->win, wmatom[WMWindowRole], role, sizeof(role)); - #endif // WINDOWROLERULE_PATCH - #if STEAM_PATCH - if (strstr(class, "Steam") || strstr(class, "steam_app_")) - c->issteam = 1; - #endif // STEAM_PATCH for (i = 0; i < LENGTH(rules); i++) { r = &rules[i]; if ((!r->title || strstr(c->name, r->title)) && (!r->class || strstr(class, r->class)) - #if WINDOWROLERULE_PATCH - && (!r->role || strstr(role, r->role)) - #endif // WINDOWROLERULE_PATCH && (!r->instance || strstr(instance, r->instance)) && (!r->wintype || wintype == XInternAtom(dpy, r->wintype, False))) { - #if CENTER_PATCH - c->iscentered = r->iscentered; - #endif // CENTER_PATCH - #if ISPERMANENT_PATCH - c->ispermanent = r->ispermanent; - #endif // ISPERMANENT_PATCH - #if SELECTIVEFAKEFULLSCREEN_PATCH && FAKEFULLSCREEN_CLIENT_PATCH - c->fakefullscreen = r->isfakefullscreen; - #endif // SELECTIVEFAKEFULLSCREEN_PATCH - #if SWALLOW_PATCH - c->isterminal = r->isterminal; - c->noswallow = r->noswallow; - #endif // SWALLOW_PATCH c->isfloating = r->isfloating; c->tags |= r->tags; - #if SCRATCHPADS_PATCH if ((r->tags & SPTAGMASK) && r->isfloating) { c->x = c->mon->wx + (c->mon->ww / 2 - WIDTH(c) / 2); c->y = c->mon->wy + (c->mon->wh / 2 - HEIGHT(c) / 2); } - #endif // SCRATCHPADS_PATCH for (m = mons; m && m->num != r->monitor; m = m->next); if (m) c->mon = m; - #if FLOATPOS_PATCH if (c->isfloating && r->floatpos) { - #if CENTER_PATCH - c->iscentered = 0; - #endif // CENTER_PATCH setfloatpos(c, r->floatpos); } - #endif // FLOATPOS_PATCH - - #if SWITCHTAG_PATCH - #if SWALLOW_PATCH - if (r->switchtag && ( - c->noswallow > 0 || - !termforwin(c) || - !(c->isfloating && swallowfloating && c->noswallow < 0))) - #else - if (r->switchtag) - #endif // SWALLOW_PATCH - { - selmon = c->mon; - if (r->switchtag == 2 || r->switchtag == 4) - newtagset = c->mon->tagset[c->mon->seltags] ^ c->tags; - else - newtagset = c->tags; - - /* Switch to the client's tag, but only if that tag is not already shown */ - if (newtagset && !(c->tags & c->mon->tagset[c->mon->seltags])) { - if (r->switchtag == 3 || r->switchtag == 4) - c->switchtag = c->mon->tagset[c->mon->seltags]; - if (r->switchtag == 1 || r->switchtag == 3) { - #if PERTAG_PATCH - pertagview(&((Arg) { .ui = newtagset })); - arrange(c->mon); - #else - view(&((Arg) { .ui = newtagset })); - #endif // PERTAG_PATCH - } else { - c->mon->tagset[c->mon->seltags] = newtagset; - arrange(c->mon); - } - } - } - #endif // SWITCHTAG_PATCH - #if ONLY_ONE_RULE_MATCH_PATCH - break; - #endif // ONLY_ONE_RULE_MATCH_PATCH + } } if (ch.res_class) XFree(ch.res_class); if (ch.res_name) XFree(ch.res_name); - #if EMPTYVIEW_PATCH - if (c->tags & TAGMASK) c->tags = c->tags & TAGMASK; - #if SCRATCHPADS_PATCH - else if (c->mon->tagset[c->mon->seltags]) c->tags = c->mon->tagset[c->mon->seltags] & ~SPTAGMASK; - #elif SCRATCHPAD_ALT_1_PATCH - else if (c->tags != SCRATCHPAD_MASK && c->mon->tagset[c->mon->seltags]) c->tags = c->mon->tagset[c->mon->seltags]; - #else - else if (c->mon->tagset[c->mon->seltags]) c->tags = c->mon->tagset[c->mon->seltags]; - #endif // SCRATCHPADS_PATCH - else c->tags = 1; - #elif SCRATCHPADS_PATCH c->tags = c->tags & TAGMASK ? c->tags & TAGMASK : (c->mon->tagset[c->mon->seltags] & ~SPTAGMASK); - #elif SCRATCHPAD_ALT_1_PATCH - if (c->tags != SCRATCHPAD_MASK) - c->tags = c->tags & TAGMASK ? c->tags & TAGMASK : c->mon->tagset[c->mon->seltags]; - #else - c->tags = c->tags & TAGMASK ? c->tags & TAGMASK : c->mon->tagset[c->mon->seltags]; - #endif // EMPTYVIEW_PATCH } int @@ -981,11 +551,6 @@ arrangemon(Monitor *m) strncpy(m->ltsymbol, m->lt[m->sellt]->symbol, sizeof m->ltsymbol); if (m->lt[m->sellt]->arrange) m->lt[m->sellt]->arrange(m); - #if ROUNDED_CORNERS_PATCH - Client *c; - for (c = nexttiled(m->clients); c; c = nexttiled(c->next)) - drawroundedcorners(c); - #endif // ROUNDED_CORNERS_PATCH } void @@ -1016,9 +581,6 @@ buttonpress(XEvent *e) click = ClkRootWin; /* focus monitor if necessary */ if ((m = wintomon(ev->window)) && m != selmon - #if FOCUSONCLICK_PATCH - && (focusonwheel || (ev->button != Button4 && ev->button != Button5)) - #endif // FOCUSONCLICK_PATCH ) { unfocus(selmon->sel, 1, NULL); selmon = m; @@ -1049,13 +611,8 @@ buttonpress(XEvent *e) } if (click == ClkRootWin && (c = wintoclient(ev->window))) { - #if FOCUSONCLICK_PATCH - if (focusonwheel || (ev->button != Button4 && ev->button != Button5)) - focus(c); - #else focus(c); restack(selmon); - #endif // FOCUSONCLICK_PATCH XAllowEvents(dpy, ReplayPointer, CurrentTime); click = ClkClientWin; } @@ -1063,11 +620,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)) { - #if BAR_WINTITLEACTIONS_PATCH - buttons[i].func((click == ClkTagBar || click == ClkWinTitle) && buttons[i].arg.i == 0 ? &arg : &buttons[i].arg); - #else buttons[i].func(click == ClkTagBar && buttons[i].arg.i == 0 ? &arg : &buttons[i].arg); - #endif // BAR_WINTITLEACTIONS_PATCH } } } @@ -1098,7 +651,6 @@ cleanup(void) XUngrabKey(dpy, AnyKey, AnyModifier, root); while (mons) cleanupmon(mons); - #if BAR_SYSTRAY_PATCH if (showsystray && systray) { if (systray->win) { XUnmapWindow(dpy, systray->win); @@ -1106,14 +658,9 @@ cleanup(void) } free(systray); } - #endif // BAR_SYSTRAY_PATCH for (i = 0; i < CurLast; i++) drw_cur_free(drw, cursor[i]); - #if BAR_STATUS2D_PATCH && !BAR_STATUSCOLORS_PATCH for (i = 0; i < LENGTH(colors) + 1; i++) - #else - for (i = 0; i < LENGTH(colors); i++) - #endif // BAR_STATUS2D_PATCH free(scheme[i]); free(scheme); XDestroyWindow(dpy, wmcheckwin); @@ -1122,12 +669,6 @@ cleanup(void) XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime); XDeleteProperty(dpy, root, netatom[NetActiveWindow]); - #if IPC_PATCH - ipc_cleanup(); - - if (close(epoll_fd) < 0) - fprintf(stderr, "Failed to close epoll file descriptor\n"); - #endif // IPC_PATCH } void @@ -1148,10 +689,8 @@ cleanupmon(Monitor *mon) XDestroyWindow(dpy, bar->win); } mon->bar = bar->next; - #if BAR_SYSTRAY_PATCH if (systray && bar == systray->bar) systray->bar = NULL; - #endif // BAR_SYSTRAY_PATCH free(bar); } free(mon); @@ -1160,17 +699,11 @@ cleanupmon(Monitor *mon) void clientmessage(XEvent *e) { - #if BAR_SYSTRAY_PATCH XWindowAttributes wa; XSetWindowAttributes swa; - #endif // BAR_SYSTRAY_PATCH XClientMessageEvent *cme = &e->xclient; Client *c = wintoclient(cme->window); - #if FOCUSONNETACTIVE_PATCH - unsigned int i; - #endif // FOCUSONNETACTIVE_PATCH - #if BAR_SYSTRAY_PATCH if (showsystray && systray && cme->window == systray->win && cme->message_type == netatom[NetSystemTrayOP]) { /* add systray icons */ if (cme->data.l[1] == SYSTEM_TRAY_REQUEST_DOCK) { @@ -1209,44 +742,20 @@ clientmessage(XEvent *e) } return; } - #endif // BAR_SYSTRAY_PATCH if (!c) return; if (cme->message_type == netatom[NetWMState]) { if (cme->data.l[1] == netatom[NetWMFullscreen] || cme->data.l[2] == netatom[NetWMFullscreen]) { - #if FAKEFULLSCREEN_CLIENT_PATCH - if (c->fakefullscreen == 2 && c->isfullscreen) - c->fakefullscreen = 3; - #endif // FAKEFULLSCREEN_CLIENT_PATCH setfullscreen(c, (cme->data.l[0] == 1 /* _NET_WM_STATE_ADD */ || (cme->data.l[0] == 2 /* _NET_WM_STATE_TOGGLE */ - #if !FAKEFULLSCREEN_PATCH && !c->isfullscreen - #endif // !FAKEFULLSCREEN_PATCH ))); } } else if (cme->message_type == netatom[NetActiveWindow]) { - #if FOCUSONNETACTIVE_PATCH - if (c->tags & c->mon->tagset[c->mon->seltags]) - focus(c); - else { - for (i = 0; i < NUMTAGS && !((1 << i) & c->tags); i++); - if (i < NUMTAGS) { - if (c != selmon->sel) - unfocus(selmon->sel, 0, NULL); - selmon = c->mon; - if (((1 << i) & TAGMASK) != selmon->tagset[selmon->seltags]) - view(&((Arg) { .ui = 1 << i })); - focus(c); - restack(selmon); - } - } - #else if (c != selmon->sel && !c->isurgent) seturgent(c, 1); - #endif // FOCUSONNETACTIVE_PATCH } } @@ -1274,9 +783,7 @@ configurenotify(XEvent *e) { Monitor *m; Bar *bar; - #if !FAKEFULLSCREEN_PATCH Client *c; - #endif // !FAKEFULLSCREEN_PATCH XConfigureEvent *ev = &e->xconfigure; int dirty; /* TODO: updategeom handling sucks, needs to be simplified */ @@ -1288,15 +795,9 @@ configurenotify(XEvent *e) drw_resize(drw, sw, sh); updatebars(); for (m = mons; m; m = m->next) { - #if !FAKEFULLSCREEN_PATCH for (c = m->clients; c; c = c->next) - #if FAKEFULLSCREEN_CLIENT_PATCH - if (c->isfullscreen && c->fakefullscreen != 1) - #else if (c->isfullscreen) - #endif // FAKEFULLSCREEN_CLIENT_PATCH resizeclient(c, m->mx, m->my, m->mw, m->mh); - #endif // !FAKEFULLSCREEN_PATCH for (bar = m->bar; bar; bar = bar->next) XMoveResizeWindow(dpy, bar->win, bar->bx, bar->by, bar->bw, bar->bh); } @@ -1311,9 +812,6 @@ configurerequest(XEvent *e) { Client *c; Monitor *m; - #if BAR_ANYBAR_PATCH - Bar *bar; - #endif // BAR_ANYBAR_PATCH XConfigureRequestEvent *ev = &e->xconfigurerequest; XWindowChanges wc; @@ -1325,18 +823,6 @@ configurerequest(XEvent *e) c->bw = ev->border_width; else if (c->isfloating || !selmon->lt[selmon->sellt]->arrange) { m = c->mon; - #if STEAM_PATCH - if (!c->issteam) { - if (ev->value_mask & CWX) { - c->oldx = c->x; - c->x = m->mx + ev->x; - } - if (ev->value_mask & CWY) { - c->oldy = c->y; - c->y = m->my + ev->y; - } - } - #else if (ev->value_mask & CWX) { c->oldx = c->x; c->x = m->mx + ev->x; @@ -1345,7 +831,6 @@ configurerequest(XEvent *e) c->oldy = c->y; c->y = m->my + ev->y; } - #endif // STEAM_PATCH if (ev->value_mask & CWWidth) { c->oldw = c->w; c->w = ev->width; @@ -1362,24 +847,11 @@ configurerequest(XEvent *e) configure(c); if (ISVISIBLE(c)) XMoveResizeWindow(dpy, c->win, c->x, c->y, c->w, c->h); - #if AUTORESIZE_PATCH - else - c->needresize = 1; - #endif // AUTORESIZE_PATCH } else configure(c); } else { wc.x = ev->x; wc.y = ev->y; - #if BAR_ANYBAR_PATCH - m = wintomon(ev->window); - for (bar = m->bar; bar; bar = bar->next) { - if (bar->win == ev->window) { - wc.y = bar->by; - wc.x = bar->bx; - } - } - #endif // BAR_ANYBAR_PATCH wc.width = ev->width; wc.height = ev->height; wc.border_width = ev->border_width; @@ -1395,70 +867,24 @@ createmon(void) { Monitor *m, *mon; int i, n, mi, max_bars = 2, istopbar = topbar; - #if MONITOR_RULES_PATCH - int layout; - #endif // MONITOR_RULES_PATCH const BarRule *br; Bar *bar; - #if MONITOR_RULES_PATCH - int j; - const MonitorRule *mr; - #endif // MONITOR_RULES_PATCH m = ecalloc(1, sizeof(Monitor)); - #if EMPTYVIEW_PATCH - m->tagset[0] = m->tagset[1] = 0; - #else m->tagset[0] = m->tagset[1] = 1; - #endif // EMPTYVIEW_PATCH m->mfact = mfact; m->nmaster = nmaster; - #if FLEXTILE_DELUXE_LAYOUT - m->nstack = nstack; - #endif // FLEXTILE_DELUXE_LAYOUT m->showbar = showbar; - #if SETBORDERPX_PATCH - m->borderpx = borderpx; - #endif // SETBORDERPX_PATCH - #if VANITYGAPS_PATCH m->gappih = gappih; m->gappiv = gappiv; m->gappoh = gappoh; m->gappov = gappov; - #endif // VANITYGAPS_PATCH for (mi = 0, mon = mons; mon; mon = mon->next, mi++); // monitor index m->index = mi; - #if MONITOR_RULES_PATCH - for (j = 0; j < LENGTH(monrules); j++) { - mr = &monrules[j]; - if ((mr->monitor == -1 || mr->monitor == mi) - #if PERTAG_PATCH - && (mr->tag <= 0 || (m->tagset[0] & (1 << (mr->tag - 1)))) - #endif // PERTAG_PATCH - ) { - layout = MAX(mr->layout, 0); - layout = MIN(layout, LENGTH(layouts) - 1); - m->lt[0] = &layouts[layout]; - m->lt[1] = &layouts[1 % LENGTH(layouts)]; - strncpy(m->ltsymbol, layouts[layout].symbol, sizeof m->ltsymbol); - - if (mr->mfact > -1) - m->mfact = mr->mfact; - if (mr->nmaster > -1) - m->nmaster = mr->nmaster; - if (mr->showbar > -1) - m->showbar = mr->showbar; - if (mr->topbar > -1) - istopbar = mr->topbar; - break; - } - } - #else m->lt[0] = &layouts[0]; m->lt[1] = &layouts[1 % LENGTH(layouts)]; strncpy(m->ltsymbol, layouts[0].symbol, sizeof m->ltsymbol); - #endif // MONITOR_RULES_PATCH /* Derive the number of bars for this monitor based on bar rules */ for (n = -1, i = 0; i < LENGTH(barrules); i++) { @@ -1477,92 +903,32 @@ createmon(void) istopbar = !istopbar; bar->showbar = 1; bar->external = 0; - #if BAR_BORDER_PATCH - bar->borderpx = borderpx; - #else bar->borderpx = 0; - #endif // BAR_BORDER_PATCH bar->bh = bh + bar->borderpx * 2; bar->borderscheme = SchemeNorm; } - #if FLEXTILE_DELUXE_LAYOUT - m->ltaxis[LAYOUT] = m->lt[0]->preset.layout; - m->ltaxis[MASTER] = m->lt[0]->preset.masteraxis; - m->ltaxis[STACK] = m->lt[0]->preset.stack1axis; - m->ltaxis[STACK2] = m->lt[0]->preset.stack2axis; - #endif // FLEXTILE_DELUXE_LAYOUT - #if PERTAG_PATCH if (!(m->pertag = (Pertag *)calloc(1, sizeof(Pertag)))) die("fatal: could not malloc() %u bytes\n", sizeof(Pertag)); m->pertag->curtag = m->pertag->prevtag = 1; for (i = 0; i <= NUMTAGS; i++) { - #if FLEXTILE_DELUXE_LAYOUT - m->pertag->nstacks[i] = m->nstack; - #endif // FLEXTILE_DELUXE_LAYOUT - #if !MONITOR_RULES_PATCH /* init nmaster */ m->pertag->nmasters[i] = m->nmaster; /* init mfacts */ m->pertag->mfacts[i] = m->mfact; - #if PERTAGBAR_PATCH - /* init showbar */ - m->pertag->showbars[i] = m->showbar; - #endif // PERTAGBAR_PATCH - #endif // MONITOR_RULES_PATCH - #if ZOOMSWAP_PATCH - m->pertag->prevzooms[i] = NULL; - #endif // ZOOMSWAP_PATCH /* init layouts */ - #if MONITOR_RULES_PATCH - for (j = 0; j < LENGTH(monrules); j++) { - mr = &monrules[j]; - if ((mr->monitor == -1 || mr->monitor == mi) && (mr->tag == -1 || mr->tag == i)) { - layout = MAX(mr->layout, 0); - layout = MIN(layout, LENGTH(layouts) - 1); - m->pertag->ltidxs[i][0] = &layouts[layout]; - m->pertag->ltidxs[i][1] = m->lt[0]; - m->pertag->nmasters[i] = (mr->nmaster > -1 ? mr->nmaster : m->nmaster); - m->pertag->mfacts[i] = (mr->mfact > -1 ? mr->mfact : m->mfact); - #if PERTAGBAR_PATCH - m->pertag->showbars[i] = (mr->showbar > -1 ? mr->showbar : m->showbar); - #endif // PERTAGBAR_PATCH - #if FLEXTILE_DELUXE_LAYOUT - m->pertag->ltaxis[i][LAYOUT] = m->pertag->ltidxs[i][0]->preset.layout; - m->pertag->ltaxis[i][MASTER] = m->pertag->ltidxs[i][0]->preset.masteraxis; - m->pertag->ltaxis[i][STACK] = m->pertag->ltidxs[i][0]->preset.stack1axis; - m->pertag->ltaxis[i][STACK2] = m->pertag->ltidxs[i][0]->preset.stack2axis; - #endif // FLEXTILE_DELUXE_LAYOUT - break; - } - } - #else m->pertag->ltidxs[i][0] = m->lt[0]; m->pertag->ltidxs[i][1] = m->lt[1]; - #if FLEXTILE_DELUXE_LAYOUT - /* init flextile axes */ - m->pertag->ltaxis[i][LAYOUT] = m->ltaxis[LAYOUT]; - m->pertag->ltaxis[i][MASTER] = m->ltaxis[MASTER]; - m->pertag->ltaxis[i][STACK] = m->ltaxis[STACK]; - m->pertag->ltaxis[i][STACK2] = m->ltaxis[STACK2]; - #endif // FLEXTILE_DELUXE_LAYOUT - #endif // MONITOR_RULES_PATCH m->pertag->sellts[i] = m->sellt; - #if VANITYGAPS_PATCH m->pertag->enablegaps[i] = 1; - #endif // VANITYGAPS_PATCH } - #endif // PERTAG_PATCH - #if INSETS_PATCH - m->inset = default_inset; - #endif // INSETS_PATCH return m; } @@ -1570,35 +936,14 @@ void destroynotify(XEvent *e) { Client *c; - #if BAR_ANYBAR_PATCH - Monitor *m; - Bar *bar; - #endif // BAR_ANYBAR_PATCH XDestroyWindowEvent *ev = &e->xdestroywindow; if ((c = wintoclient(ev->window))) unmanage(c, 1); - #if SWALLOW_PATCH - else if ((c = swallowingclient(ev->window))) - unmanage(c->swallowing, 1); - #endif // SWALLOW_PATCH - #if BAR_SYSTRAY_PATCH else if (showsystray && (c = wintosystrayicon(ev->window))) { removesystrayicon(c); drawbarwin(systray->bar); } - #endif // BAR_SYSTRAY_PATCH - #if BAR_ANYBAR_PATCH - else { - m = wintomon(ev->window); - for (bar = m->bar; bar; bar = bar->next) { - if (bar->win == ev->window) { - unmanagealtbar(ev->window); - break; - } - } - } - #endif // BAR_ANYBAR_PATCH } void @@ -1776,14 +1121,11 @@ drawbarwin(Bar *bar) drw_map(drw, bar->win, 0, 0, bar->bw, bar->bh); } -#if !FOCUSONCLICK_PATCH void enternotify(XEvent *e) { Client *c; - #if LOSEFULLSCREEN_PATCH Client *sel; - #endif // LOSEFULLSCREEN_PATCH Monitor *m; XCrossingEvent *ev = &e->xcrossing; @@ -1792,19 +1134,13 @@ enternotify(XEvent *e) c = wintoclient(ev->window); m = c ? c->mon : wintomon(ev->window); if (m != selmon) { - #if LOSEFULLSCREEN_PATCH sel = selmon->sel; selmon = m; unfocus(sel, 1, c); - #else - unfocus(selmon->sel, 1, c); - selmon = m; - #endif // LOSEFULLSCREEN_PATCH } else if (!c || c == selmon->sel) return; focus(c); } -#endif // FOCUSONCLICK_PATCH void expose(XEvent *e) @@ -1831,12 +1167,10 @@ focus(Client *c) detachstack(c); attachstack(c); grabbuttons(c, 1); - #if !BAR_FLEXWINTITLE_PATCH if (c->isfloating) XSetWindowBorder(dpy, c->win, scheme[SchemeSel][ColFloat].pixel); else XSetWindowBorder(dpy, c->win, scheme[SchemeSel][ColBorder].pixel); - #endif // BAR_FLEXWINTITLE_PATCH setfocus(c); } else { XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); @@ -1845,12 +1179,6 @@ focus(Client *c) selmon->sel = c; drawbars(); - #if ON_EMPTY_KEYS_PATCH - if ((isempty && selmon->sel) || (!isempty && !selmon->sel)) { - isempty = !isempty; - grabkeys(); - } - #endif // ON_EMPTY_KEYS_PATCH } /* there are some broken focus acquiring clients needing extra handling */ @@ -1867,29 +1195,18 @@ void focusmon(const Arg *arg) { Monitor *m; - #if LOSEFULLSCREEN_PATCH Client *sel; - #endif // LOSEFULLSCREEN_PATCH if (!mons->next) return; if ((m = dirtomon(arg->i)) == selmon) return; - #if LOSEFULLSCREEN_PATCH sel = selmon->sel; selmon = m; unfocus(sel, 0, NULL); - #else - unfocus(selmon->sel, 0, NULL); - selmon = m; - #endif // LOSEFULLSCREEN_PATCH focus(NULL); - #if WARP_PATCH - warp(selmon->sel); - #endif // WARP_PATCH } -#if !STACKER_PATCH void focusstack(const Arg *arg) { @@ -1897,25 +1214,8 @@ focusstack(const Arg *arg) if (!selmon->sel) return; - #if ALWAYSFULLSCREEN_PATCH if (selmon->sel->isfullscreen) return; - #endif // ALWAYSFULLSCREEN_PATCH - #if BAR_WINTITLEACTIONS_PATCH - if (arg->i > 0) { - for (c = selmon->sel->next; c && (!ISVISIBLE(c) || (arg->i == 1 && HIDDEN(c))); c = c->next); - if (!c) - for (c = selmon->clients; c && (!ISVISIBLE(c) || (arg->i == 1 && HIDDEN(c))); c = c->next); - } else { - for (i = selmon->clients; i != selmon->sel; i = i->next) - if (ISVISIBLE(i) && !(arg->i == -1 && HIDDEN(i))) - c = i; - if (!c) - for (; i; i = i->next) - if (ISVISIBLE(i) && !(arg->i == -1 && HIDDEN(i))) - c = i; - } - #else if (arg->i > 0) { for (c = selmon->sel->next; c && !ISVISIBLE(c); c = c->next); if (!c) @@ -1929,13 +1229,11 @@ focusstack(const Arg *arg) if (ISVISIBLE(i)) c = i; } - #endif // BAR_WINTITLEACTIONS_PATCH if (c) { focus(c); restack(selmon); } } -#endif // STACKER_PATCH Atom getatomprop(Client *c, Atom prop) @@ -1945,7 +1243,6 @@ getatomprop(Client *c, Atom prop) unsigned char *p = NULL; Atom da, atom = None; - #if BAR_SYSTRAY_PATCH /* FIXME getatomprop should return the number of items and a pointer to * the stored data instead of this workaround */ Atom req = XA_ATOM; @@ -1959,13 +1256,6 @@ getatomprop(Client *c, Atom prop) atom = ((Atom *)p)[1]; XFree(p); } - #else - if (XGetWindowProperty(dpy, c->win, prop, 0L, sizeof atom, False, XA_ATOM, - &da, &di, &dl, &dl, &p) == Success && p) { - atom = *(Atom *)p; - XFree(p); - } - #endif // BAR_SYSTRAY_PATCH return atom; } @@ -2035,9 +1325,6 @@ grabbuttons(Client *c, int focused) BUTTONMASK, GrabModeSync, GrabModeSync, None, None); for (i = 0; i < LENGTH(buttons); i++) if (buttons[i].click == ClkClientWin - #if NO_MOD_BUTTONS_PATCH - && (nomodbuttons || buttons[i].mask != 0) - #endif // NO_MOD_BUTTONS_PATCH ) for (j = 0; j < LENGTH(modifiers); j++) XGrabButton(dpy, buttons[i].button, @@ -2048,11 +1335,7 @@ grabbuttons(Client *c, int focused) } void -#if KEYMODES_PATCH -grabdefkeys(void) -#else grabkeys(void) -#endif // KEYMODES_PATCH { updatenumlockmask(); { @@ -2066,25 +1349,13 @@ grabkeys(void) for (j = 0; j < LENGTH(modifiers); j++) XGrabKey(dpy, code, keys[i].mod | modifiers[j], root, True, GrabModeAsync, GrabModeAsync); - #if ON_EMPTY_KEYS_PATCH - if (!selmon->sel) - for (i = 0; i < LENGTH(on_empty_keys); i++) - if ((code = XKeysymToKeycode(dpy, on_empty_keys[i].keysym))) - for (j = 0; j < LENGTH(modifiers); j++) - XGrabKey(dpy, code, on_empty_keys[i].mod | modifiers[j], root, - True, GrabModeAsync, GrabModeAsync); - #endif // ON_EMPTY_KEYS_PATCH } } void incnmaster(const Arg *arg) { - #if PERTAG_PATCH selmon->nmaster = selmon->pertag->nmasters[selmon->pertag->curtag] = MAX(selmon->nmaster + arg->i, 0); - #else - selmon->nmaster = MAX(selmon->nmaster + arg->i, 0); - #endif // PERTAG_PATCH arrange(selmon); } @@ -2101,11 +1372,7 @@ isuniquegeom(XineramaScreenInfo *unique, size_t n, XineramaScreenInfo *info) #endif /* XINERAMA */ void -#if KEYMODES_PATCH -keydefpress(XEvent *e) -#else keypress(XEvent *e) -#endif // KEYMODES_PATCH { unsigned int i; int keysyms_return; @@ -2119,31 +1386,15 @@ keypress(XEvent *e) && CLEANMASK(keys[i].mod) == CLEANMASK(ev->state) && keys[i].func) keys[i].func(&(keys[i].arg)); - #if ON_EMPTY_KEYS_PATCH - if (!selmon->sel) - for (i = 0; i < LENGTH(on_empty_keys); i++) - if (*keysym == on_empty_keys[i].keysym - && CLEANMASK(on_empty_keys[i].mod) == CLEANMASK(ev->state) - && on_empty_keys[i].func) - on_empty_keys[i].func(&(on_empty_keys[i].arg)); - #endif // ON_EMPTY_KEYS_PATCH XFree(keysym); } void killclient(const Arg *arg) { - #if ISPERMANENT_PATCH - if (!selmon->sel || selmon->sel->ispermanent) - #else if (!selmon->sel) - #endif // ISPERMANENT_PATCH return; - #if BAR_SYSTRAY_PATCH if (!sendevent(selmon->sel->win, wmatom[WMDelete], NoEventMask, wmatom[WMDelete], CurrentTime, 0, 0, 0)) - #else - if (!sendevent(selmon->sel, wmatom[WMDelete])) - #endif // BAR_SYSTRAY_PATCH { XGrabServer(dpy); XSetErrorHandler(xerrordummy); @@ -2152,77 +1403,33 @@ killclient(const Arg *arg) XSync(dpy, False); XSetErrorHandler(xerror); XUngrabServer(dpy); - #if WARP_PATCH - force_warp = 1; - #endif // WARP_PATCH } - #if SWAPFOCUS_PATCH && PERTAG_PATCH - selmon->pertag->prevclient[selmon->pertag->curtag] = NULL; - #endif // SWAPFOCUS_PATCH } void manage(Window w, XWindowAttributes *wa) { Client *c, *t = NULL; - #if SWALLOW_PATCH - Client *term = NULL; - #endif // SWALLOW_PATCH Window trans = None; XWindowChanges wc; c = ecalloc(1, sizeof(Client)); c->win = w; - #if SWALLOW_PATCH - c->pid = winpid(w); - #endif // SWALLOW_PATCH /* geometry */ c->x = c->oldx = wa->x; c->y = c->oldy = wa->y; c->w = c->oldw = wa->width; c->h = c->oldh = wa->height; c->oldbw = wa->border_width; - #if CFACTS_PATCH - c->cfact = 1.0; - #endif // CFACTS_PATCH updatetitle(c); if (XGetTransientForHint(dpy, w, &trans) && (t = wintoclient(trans))) { c->mon = t->mon; c->tags = t->tags; - #if SETBORDERPX_PATCH - c->bw = c->mon->borderpx; - #else c->bw = borderpx; - #endif // SETBORDERPX_PATCH - #if CENTER_TRANSIENT_WINDOWS_BY_PARENT_PATCH - c->x = t->x + WIDTH(t) / 2 - WIDTH(c) / 2; - c->y = t->y + HEIGHT(t) / 2 - HEIGHT(c) / 2; - #elif CENTER_PATCH && CENTER_TRANSIENT_WINDOWS_PATCH - c->iscentered = 1; - #elif CENTER_TRANSIENT_WINDOWS_PATCH - c->x = c->mon->wx + (c->mon->ww - WIDTH(c)) / 2; - c->y = c->mon->wy + (c->mon->wh - HEIGHT(c)) / 2; - #elif CENTER_PATCH - if (c->x == c->mon->wx && c->y == c->mon->wy) - c->iscentered = 1; - #endif // CENTER_TRANSIENT_WINDOWS_PATCH | CENTER_TRANSIENT_WINDOWS_BY_PARENT_PATCH | CENTER_PATCH } else { c->mon = selmon; - #if CENTER_PATCH - if (c->x == c->mon->wx && c->y == c->mon->wy) - c->iscentered = 1; - #endif // CENTER_PATCH - #if SETBORDERPX_PATCH - c->bw = c->mon->borderpx; - #else c->bw = borderpx; - #endif // SETBORDERPX_PATCH applyrules(c); - #if SWALLOW_PATCH - term = termforwin(c); - if (term) - c->mon = term->mon; - #endif // SWALLOW_PATCH } if (c->x + WIDTH(c) > c->mon->mx + c->mon->mw) @@ -2236,43 +1443,21 @@ manage(Window w, XWindowAttributes *wa) wc.border_width = c->bw; XConfigureWindow(dpy, w, CWBorderWidth, &wc); - #if !BAR_FLEXWINTITLE_PATCH if (c->isfloating) XSetWindowBorder(dpy, w, scheme[SchemeNorm][ColFloat].pixel); else XSetWindowBorder(dpy, w, scheme[SchemeNorm][ColBorder].pixel); - #endif // BAR_FLEXWINTITLE_PATCH configure(c); /* propagates border_width, if size doesn't change */ - #if !FLOATPOS_PATCH - updatesizehints(c); - #endif // FLOATPOS_PATCH if (getatomprop(c, netatom[NetWMState]) == netatom[NetWMFullscreen]) setfullscreen(c, 1); updatewmhints(c); - #if DECORATION_HINTS_PATCH - updatemotifhints(c); - #endif // DECORATION_HINTS_PATCH - #if CENTER_PATCH - if (c->iscentered) { - c->x = c->mon->wx + (c->mon->ww - WIDTH(c)) / 2; - c->y = c->mon->wy + (c->mon->wh - HEIGHT(c)) / 2; - } - #endif // CENTER_PATCH - #if SAVEFLOATS_PATCH || EXRESIZE_PATCH c->sfx = -9999; c->sfy = -9999; c->sfw = c->w; c->sfh = c->h; - #endif // SAVEFLOATS_PATCH / EXRESIZE_PATCH XSelectInput(dpy, w, EnterWindowMask|FocusChangeMask|PropertyChangeMask|StructureNotifyMask); grabbuttons(c, 0); - #if MAXIMIZE_PATCH - c->wasfloating = 0; - c->ismax = 0; - #elif EXRESIZE_PATCH - c->wasfloating = 0; - #endif // MAXIMIZE_PATCH / EXRESIZE_PATCH if (!c->isfloating) c->isfloating = c->oldstate = trans != None || c->isfixed; @@ -2280,73 +1465,20 @@ manage(Window w, XWindowAttributes *wa) XRaiseWindow(dpy, c->win); XSetWindowBorder(dpy, w, scheme[SchemeNorm][ColFloat].pixel); } - #if ATTACHABOVE_PATCH || ATTACHASIDE_PATCH || ATTACHBELOW_PATCH || ATTACHBOTTOM_PATCH - attachx(c); - #else attach(c); - #endif attachstack(c); XChangeProperty(dpy, root, netatom[NetClientList], XA_WINDOW, 32, PropModeAppend, (unsigned char *) &(c->win), 1); - #if NET_CLIENT_LIST_STACKING_PATCH - XChangeProperty(dpy, root, netatom[NetClientListStacking], XA_WINDOW, 32, PropModePrepend, - (unsigned char *) &(c->win), 1); - #endif // NET_CLIENT_LIST_STACKING_PATCH XMoveResizeWindow(dpy, c->win, c->x + 2 * sw, c->y, c->w, c->h); /* some windows require this */ - #if BAR_WINTITLEACTIONS_PATCH - if (!HIDDEN(c)) - setclientstate(c, NormalState); - #else setclientstate(c, NormalState); - #endif // BAR_WINTITLEACTIONS_PATCH if (c->mon == selmon) unfocus(selmon->sel, 0, c); c->mon->sel = c; - #if SWALLOW_PATCH - if (!(term && swallow(term, c))) { - #if RIODRAW_PATCH - if (riopid && (!riodraw_matchpid || isdescprocess(riopid, c->pid))) { - if (riodimensions[3] != -1) - rioposition(c, riodimensions[0], riodimensions[1], riodimensions[2], riodimensions[3]); - else { - killclient(&((Arg) { .v = c })); - return; - } - } - #endif // RIODRAW_PATCH - arrange(c->mon); - #if BAR_WINTITLEACTIONS_PATCH - if (!HIDDEN(c)) - XMapWindow(dpy, c->win); - #else - XMapWindow(dpy, c->win); - #endif // BAR_WINTITLEACTIONS_PATCH - } - #else - #if RIODRAW_PATCH - if (riopid) { - if (riodimensions[3] != -1) - rioposition(c, riodimensions[0], riodimensions[1], riodimensions[2], riodimensions[3]); - else { - killclient(&((Arg) { .v = c })); - return; - } - } - #endif // RIODRAW_PATCH arrange(c->mon); - #if BAR_WINTITLEACTIONS_PATCH - if (!HIDDEN(c)) - XMapWindow(dpy, c->win); - #else XMapWindow(dpy, c->win); - #endif // BAR_WINTITLEACTIONS_PATCH - #endif // SWALLOW_PATCH focus(NULL); - #if BAR_EWMHTAGS_PATCH - setfloatinghint(c); - #endif // BAR_EWMHTAGS_PATCH } void @@ -2365,54 +1497,38 @@ maprequest(XEvent *e) static XWindowAttributes wa; XMapRequestEvent *ev = &e->xmaprequest; - #if BAR_SYSTRAY_PATCH Client *i; if (showsystray && systray && (i = wintosystrayicon(ev->window))) { sendevent(i->win, netatom[Xembed], StructureNotifyMask, CurrentTime, XEMBED_WINDOW_ACTIVATE, 0, systray->win, XEMBED_EMBEDDED_VERSION); drawbarwin(systray->bar); } - #endif // BAR_SYSTRAY_PATCH if (!XGetWindowAttributes(dpy, ev->window, &wa)) return; if (wa.override_redirect) return; - #if BAR_ANYBAR_PATCH - if (wmclasscontains(ev->window, altbarclass, "")) - managealtbar(ev->window, &wa); - else - #endif // BAR_ANYBAR_PATCH if (!wintoclient(ev->window)) manage(ev->window, &wa); } -#if !FOCUSONCLICK_PATCH void motionnotify(XEvent *e) { static Monitor *mon = NULL; Monitor *m; - #if LOSEFULLSCREEN_PATCH Client *sel; - #endif // LOSEFULLSCREEN_PATCH XMotionEvent *ev = &e->xmotion; if (ev->window != root) return; if ((m = recttomon(ev->x_root, ev->y_root, 1, 1)) != mon && mon) { - #if LOSEFULLSCREEN_PATCH sel = selmon->sel; selmon = m; unfocus(sel, 1, NULL); - #else - unfocus(selmon->sel, 1, NULL); - selmon = m; - #endif // LOSEFULLSCREEN_PATCH focus(NULL); } mon = m; } -#endif // FOCUSONCLICK_PATCH void movemouse(const Arg *arg) @@ -2425,15 +1541,8 @@ movemouse(const Arg *arg) if (!(c = selmon->sel)) return; - #if !FAKEFULLSCREEN_PATCH - #if FAKEFULLSCREEN_CLIENT_PATCH - if (c->isfullscreen && c->fakefullscreen != 1) /* no support moving fullscreen windows by mouse */ - return; - #else if (c->isfullscreen) /* no support moving fullscreen windows by mouse */ return; - #endif // FAKEFULLSCREEN_CLIENT_PATCH - #endif // FAKEFULLSCREEN_PATCH restack(selmon); ocx = c->x; ocy = c->y; @@ -2468,57 +1577,38 @@ movemouse(const Arg *arg) ny = selmon->wy + selmon->wh - HEIGHT(c); if (!c->isfloating && selmon->lt[selmon->sellt]->arrange && (abs(nx - c->x) > snap || abs(ny - c->y) > snap)) { - #if SAVEFLOATS_PATCH || EXRESIZE_PATCH c->sfx = -9999; // disable savefloats when using movemouse - #endif // SAVEFLOATS_PATCH | EXRESIZE_PATCH togglefloating(NULL); } if (!selmon->lt[selmon->sellt]->arrange || c->isfloating) { - #if SAVEFLOATS_PATCH || EXRESIZE_PATCH resize(c, nx, ny, c->w, c->h, 1); /* save last known float coordinates */ c->sfx = nx; c->sfy = ny; - #else - resize(c, nx, ny, c->w, c->h, 1); - #endif // SAVEFLOATS_PATCH / EXRESIZE_PATCH } - #if ROUNDED_CORNERS_PATCH - drawroundedcorners(c); - #endif // ROUNDED_CORNERS_PATCH break; } } while (ev.type != ButtonRelease); XUngrabPointer(dpy, CurrentTime); if ((m = recttomon(c->x, c->y, c->w, c->h)) != selmon) { - #if SCRATCHPADS_PATCH if (c->tags & SPTAGMASK) { c->mon->tagset[c->mon->seltags] ^= (c->tags & SPTAGMASK); m->tagset[m->seltags] |= (c->tags & SPTAGMASK); } - #endif // SCRATCHPADS_PATCH sendmon(c, m); selmon = m; focus(NULL); } - #if ROUNDED_CORNERS_PATCH - drawroundedcorners(c); - #endif // ROUNDED_CORNERS_PATCH ignoreconfigurerequests = 0; } Client * nexttiled(Client *c) { - #if BAR_WINTITLEACTIONS_PATCH - for (; c && (c->isfloating || !ISVISIBLE(c) || HIDDEN(c)); c = c->next); - #else for (; c && (c->isfloating || !ISVISIBLE(c)); c = c->next); - #endif // BAR_WINTITLEACTIONS_PATCH return c; } -#if !ZOOMSWAP_PATCH || TAGINTOSTACK_ALLMASTER_PATCH || TAGINTOSTACK_ONEMASTER_PATCH void pop(Client *c) { @@ -2527,7 +1617,6 @@ pop(Client *c) focus(c); arrange(c->mon); } -#endif // !ZOOMSWAP_PATCH / TAGINTOSTACK_ALLMASTER_PATCH / TAGINTOSTACK_ONEMASTER_PATCH void propertynotify(XEvent *e) @@ -2536,7 +1625,6 @@ propertynotify(XEvent *e) Window trans; XPropertyEvent *ev = &e->xproperty; - #if BAR_SYSTRAY_PATCH if (showsystray && (c = wintosystrayicon(ev->window))) { if (ev->atom == XA_WM_NORMAL_HINTS) { updatesizehints(c); @@ -2546,15 +1634,9 @@ propertynotify(XEvent *e) updatesystrayiconstate(c, ev); drawbarwin(systray->bar); } - #endif // BAR_SYSTRAY_PATCH if ((ev->window == root) && (ev->atom == XA_WM_NAME)) { - #if DWMC_PATCH || FSIGNAL_PATCH - if (!fake_signal()) - updatestatus(); - #else updatestatus(); - #endif // DWMC_PATCH / FSIGNAL_PATCH } else if (ev->state == PropertyDelete) { return; /* ignore */ } else if ((c = wintoclient(ev->window))) { @@ -2579,58 +1661,14 @@ propertynotify(XEvent *e) if (c == c->mon->sel) drawbar(c->mon); } - #if DECORATION_HINTS_PATCH - if (ev->atom == motifatom) - updatemotifhints(c); - #endif // DECORATION_HINTS_PATCH } } void quit(const Arg *arg) { - #if COOL_AUTOSTART_PATCH - size_t i; - #endif // COOL_AUTOSTART_PATCH - #if ONLYQUITONEMPTY_PATCH - unsigned int n; - Window *junk = malloc(1); - - XQueryTree(dpy, root, junk, junk, &junk, &n); - - #if COOL_AUTOSTART_PATCH - if (n - autostart_len <= quit_empty_window_count) - #else - if (n <= quit_empty_window_count) - #endif // COOL_AUTOSTART_PATCH - { - #if RESTARTSIG_PATCH - if (arg->i) - restart = 1; - #endif // RESTARTSIG_PATCH - running = 0; - } - else - printf("[dwm] not exiting (n=%d)\n", n); - - free(junk); - #else - #if RESTARTSIG_PATCH - if (arg->i) - restart = 1; - #endif // RESTARTSIG_PATCH running = 0; - #endif // ONLYQUITONEMPTY_PATCH - - #if COOL_AUTOSTART_PATCH - /* kill child processes */ - for (i = 0; i < autostart_len; i++) { - if (0 < autostart_pids[i]) { - kill(autostart_pids[i], SIGTERM); - waitpid(autostart_pids[i], NULL, 0); - } - } - #endif // COOL_AUTOSTART_PATCH + } Monitor * @@ -2663,66 +1701,16 @@ resizeclient(Client *c, int x, int y, int w, int h) c->oldy = c->y; c->y = wc.y = y; c->oldw = c->w; c->w = wc.width = w; c->oldh = c->h; c->h = wc.height = h; - #if EXRESIZE_PATCH - c->expandmask = 0; - #endif // EXRESIZE_PATCH wc.border_width = c->bw; - #if NOBORDER_PATCH - if (((nexttiled(c->mon->clients) == c && !nexttiled(c->next)) - #if MONOCLE_LAYOUT - || &monocle == c->mon->lt[c->mon->sellt]->arrange - #endif // MONOCLE_LAYOUT - #if DECK_LAYOUT - || (&deck == c->mon->lt[c->mon->sellt]->arrange && - c->mon->nmaster == 0) - #endif // DECK_LAYOUT - #if FLEXTILE_DELUXE_LAYOUT - || (&flextile == c->mon->lt[c->mon->sellt]->arrange && ( - (c->mon->ltaxis[LAYOUT] == NO_SPLIT && - c->mon->ltaxis[MASTER] == MONOCLE) || - (c->mon->ltaxis[STACK] == MONOCLE && - c->mon->nmaster == 0))) - #endif //FLEXTILE_DELUXE_LAYOUT - ) - #if FAKEFULLSCREEN_CLIENT_PATCH - && (c->fakefullscreen == 1 || !c->isfullscreen) - #else - && !c->isfullscreen - #endif // FAKEFULLSCREEN_CLIENT_PATCH - && !c->isfloating - && c->mon->lt[c->mon->sellt]->arrange) { - wc.width += c->bw * 2; - wc.height += c->bw * 2; - wc.border_width = 0; - } - #endif // NOBORDER_PATCH XConfigureWindow(dpy, c->win, CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc); configure(c); - #if FAKEFULLSCREEN_CLIENT_PATCH - if (c->fakefullscreen == 1) - /* Exception: if the client was in actual fullscreen and we exit out to fake fullscreen - * mode, then the focus would drift to whichever window is under the mouse cursor at the - * time. To avoid this we pass True to XSync which will make the X server disregard any - * other events in the queue thus cancelling the EnterNotify event that would otherwise - * have changed focus. */ - XSync(dpy, True); - else - XSync(dpy, False); - #else XSync(dpy, False); - #endif // FAKEFULLSCREEN_CLIENT_PATCH } void resizemouse(const Arg *arg) { int ocx, ocy, nw, nh; - #if RESIZEPOINT_PATCH || RESIZECORNERS_PATCH - int opx, opy, och, ocw, nx, ny; - int horizcorner, vertcorner; - unsigned int dui; - Window dummy; - #endif // RESIZEPOINT_PATCH | RESIZECORNERS_PATCH Client *c; Monitor *m; XEvent ev; @@ -2730,44 +1718,15 @@ resizemouse(const Arg *arg) if (!(c = selmon->sel)) return; - #if !FAKEFULLSCREEN_PATCH - #if FAKEFULLSCREEN_CLIENT_PATCH - if (c->isfullscreen && c->fakefullscreen != 1) /* no support resizing fullscreen windows by mouse */ - return; - #else if (c->isfullscreen) /* no support resizing fullscreen windows by mouse */ return; - #endif // FAKEFULLSCREEN_CLIENT_PATCH - #endif // !FAKEFULLSCREEN_PATCH restack(selmon); ocx = c->x; ocy = c->y; - #if RESIZEPOINT_PATCH - och = c->h; - ocw = c->w; - #elif RESIZECORNERS_PATCH - och = c->y + c->h; - ocw = c->x + c->w; - #endif // RESIZEPOINT_PATCH | RESIZECORNERS_PATCH - #if RESIZEPOINT_PATCH || RESIZECORNERS_PATCH - if (!XQueryPointer(dpy, c->win, &dummy, &dummy, &opx, &opy, &nx, &ny, &dui)) - return; - horizcorner = nx < c->w / 2; - vertcorner = ny < c->h / 2; - if (XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync, - None, cursor[horizcorner | (vertcorner << 1)]->cursor, CurrentTime) != GrabSuccess) - return; - #if RESIZECORNERS_PATCH - XWarpPointer (dpy, None, c->win, 0, 0, 0, 0, - horizcorner ? (-c->bw) : (c->w + c->bw - 1), - vertcorner ? (-c->bw) : (c->h + c->bw - 1)); - #endif // RESIZECORNERS_PATCH - #else if (XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync, None, cursor[CurResize]->cursor, CurrentTime) != GrabSuccess) return; XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->bw - 1, c->h + c->bw - 1); - #endif // RESIZEPOINT_PATCH | RESIZECORNERS_PATCH ignoreconfigurerequests = 1; do { XMaskEvent(dpy, MOUSEMASK|ExposureMask|SubstructureRedirectMask, &ev); @@ -2782,75 +1741,35 @@ resizemouse(const Arg *arg) continue; lasttime = ev.xmotion.time; - #if RESIZEPOINT_PATCH - nx = horizcorner ? (ocx + ev.xmotion.x - opx) : c->x; - ny = vertcorner ? (ocy + ev.xmotion.y - opy) : c->y; - nw = MAX(horizcorner ? (ocx + ocw - nx) : (ocw + (ev.xmotion.x - opx)), 1); - nh = MAX(vertcorner ? (ocy + och - ny) : (och + (ev.xmotion.y - opy)), 1); - #elif RESIZECORNERS_PATCH - nx = horizcorner ? ev.xmotion.x : c->x; - ny = vertcorner ? ev.xmotion.y : c->y; - nw = MAX(horizcorner ? (ocw - nx) : (ev.xmotion.x - ocx - 2 * c->bw + 1), 1); - nh = MAX(vertcorner ? (och - ny) : (ev.xmotion.y - ocy - 2 * c->bw + 1), 1); - #else nw = MAX(ev.xmotion.x - ocx - 2 * c->bw + 1, 1); nh = MAX(ev.xmotion.y - ocy - 2 * c->bw + 1, 1); - #endif // RESIZEPOINT_PATCH | RESIZECORNERS_PATCH if (c->mon->wx + nw >= selmon->wx && c->mon->wx + nw <= selmon->wx + selmon->ww && c->mon->wy + nh >= selmon->wy && c->mon->wy + nh <= selmon->wy + selmon->wh) { if (!c->isfloating && selmon->lt[selmon->sellt]->arrange && (abs(nw - c->w) > snap || abs(nh - c->h) > snap)) { - #if SAVEFLOATS_PATCH || EXRESIZE_PATCH c->sfx = -9999; // disable savefloats when using resizemouse - #endif // SAVEFLOATS_PATCH | EXRESIZE_PATCH togglefloating(NULL); } } if (!selmon->lt[selmon->sellt]->arrange || c->isfloating) { - #if RESIZECORNERS_PATCH || RESIZEPOINT_PATCH - resizeclient(c, nx, ny, nw, nh); - #if SAVEFLOATS_PATCH || EXRESIZE_PATCH - /* save last known float dimensions */ - c->sfx = nx; - c->sfy = ny; - c->sfw = nw; - c->sfh = nh; - #endif // SAVEFLOATS_PATCH / EXRESIZE_PATCH - #else resize(c, c->x, c->y, nw, nh, 1); - #if SAVEFLOATS_PATCH || EXRESIZE_PATCH c->sfx = c->x; c->sfy = c->y; c->sfw = nw; c->sfh = nh; - #endif // SAVEFLOATS_PATCH / EXRESIZE_PATCH - #endif // RESIZECORNERS_PATCH - #if ROUNDED_CORNERS_PATCH - drawroundedcorners(c); - #endif // ROUNDED_CORNERS_PATCH } break; } } while (ev.type != ButtonRelease); - #if !RESIZEPOINT_PATCH - #if RESIZECORNERS_PATCH - XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, - horizcorner ? (-c->bw) : (c->w + c->bw - 1), - vertcorner ? (-c->bw) : (c->h + c->bw - 1)); - #else XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->bw - 1, c->h + c->bw - 1); - #endif // RESIZECORNERS_PATCH - #endif // RESIZEPOINT_PATCH XUngrabPointer(dpy, CurrentTime); while (XCheckMaskEvent(dpy, EnterWindowMask, &ev)); if ((m = recttomon(c->x, c->y, c->w, c->h)) != selmon) { - #if SCRATCHPADS_PATCH if (c->tags & SPTAGMASK) { c->mon->tagset[c->mon->seltags] ^= (c->tags & SPTAGMASK); m->tagset[m->seltags] |= (c->tags & SPTAGMASK); } - #endif // SCRATCHPADS_PATCH sendmon(c, m); selmon = m; focus(NULL); @@ -2864,9 +1783,6 @@ restack(Monitor *m) Client *c; XEvent ev; XWindowChanges wc; - #if WARP_PATCH && FLEXTILE_DELUXE_LAYOUT - int n; - #endif // WARP_PATCH drawbar(m); if (!m->sel) @@ -2884,65 +1800,8 @@ restack(Monitor *m) } XSync(dpy, False); while (XCheckMaskEvent(dpy, EnterWindowMask, &ev)); - #if WARP_PATCH && FLEXTILE_DELUXE_LAYOUT || WARP_PATCH && MONOCLE_LAYOUT - #if FLEXTILE_DELUXE_LAYOUT - for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); - #endif // FLEXTILE_DELUXE_LAYOUT - if (m == selmon && (m->tagset[m->seltags] & m->sel->tags) && ( - #if MONOCLE_LAYOUT && FLEXTILE_DELUXE_LAYOUT - (m->lt[m->sellt]->arrange != &monocle - && !(m->ltaxis[MASTER] == MONOCLE && (abs(m->ltaxis[LAYOUT] == NO_SPLIT || !m->nmaster || n <= m->nmaster)))) - #elif MONOCLE_LAYOUT - m->lt[m->sellt]->arrange != &monocle - #else - !(m->ltaxis[MASTER] == MONOCLE && (abs(m->ltaxis[LAYOUT] == NO_SPLIT || !m->nmaster || n <= m->nmaster))) - #endif // FLEXTILE_DELUXE_LAYOUT - || m->sel->isfloating) - ) - warp(m->sel); - #endif // WARP_PATCH } -#if IPC_PATCH -void -run(void) -{ - int event_count = 0; - const int MAX_EVENTS = 10; - struct epoll_event events[MAX_EVENTS]; - - XSync(dpy, False); - - /* main event loop */ - while (running) { - event_count = epoll_wait(epoll_fd, events, MAX_EVENTS, -1); - - for (int i = 0; i < event_count; i++) { - int event_fd = events[i].data.fd; - DEBUG("Got event from fd %d\n", event_fd); - - if (event_fd == dpy_fd) { - // -1 means EPOLLHUP - if (handlexevent(events + i) == -1) - return; - } else if (event_fd == ipc_get_sock_fd()) { - ipc_handle_socket_epoll_event(events + i); - } else if (ipc_is_client_registered(event_fd)) { - if (ipc_handle_client_epoll_event(events + i, mons, &lastselmon, selmon, - NUMTAGS, layouts, LENGTH(layouts)) < 0) { - fprintf(stderr, "Error handling IPC event on fd %d\n", event_fd); - } - } else { - fprintf(stderr, "Got event from unknown fd %d, ptr %p, u32 %d, u64 %lu", - event_fd, events[i].data.ptr, events[i].data.u32, - events[i].data.u64); - fprintf(stderr, " with events %d\n", events[i].events); - return; - } - } - } -} -#else void run(void) { @@ -2953,15 +1812,10 @@ run(void) if (handler[ev.type]) handler[ev.type](&ev); /* call handler */ } -#endif // IPC_PATCH void scan(void) { - #if SWALLOW_PATCH - scanner = 1; - char swin[256]; - #endif // SWALLOW_PATCH unsigned int i, num; Window d1, d2, *wins = NULL; XWindowAttributes wa; @@ -2971,17 +1825,8 @@ scan(void) if (!XGetWindowAttributes(dpy, wins[i], &wa) || wa.override_redirect || XGetTransientForHint(dpy, wins[i], &d1)) continue; - #if BAR_ANYBAR_PATCH - if (wmclasscontains(wins[i], altbarclass, "")) - managealtbar(wins[i], &wa); - else - #endif // BAR_ANYBAR_PATCH if (wa.map_state == IsViewable || getstate(wins[i]) == IconicState) manage(wins[i], &wa); - #if SWALLOW_PATCH - else if (gettextprop(wins[i], netatom[NetClientList], swin, sizeof swin)) - manage(wins[i], &wa); - #endif // SWALLOW_PATCH } for (i = 0; i < num; i++) { /* now the transients */ if (!XGetWindowAttributes(dpy, wins[i], &wa)) @@ -2992,64 +1837,23 @@ scan(void) } XFree(wins); } - #if SWALLOW_PATCH - scanner = 0; - #endif // SWALLOW_PATCH } void sendmon(Client *c, Monitor *m) { - #if EXRESIZE_PATCH - Monitor *oldm = selmon; - #endif // EXRESIZE_PATCH if (c->mon == m) return; - #if SENDMON_KEEPFOCUS_PATCH && !EXRESIZE_PATCH - int hadfocus = (c == selmon->sel); - #endif // SENDMON_KEEPFOCUS_PATCH unfocus(c, 1, NULL); detach(c); detachstack(c); - #if SENDMON_KEEPFOCUS_PATCH && !EXRESIZE_PATCH - arrange(c->mon); - #endif // SENDMON_KEEPFOCUS_PATCH c->mon = m; - #if SCRATCHPADS_PATCH if (!(c->tags & SPTAGMASK)) - #endif // SCRATCHPADS_PATCH - #if EMPTYVIEW_PATCH - c->tags = (m->tagset[m->seltags] ? m->tagset[m->seltags] : 1); - #else c->tags = m->tagset[m->seltags]; /* assign tags of target monitor */ - #endif // EMPTYVIEW_PATCH - #if ATTACHABOVE_PATCH || ATTACHASIDE_PATCH || ATTACHBELOW_PATCH || ATTACHBOTTOM_PATCH - attachx(c); - #else attach(c); - #endif attachstack(c); - #if EXRESIZE_PATCH - if (oldm != m) - arrange(oldm); - arrange(m); - focus(c); - restack(m); - #elif SENDMON_KEEPFOCUS_PATCH - arrange(m); - if (hadfocus) { - focus(c); - restack(m); - } else - focus(NULL); - #else focus(NULL); arrange(NULL); - #endif // EXRESIZE_PATCH / SENDMON_KEEPFOCUS_PATCH - #if SWITCHTAG_PATCH - if (c->switchtag) - c->switchtag = 0; - #endif // SWITCHTAG_PATCH } void @@ -3062,21 +1866,14 @@ setclientstate(Client *c, long state) } int -#if BAR_SYSTRAY_PATCH sendevent(Window w, Atom proto, int mask, long d0, long d1, long d2, long d3, long d4) -#else -sendevent(Client *c, Atom proto) -#endif // BAR_SYSTRAY_PATCH { int n; Atom *protocols; - #if BAR_SYSTRAY_PATCH Atom mt; - #endif // BAR_SYSTRAY_PATCH int exists = 0; XEvent ev; - #if BAR_SYSTRAY_PATCH if (proto == wmatom[WMTakeFocus] || proto == wmatom[WMDelete]) { mt = wmatom[WMProtocols]; if (XGetWMProtocols(dpy, w, &protocols, &n)) { @@ -3088,16 +1885,8 @@ sendevent(Client *c, Atom proto) exists = True; mt = proto; } - #else - if (XGetWMProtocols(dpy, c->win, &protocols, &n)) { - while (!exists && n--) - exists = protocols[n] == proto; - XFree(protocols); - } - #endif // BAR_SYSTRAY_PATCH if (exists) { - #if BAR_SYSTRAY_PATCH ev.type = ClientMessage; ev.xclient.window = w; ev.xclient.message_type = mt; @@ -3108,15 +1897,6 @@ sendevent(Client *c, Atom proto) ev.xclient.data.l[3] = d3; ev.xclient.data.l[4] = d4; XSendEvent(dpy, w, False, mask, &ev); - #else - ev.type = ClientMessage; - ev.xclient.window = c->win; - ev.xclient.message_type = wmatom[WMProtocols]; - ev.xclient.format = 32; - ev.xclient.data.l[0] = proto; - ev.xclient.data.l[1] = CurrentTime; - XSendEvent(dpy, c->win, False, NoEventMask, &ev); - #endif // BAR_SYSTRAY_PATCH } return exists; } @@ -3130,76 +1910,9 @@ setfocus(Client *c) XA_WINDOW, 32, PropModeReplace, (unsigned char *) &(c->win), 1); } - #if BAR_SYSTRAY_PATCH sendevent(c->win, wmatom[WMTakeFocus], NoEventMask, wmatom[WMTakeFocus], CurrentTime, 0, 0, 0); - #else - sendevent(c, wmatom[WMTakeFocus]); - #endif // BAR_SYSTRAY_PATCH } -#if FAKEFULLSCREEN_CLIENT_PATCH && !FAKEFULLSCREEN_PATCH -void -setfullscreen(Client *c, int fullscreen) -{ - int savestate = 0, restorestate = 0; - - if ((c->fakefullscreen == 0 && fullscreen && !c->isfullscreen) // normal fullscreen - || (c->fakefullscreen == 2 && fullscreen)) // fake fullscreen --> actual fullscreen - savestate = 1; // go actual fullscreen - else if ((c->fakefullscreen == 0 && !fullscreen && c->isfullscreen) // normal fullscreen exit - || (c->fakefullscreen >= 2 && !fullscreen)) // fullscreen exit --> fake fullscreen - restorestate = 1; // go back into tiled - - /* If leaving fullscreen and the window was previously fake fullscreen (2), then restore - * that while staying in fullscreen. The exception to this is if we are in said state, but - * the client itself disables fullscreen (3) then we let the client go out of fullscreen - * while keeping fake fullscreen enabled (as otherwise there will be a mismatch between the - * client and the window manager's perception of the client's fullscreen state). */ - if (c->fakefullscreen == 2 && !fullscreen && c->isfullscreen) { - c->fakefullscreen = 1; - c->isfullscreen = 1; - fullscreen = 1; - } else if (c->fakefullscreen == 3) // client exiting actual fullscreen - c->fakefullscreen = 1; - - if (fullscreen != c->isfullscreen) { // only send property change if necessary - if (fullscreen) - XChangeProperty(dpy, c->win, netatom[NetWMState], XA_ATOM, 32, - PropModeReplace, (unsigned char*)&netatom[NetWMFullscreen], 1); - else - XChangeProperty(dpy, c->win, netatom[NetWMState], XA_ATOM, 32, - PropModeReplace, (unsigned char*)0, 0); - } - - c->isfullscreen = fullscreen; - - /* Some clients, e.g. firefox, will send a client message informing the window manager - * that it is going into fullscreen after receiving the above signal. This has the side - * effect of this function (setfullscreen) sometimes being called twice when toggling - * fullscreen on and off via the window manager as opposed to the application itself. - * To protect against obscure issues where the client settings are stored or restored - * when they are not supposed to we add an additional bit-lock on the old state so that - * settings can only be stored and restored in that precise order. */ - if (savestate && !(c->oldstate & (1 << 1))) { - c->oldbw = c->bw; - c->oldstate = c->isfloating | (1 << 1); - c->bw = 0; - c->isfloating = 1; - resizeclient(c, c->mon->mx, c->mon->my, c->mon->mw, c->mon->mh); - XRaiseWindow(dpy, c->win); - } else if (restorestate && (c->oldstate & (1 << 1))) { - c->bw = c->oldbw; - c->isfloating = c->oldstate = c->oldstate & 1; - c->x = c->oldx; - c->y = c->oldy; - c->w = c->oldw; - c->h = c->oldh; - resizeclient(c, c->x, c->y, c->w, c->h); - restack(c->mon); - } else - resizeclient(c, c->x, c->y, c->w, c->h); -} -#else void setfullscreen(Client *c, int fullscreen) { @@ -3207,19 +1920,16 @@ setfullscreen(Client *c, int fullscreen) XChangeProperty(dpy, c->win, netatom[NetWMState], XA_ATOM, 32, PropModeReplace, (unsigned char*)&netatom[NetWMFullscreen], 1); c->isfullscreen = 1; - #if !FAKEFULLSCREEN_PATCH c->oldbw = c->bw; c->oldstate = c->isfloating; c->bw = 0; c->isfloating = 1; resizeclient(c, c->mon->mx, c->mon->my, c->mon->mw, c->mon->mh); XRaiseWindow(dpy, c->win); - #endif // !FAKEFULLSCREEN_PATCH } else if (!fullscreen && c->isfullscreen){ XChangeProperty(dpy, c->win, netatom[NetWMState], XA_ATOM, 32, PropModeReplace, (unsigned char*)0, 0); c->isfullscreen = 0; - #if !FAKEFULLSCREEN_PATCH c->bw = c->oldbw; c->isfloating = c->oldstate; c->x = c->oldx; @@ -3228,59 +1938,20 @@ setfullscreen(Client *c, int fullscreen) c->h = c->oldh; resizeclient(c, c->x, c->y, c->w, c->h); arrange(c->mon); - #endif // !FAKEFULLSCREEN_PATCH } } -#endif // FAKEFULLSCREEN_CLIENT_PATCH void setlayout(const Arg *arg) { if (!arg || !arg->v || arg->v != selmon->lt[selmon->sellt]) { - #if PERTAG_PATCH selmon->pertag->sellts[selmon->pertag->curtag] ^= 1; selmon->sellt = selmon->pertag->sellts[selmon->pertag->curtag]; - #else - selmon->sellt ^= 1; - #endif // PERTAG_PATCH - #if EXRESIZE_PATCH - if (!selmon->lt[selmon->sellt]->arrange) { - for (Client *c = selmon->clients ; c ; c = c->next) { - if (!c->isfloating) { - /*restore last known float dimensions*/ - resize(c, selmon->mx + c->sfx, selmon->my + c->sfy, - c->sfw, c->sfh, False); - } - } - } - #endif // EXRESIZE_PATCH } if (arg && arg->v) - #if PERTAG_PATCH selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt] = (Layout *)arg->v; selmon->lt[selmon->sellt] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt]; - #else - selmon->lt[selmon->sellt] = (Layout *)arg->v; - #endif // PERTAG_PATCH - - #if FLEXTILE_DELUXE_LAYOUT - if (selmon->lt[selmon->sellt]->preset.nmaster && selmon->lt[selmon->sellt]->preset.nmaster != -1) - selmon->nmaster = selmon->lt[selmon->sellt]->preset.nmaster; - if (selmon->lt[selmon->sellt]->preset.nstack && selmon->lt[selmon->sellt]->preset.nstack != -1) - selmon->nstack = selmon->lt[selmon->sellt]->preset.nstack; - - selmon->ltaxis[LAYOUT] = selmon->lt[selmon->sellt]->preset.layout; - selmon->ltaxis[MASTER] = selmon->lt[selmon->sellt]->preset.masteraxis; - selmon->ltaxis[STACK] = selmon->lt[selmon->sellt]->preset.stack1axis; - selmon->ltaxis[STACK2] = selmon->lt[selmon->sellt]->preset.stack2axis; - - #if PERTAG_PATCH - selmon->pertag->ltaxis[selmon->pertag->curtag][LAYOUT] = selmon->ltaxis[LAYOUT]; - selmon->pertag->ltaxis[selmon->pertag->curtag][MASTER] = selmon->ltaxis[MASTER]; - selmon->pertag->ltaxis[selmon->pertag->curtag][STACK] = selmon->ltaxis[STACK]; - selmon->pertag->ltaxis[selmon->pertag->curtag][STACK2] = selmon->ltaxis[STACK2]; - #endif // PERTAG_PATCH - #endif // FLEXTILE_DELUXE_LAYOUT + strncpy(selmon->ltsymbol, selmon->lt[selmon->sellt]->symbol, sizeof selmon->ltsymbol); if (selmon->sel) arrange(selmon); @@ -3299,11 +1970,7 @@ setmfact(const Arg *arg) f = arg->f < 1.0 ? arg->f + selmon->mfact : arg->f - 1.0; if (f < 0.05 || f > 0.95) return; - #if PERTAG_PATCH selmon->mfact = selmon->pertag->mfacts[selmon->pertag->curtag] = f; - #else - selmon->mfact = f; - #endif // PERTAG_PATCH arrange(selmon); } @@ -3317,39 +1984,17 @@ setup(void) /* clean up any zombies immediately */ sigchld(0); - #if RESTARTSIG_PATCH - signal(SIGHUP, sighup); - signal(SIGTERM, sigterm); - #endif // RESTARTSIG_PATCH /* init screen */ screen = DefaultScreen(dpy); sw = DisplayWidth(dpy, screen); sh = DisplayHeight(dpy, screen); root = RootWindow(dpy, screen); - #if BAR_ALPHA_PATCH - xinitvisual(); - drw = drw_create(dpy, screen, root, sw, sh, visual, depth, cmap); - #else drw = drw_create(dpy, screen, root, sw, sh); - #endif // BAR_ALPHA_PATCH - #if BAR_PANGO_PATCH - if (!drw_font_create(drw, font)) - #else if (!drw_fontset_create(drw, fonts, LENGTH(fonts))) - #endif // BAR_PANGO_PATCH die("no fonts could be loaded."); - #if BAR_STATUSPADDING_PATCH - lrpad = drw->fonts->h + horizpadbar; - bh = drw->fonts->h + vertpadbar; - #else lrpad = drw->fonts->h; - #if BAR_HEIGHT_PATCH bh = bar_height ? bar_height : drw->fonts->h + 2; - #else - bh = drw->fonts->h + 2; - #endif // BAR_HEIGHT_PATCH - #endif // BAR_STATUSPADDING_PATCH updategeom(); /* init atoms */ utf8string = XInternAtom(dpy, "UTF8_STRING", False); @@ -3357,12 +2002,8 @@ setup(void) wmatom[WMDelete] = XInternAtom(dpy, "WM_DELETE_WINDOW", False); wmatom[WMState] = XInternAtom(dpy, "WM_STATE", False); wmatom[WMTakeFocus] = XInternAtom(dpy, "WM_TAKE_FOCUS", False); - #if WINDOWROLERULE_PATCH - wmatom[WMWindowRole] = XInternAtom(dpy, "WM_WINDOW_ROLE", False); - #endif // WINDOWROLERULE_PATCH netatom[NetActiveWindow] = XInternAtom(dpy, "_NET_ACTIVE_WINDOW", False); netatom[NetSupported] = XInternAtom(dpy, "_NET_SUPPORTED", False); - #if BAR_SYSTRAY_PATCH netatom[NetSystemTray] = XInternAtom(dpy, "_NET_SYSTEM_TRAY_S0", False); netatom[NetSystemTrayOP] = XInternAtom(dpy, "_NET_SYSTEM_TRAY_OPCODE", False); netatom[NetSystemTrayOrientation] = XInternAtom(dpy, "_NET_SYSTEM_TRAY_ORIENTATION", False); @@ -3372,78 +2013,21 @@ setup(void) xatom[Manager] = XInternAtom(dpy, "MANAGER", False); xatom[Xembed] = XInternAtom(dpy, "_XEMBED", False); xatom[XembedInfo] = XInternAtom(dpy, "_XEMBED_INFO", False); - #endif // BAR_SYSTRAY_PATCH - #if BAR_EWMHTAGS_PATCH - netatom[NetDesktopViewport] = XInternAtom(dpy, "_NET_DESKTOP_VIEWPORT", False); - netatom[NetNumberOfDesktops] = XInternAtom(dpy, "_NET_NUMBER_OF_DESKTOPS", False); - netatom[NetCurrentDesktop] = XInternAtom(dpy, "_NET_CURRENT_DESKTOP", False); - netatom[NetDesktopNames] = XInternAtom(dpy, "_NET_DESKTOP_NAMES", False); - #endif // BAR_EWMHTAGS_PATCH netatom[NetWMName] = XInternAtom(dpy, "_NET_WM_NAME", False); netatom[NetWMState] = XInternAtom(dpy, "_NET_WM_STATE", False); netatom[NetWMCheck] = XInternAtom(dpy, "_NET_SUPPORTING_WM_CHECK", False); netatom[NetWMFullscreen] = XInternAtom(dpy, "_NET_WM_STATE_FULLSCREEN", False); netatom[NetWMWindowType] = XInternAtom(dpy, "_NET_WM_WINDOW_TYPE", False); netatom[NetClientList] = XInternAtom(dpy, "_NET_CLIENT_LIST", False); - #if NET_CLIENT_LIST_STACKING_PATCH - netatom[NetClientListStacking] = XInternAtom(dpy, "_NET_CLIENT_LIST_STACKING", False); - #endif // NET_CLIENT_LIST_STACKING_PATCH - #if DECORATION_HINTS_PATCH - motifatom = XInternAtom(dpy, "_MOTIF_WM_HINTS", False); - #endif // DECORATION_HINTS_PATCH /* init cursors */ cursor[CurNormal] = drw_cur_create(drw, XC_left_ptr); cursor[CurResize] = drw_cur_create(drw, XC_sizing); - #if RESIZEPOINT_PATCH || RESIZECORNERS_PATCH - cursor[CurResizeBR] = drw_cur_create(drw, XC_bottom_right_corner); - cursor[CurResizeBL] = drw_cur_create(drw, XC_bottom_left_corner); - cursor[CurResizeTR] = drw_cur_create(drw, XC_top_right_corner); - cursor[CurResizeTL] = drw_cur_create(drw, XC_top_left_corner); - #endif // RESIZEPOINT_PATCH | RESIZECORNERS_PATCH - #if DRAGMFACT_PATCH - cursor[CurResizeHorzArrow] = drw_cur_create(drw, XC_sb_h_double_arrow); - cursor[CurResizeVertArrow] = drw_cur_create(drw, XC_sb_v_double_arrow); - #endif // DRAGMFACT_PATCH - #if DRAGCFACT_PATCH - cursor[CurIronCross] = drw_cur_create(drw, XC_iron_cross); - #endif // DRAGCFACT_PATCH cursor[CurMove] = drw_cur_create(drw, XC_fleur); /* init appearance */ - #if BAR_VTCOLORS_PATCH - get_vt_colors(); - if (get_luminance(colors[SchemeTagsNorm][ColBg]) > 50) { - strcpy(colors[SchemeTitleNorm][ColBg], title_bg_light); - strcpy(colors[SchemeTitleSel][ColBg], title_bg_light); - } else { - strcpy(colors[SchemeTitleNorm][ColBg], title_bg_dark); - strcpy(colors[SchemeTitleSel][ColBg], title_bg_dark); - } - #endif // BAR_VTCOLORS_PATCH - #if BAR_STATUS2D_PATCH && !BAR_STATUSCOLORS_PATCH scheme = ecalloc(LENGTH(colors) + 1, sizeof(Clr *)); - #if BAR_ALPHA_PATCH - scheme[LENGTH(colors)] = drw_scm_create(drw, colors[0], alphas[0], ColCount); - #else scheme[LENGTH(colors)] = drw_scm_create(drw, colors[0], ColCount); - #endif // BAR_ALPHA_PATCH - #else - scheme = ecalloc(LENGTH(colors), sizeof(Clr *)); - #endif // BAR_STATUS2D_PATCH for (i = 0; i < LENGTH(colors); i++) - #if BAR_ALPHA_PATCH - scheme[i] = drw_scm_create(drw, colors[i], alphas[i], ColCount); - #else scheme[i] = drw_scm_create(drw, colors[i], ColCount); - #endif // BAR_ALPHA_PATCH - #if BAR_POWERLINE_STATUS_PATCH - statusscheme = ecalloc(LENGTH(statuscolors), sizeof(Clr *)); - for (i = 0; i < LENGTH(statuscolors); i++) - #if BAR_ALPHA_PATCH - statusscheme[i] = drw_scm_create(drw, statuscolors[i], alphas[0], ColCount); - #else - statusscheme[i] = drw_scm_create(drw, statuscolors[i], ColCount); - #endif // BAR_ALPHA_PATCH - #endif // BAR_POWERLINE_STATUS_PATCH updatebars(); updatestatus(); @@ -3459,16 +2043,7 @@ setup(void) /* EWMH support per view */ XChangeProperty(dpy, root, netatom[NetSupported], XA_ATOM, 32, PropModeReplace, (unsigned char *) netatom, NetLast); - #if BAR_EWMHTAGS_PATCH - setnumdesktops(); - setcurrentdesktop(); - setdesktopnames(); - setviewport(); - #endif // BAR_EWMHTAGS_PATCH XDeleteProperty(dpy, root, netatom[NetClientList]); - #if NET_CLIENT_LIST_STACKING_PATCH - XDeleteProperty(dpy, root, netatom[NetClientListStacking]); - #endif // NET_CLIENT_LIST_STACKING_PATCH /* select events */ wa.cursor = cursor[CurNormal]->cursor; wa.event_mask = SubstructureRedirectMask|SubstructureNotifyMask @@ -3478,13 +2053,6 @@ setup(void) XSelectInput(dpy, root, wa.event_mask); grabkeys(); focus(NULL); - #if IPC_PATCH - setupepoll(); - #endif // IPC_PATCH - #if BAR_ANYBAR_PATCH - if (usealtbar) - spawnbar(); - #endif // BAR_ANYBAR_PATCH } @@ -3507,49 +2075,20 @@ showhide(Client *c) if (!c) return; if (ISVISIBLE(c)) { - #if SCRATCHPADS_PATCH && SCRATCHPADS_KEEP_POSITION_AND_SIZE_PATCH - if ( - (c->tags & SPTAGMASK) && - c->isfloating && - ( - c->x < c->mon->mx || - c->x > c->mon->mx + c->mon->mw || - c->y < c->mon->my || - c->y > c->mon->my + c->mon->mh - ) - ) { - c->x = c->mon->wx + (c->mon->ww / 2 - WIDTH(c) / 2); - c->y = c->mon->wy + (c->mon->wh / 2 - HEIGHT(c) / 2); - } - #elif SCRATCHPADS_PATCH if ((c->tags & SPTAGMASK) && c->isfloating) { c->x = c->mon->wx + (c->mon->ww / 2 - WIDTH(c) / 2); c->y = c->mon->wy + (c->mon->wh / 2 - HEIGHT(c) / 2); } - #endif // SCRATCHPADS_KEEP_POSITION_AND_SIZE_PATCH | SCRATCHPADS_PATCH /* show clients top down */ - #if SAVEFLOATS_PATCH || EXRESIZE_PATCH if (!c->mon->lt[c->mon->sellt]->arrange && c->sfx != -9999 && !c->isfullscreen) { XMoveWindow(dpy, c->win, c->sfx, c->sfy); resize(c, c->sfx, c->sfy, c->sfw, c->sfh, 0); showhide(c->snext); return; } - #endif // SAVEFLOATS_PATCH / EXRESIZE_PATCH - #if AUTORESIZE_PATCH - if (c->needresize) { - c->needresize = 0; - XMoveResizeWindow(dpy, c->win, c->x, c->y, c->w, c->h); - } else { - XMoveWindow(dpy, c->win, c->x, c->y); - } - #else XMoveWindow(dpy, c->win, c->x, c->y); - #endif // AUTORESIZE_PATCH if ((!c->mon->lt[c->mon->sellt]->arrange || c->isfloating) - #if !FAKEFULLSCREEN_PATCH && !c->isfullscreen - #endif // !FAKEFULLSCREEN_PATCH ) resize(c, c->x, c->y, c->w, c->h, 0); showhide(c->snext); @@ -3563,198 +2102,53 @@ showhide(Client *c) void sigchld(int unused) { - #if COOL_AUTOSTART_PATCH - pid_t pid; - #endif // COOL_AUTOSTART_PATCH if (signal(SIGCHLD, sigchld) == SIG_ERR) die("can't install SIGCHLD handler:"); - #if COOL_AUTOSTART_PATCH - while (0 < (pid = waitpid(-1, NULL, WNOHANG))) { - pid_t *p, *lim; - - if (!(p = autostart_pids)) - continue; - lim = &p[autostart_len]; - - for (; p < lim; p++) { - if (*p == pid) { - *p = -1; - break; - } - } - } - #else while (0 < waitpid(-1, NULL, WNOHANG)); - #endif // COOL_AUTOSTART_PATCH -} - -#if RIODRAW_PATCH -void -spawn(const Arg *arg) -{ - spawncmd(arg); } -pid_t -spawncmd(const Arg *arg) -#else void spawn(const Arg *arg) -#endif // RIODRAW_PATCH { - #if RIODRAW_PATCH - pid_t pid; - #endif // RIODRAW_PATCH - #if BAR_STATUSCMD_PATCH && !BAR_DWMBLOCKS_PATCH - char *cmd = NULL; - #endif // BAR_STATUSCMD_PATCH | BAR_DWMBLOCKS_PATCH - #if !NODMENU_PATCH if (arg->v == dmenucmd) dmenumon[0] = '0' + selmon->num; - #endif // NODMENU_PATCH - #if BAR_STATUSCMD_PATCH && !BAR_DWMBLOCKS_PATCH - #if !NODMENU_PATCH - else if (arg->v == statuscmd) - #else - if (arg->v == statuscmd) - #endif // NODMENU_PATCH - { - int len = strlen(statuscmds[statuscmdn]) + 1; - if (!(cmd = malloc(sizeof(char)*len + sizeof(statusexport)))) - die("malloc:"); - strcpy(cmd, statusexport); - strcat(cmd, statuscmds[statuscmdn]); - cmd[LENGTH(statusexport)-3] = '0' + lastbutton; - statuscmd[2] = cmd; - } - #endif // BAR_STATUSCMD_PATCH | BAR_DWMBLOCKS_PATCH - #if RIODRAW_PATCH - if ((pid = fork()) == 0) - #else if (fork() == 0) - #endif // RIODRAW_PATCH { if (dpy) close(ConnectionNumber(dpy)); - #if SPAWNCMD_PATCH - if (selmon->sel) { - const char* const home = getenv("HOME"); - assert(home && strchr(home, '/')); - const size_t homelen = strlen(home); - char *cwd, *pathbuf = NULL; - struct stat statbuf; - - cwd = strtok(selmon->sel->name, SPAWN_CWD_DELIM); - /* NOTE: strtok() alters selmon->sel->name in-place, - * but that does not matter because we are going to - * exec() below anyway; nothing else will use it */ - while (cwd) { - if (*cwd == '~') { /* replace ~ with $HOME */ - if (!(pathbuf = malloc(homelen + strlen(cwd)))) /* ~ counts for NULL term */ - die("fatal: could not malloc() %u bytes\n", homelen + strlen(cwd)); - strcpy(strcpy(pathbuf, home) + homelen, cwd + 1); - cwd = pathbuf; - } - - if (strchr(cwd, '/') && !stat(cwd, &statbuf)) { - if (!S_ISDIR(statbuf.st_mode)) - cwd = dirname(cwd); - - if (!chdir(cwd)) - break; - } - - cwd = strtok(NULL, SPAWN_CWD_DELIM); - } - - free(pathbuf); - } - #endif // SPAWNCMD_PATCH setsid(); execvp(((char **)arg->v)[0], (char **)arg->v); fprintf(stderr, "dwm: execvp %s", ((char **)arg->v)[0]); perror(" failed"); exit(EXIT_SUCCESS); } - #if BAR_STATUSCMD_PATCH && !BAR_DWMBLOCKS_PATCH - free(cmd); - #endif // BAR_STATUSCMD_PATCH | BAR_DWMBLOCKS_PATCH - #if RIODRAW_PATCH - return pid; - #endif // RIODRAW_PATCH } void tag(const Arg *arg) { - #if SWAPFOCUS_PATCH && PERTAG_PATCH - unsigned int tagmask, tagindex; - #endif // SWAPFOCUS_PATCH if (selmon->sel && arg->ui & TAGMASK) { selmon->sel->tags = arg->ui & TAGMASK; - #if SWITCHTAG_PATCH - if (selmon->sel->switchtag) - selmon->sel->switchtag = 0; - #endif // SWITCHTAG_PATCH focus(NULL); - #if SWAPFOCUS_PATCH && PERTAG_PATCH - selmon->pertag->prevclient[selmon->pertag->curtag] = NULL; - for (tagmask = arg->ui & TAGMASK, tagindex = 1; tagmask!=0; tagmask >>= 1, tagindex++) - if (tagmask & 1) - selmon->pertag->prevclient[tagindex] = NULL; - #endif // SWAPFOCUS_PATCH arrange(selmon); - #if VIEWONTAG_PATCH - if ((arg->ui & TAGMASK) != selmon->tagset[selmon->seltags]) - view(arg); - #endif // VIEWONTAG_PATCH } } void tagmon(const Arg *arg) { - #if TAGMONFIXFS_PATCH - Client *c = selmon->sel; - if (!c || !mons->next) - return; - if (c->isfullscreen) { - c->isfullscreen = 0; - sendmon(c, dirtomon(arg->i)); - c->isfullscreen = 1; - #if !FAKEFULLSCREEN_PATCH && FAKEFULLSCREEN_CLIENT_PATCH - if (c->fakefullscreen != 1) { - resizeclient(c, c->mon->mx, c->mon->my, c->mon->mw, c->mon->mh); - XRaiseWindow(dpy, c->win); - } - #elif !FAKEFULLSCREEN_PATCH - resizeclient(c, c->mon->mx, c->mon->my, c->mon->mw, c->mon->mh); - XRaiseWindow(dpy, c->win); - #endif // FAKEFULLSCREEN_CLIENT_PATCH - } else - sendmon(c, dirtomon(arg->i)); - #else if (!selmon->sel || !mons->next) return; sendmon(selmon->sel, dirtomon(arg->i)); - #endif // TAGMONFIXFS_PATCH } void togglebar(const Arg *arg) { Bar *bar; - #if BAR_HOLDBAR_PATCH && PERTAG_PATCH && PERTAGBAR_PATCH - selmon->showbar = selmon->pertag->showbars[selmon->pertag->curtag] = (selmon->showbar == 2 ? 1 : !selmon->showbar); - #elif BAR_HOLDBAR_PATCH - selmon->showbar = (selmon->showbar == 2 ? 1 : !selmon->showbar); - #elif PERTAG_PATCH && PERTAGBAR_PATCH - selmon->showbar = selmon->pertag->showbars[selmon->pertag->curtag] = !selmon->showbar; - #else selmon->showbar = !selmon->showbar; - #endif // BAR_HOLDBAR_PATCH | PERTAG_PATCH updatebarpos(selmon); for (bar = selmon->bar; bar; bar = bar->next) XMoveResizeWindow(dpy, bar->win, bar->bx, bar->by, bar->bw, bar->bh); @@ -3769,53 +2163,34 @@ togglefloating(const Arg *arg) c = (Client*)arg->v; if (!c) return; - #if !FAKEFULLSCREEN_PATCH - #if FAKEFULLSCREEN_CLIENT_PATCH - if (c->isfullscreen && c->fakefullscreen != 1) /* no support for fullscreen windows */ - return; - #else if (c->isfullscreen) /* no support for fullscreen windows */ return; - #endif // FAKEFULLSCREEN_CLIENT_PATCH - #endif // !FAKEFULLSCREEN_PATCH c->isfloating = !c->isfloating || c->isfixed; - #if !BAR_FLEXWINTITLE_PATCH if (c->isfloating) XSetWindowBorder(dpy, c->win, scheme[SchemeSel][ColFloat].pixel); else XSetWindowBorder(dpy, c->win, scheme[SchemeSel][ColBorder].pixel); - #endif // BAR_FLEXWINTITLE_PATCH if (c->isfloating) { - #if SAVEFLOATS_PATCH || EXRESIZE_PATCH if (c->sfx != -9999) { /* restore last known float dimensions */ resize(c, c->sfx, c->sfy, c->sfw, c->sfh, 0); } else - #endif // SAVEFLOATS_PATCH // EXRESIZE_PATCH resize(c, c->x, c->y, c->w, c->h, 0); - #if SAVEFLOATS_PATCH || EXRESIZE_PATCH } else { /* save last known float dimensions */ c->sfx = c->x; c->sfy = c->y; c->sfw = c->w; c->sfh = c->h; - #endif // SAVEFLOATS_PATCH / EXRESIZE_PATCH } arrange(c->mon); - #if BAR_EWMHTAGS_PATCH - setfloatinghint(c); - #endif // BAR_EWMHTAGS_PATCH } void toggletag(const Arg *arg) { unsigned int newtags; - #if SWAPFOCUS_PATCH && PERTAG_PATCH - unsigned int tagmask, tagindex; - #endif // SWAPFOCUS_PATCH if (!selmon->sel) return; @@ -3823,70 +2198,21 @@ toggletag(const Arg *arg) if (newtags) { selmon->sel->tags = newtags; focus(NULL); - #if SWAPFOCUS_PATCH && PERTAG_PATCH - for (tagmask = arg->ui & TAGMASK, tagindex = 1; tagmask!=0; tagmask >>= 1, tagindex++) - if (tagmask & 1) - selmon->pertag->prevclient[tagindex] = NULL; - #endif // SWAPFOCUS_PATCH arrange(selmon); } - #if BAR_EWMHTAGS_PATCH - updatecurrentdesktop(); - #endif // BAR_EWMHTAGS_PATCH } void toggleview(const Arg *arg) { unsigned int newtagset = selmon->tagset[selmon->seltags] ^ (arg->ui & TAGMASK); - #if PERTAG_PATCH int i; - #endif // PERTAG_PATCH - #if TAGINTOSTACK_ALLMASTER_PATCH - Client *const selected = selmon->sel; - // clients in the master area should be the same after we add a new tag - Client **const masters = calloc(selmon->nmaster, sizeof(Client *)); - if (!masters) { - die("fatal: could not calloc() %u bytes \n", selmon->nmaster * sizeof(Client *)); - } - // collect (from last to first) references to all clients in the master area - Client *c; - size_t j; - for (c = nexttiled(selmon->clients), j = 0; c && j < selmon->nmaster; c = nexttiled(c->next), ++j) - masters[selmon->nmaster - (j + 1)] = c; - // put the master clients at the front of the list - // > go from the 'last' master to the 'first' - for (j = 0; j < selmon->nmaster; ++j) - if (masters[j]) - pop(masters[j]); - free(masters); - - // we also want to be sure not to mutate the focus - focus(selected); - #elif TAGINTOSTACK_ONEMASTER_PATCH - // the first visible client should be the same after we add a new tag - // we also want to be sure not to mutate the focus - Client *const c = nexttiled(selmon->clients); - if (c) { - Client * const selected = selmon->sel; - pop(c); - focus(selected); - } - #endif // TAGINTOSTACK_ALLMASTER_PATCH / TAGINTOSTACK_ONEMASTER_PATCH - - #if !EMPTYVIEW_PATCH if (newtagset) { - #endif // EMPTYVIEW_PATCH selmon->tagset[selmon->seltags] = newtagset; - #if PERTAG_PATCH - #if SCRATCHPADS_PATCH if (newtagset == ~SPTAGMASK) - #else - if (newtagset == ~0) - #endif // SCRATCHPADS_PATCH { selmon->pertag->prevtag = selmon->pertag->curtag; selmon->pertag->curtag = 0; @@ -3904,19 +2230,9 @@ toggleview(const Arg *arg) selmon->sellt = selmon->pertag->sellts[selmon->pertag->curtag]; selmon->lt[selmon->sellt] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt]; selmon->lt[selmon->sellt^1] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt^1]; - #if PERTAGBAR_PATCH - if (selmon->showbar != selmon->pertag->showbars[selmon->pertag->curtag]) - togglebar(NULL); - #endif // PERTAGBAR_PATCH - #endif // PERTAG_PATCH focus(NULL); arrange(selmon); - #if !EMPTYVIEW_PATCH } - #endif // EMPTYVIEW_PATCH - #if BAR_EWMHTAGS_PATCH - updatecurrentdesktop(); - #endif // BAR_EWMHTAGS_PATCH } void @@ -3924,25 +2240,13 @@ unfocus(Client *c, int setfocus, Client *nextfocus) { if (!c) return; - #if SWAPFOCUS_PATCH && PERTAG_PATCH - selmon->pertag->prevclient[selmon->pertag->curtag] = c; - #endif // SWAPFOCUS_PATCH - #if LOSEFULLSCREEN_PATCH if (c->isfullscreen && ISVISIBLE(c) && c->mon == selmon && nextfocus && !nextfocus->isfloating) - #if FAKEFULLSCREEN_CLIENT_PATCH - if (c->fakefullscreen != 1) - setfullscreen(c, 0); - #else setfullscreen(c, 0); - #endif // #if FAKEFULLSCREEN_CLIENT_PATCH - #endif // LOSEFULLSCREEN_PATCH grabbuttons(c, 0); - #if !BAR_FLEXWINTITLE_PATCH if (c->isfloating) XSetWindowBorder(dpy, c->win, scheme[SchemeNorm][ColFloat].pixel); else XSetWindowBorder(dpy, c->win, scheme[SchemeNorm][ColBorder].pixel); - #endif // BAR_FLEXWINTITLE_PATCH if (setfocus) { XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); XDeleteProperty(dpy, root, netatom[NetActiveWindow]); @@ -3953,26 +2257,8 @@ void unmanage(Client *c, int destroyed) { Monitor *m = c->mon; - #if SWITCHTAG_PATCH - unsigned int switchtag = c->switchtag; - #endif // SWITCHTAG_PATCH XWindowChanges wc; - #if SWALLOW_PATCH - if (c->swallowing) { - unswallow(c); - return; - } - - Client *s = swallowingclient(c->win); - if (s) { - free(s->swallowing); - s->swallowing = NULL; - arrange(m); - focus(NULL); - return; - } - #endif // SWALLOW_PATCH detach(c); detachstack(c); @@ -3988,27 +2274,15 @@ unmanage(Client *c, int destroyed) XUngrabServer(dpy); } free(c); - #if SWALLOW_PATCH - if (s) - return; - #endif // SWALLOW_PATCH focus(NULL); updateclientlist(); arrange(m); - #if SWITCHTAG_PATCH - if (switchtag && ((switchtag & TAGMASK) != selmon->tagset[selmon->seltags])) - view(&((Arg) { .ui = switchtag })); - #endif // SWITCHTAG_PATCH } void unmapnotify(XEvent *e) { Client *c; - #if BAR_ANYBAR_PATCH - Monitor *m; - Bar *bar; - #endif // BAR_ANYBAR_PATCH XUnmapEvent *ev = &e->xunmap; if ((c = wintoclient(ev->window))) { @@ -4016,26 +2290,13 @@ unmapnotify(XEvent *e) setclientstate(c, WithdrawnState); else unmanage(c, 0); - #if BAR_SYSTRAY_PATCH } else if (showsystray && (c = wintosystrayicon(ev->window))) { /* KLUDGE! sometimes icons occasionally unmap their windows, but do * _not_ destroy them. We map those windows back */ XMapRaised(dpy, c->win); removesystrayicon(c); drawbarwin(systray->bar); - #endif // BAR_SYSTRAY_PATCH - } - #if BAR_ANYBAR_PATCH - else { - m = wintomon(ev->window); - for (bar = m->bar; bar; bar = bar->next) { - if (bar->win == ev->window) { - unmanagealtbar(ev->window); - break; - } - } } - #endif // BAR_ANYBAR_PATCH } void @@ -4045,13 +2306,7 @@ updatebars(void) Monitor *m; XSetWindowAttributes wa = { .override_redirect = True, - #if BAR_ALPHA_PATCH - .background_pixel = 0, - .border_pixel = 0, - .colormap = cmap, - #else .background_pixmap = ParentRelative, - #endif // BAR_ALPHA_PATCH .event_mask = ButtonPressMask|ExposureMask }; XClassHint ch = {"dwm", "dwm"}; @@ -4060,15 +2315,9 @@ updatebars(void) if (bar->external) continue; if (!bar->win) { - #if BAR_ALPHA_PATCH - bar->win = XCreateWindow(dpy, root, bar->bx, bar->by, bar->bw, bar->bh, 0, depth, - InputOutput, visual, - CWOverrideRedirect|CWBackPixel|CWBorderPixel|CWColormap|CWEventMask, &wa); - #else bar->win = XCreateWindow(dpy, root, bar->bx, bar->by, bar->bw, bar->bh, 0, DefaultDepth(dpy, screen), CopyFromParent, DefaultVisual(dpy, screen), CWOverrideRedirect|CWBackPixmap|CWEventMask, &wa); - #endif // BAR_ALPHA_PATCH XDefineCursor(dpy, bar->win, cursor[CurNormal]->cursor); XMapRaised(dpy, bar->win); XSetClassHint(dpy, bar->win, &ch); @@ -4085,22 +2334,9 @@ updatebarpos(Monitor *m) m->ww = m->mw; m->wh = m->mh; Bar *bar; - #if BAR_PADDING_PATCH int y_pad = vertpad; int x_pad = sidepad; - #else - int y_pad = 0; - int x_pad = 0; - #endif // BAR_PADDING_PATCH - - #if INSETS_PATCH - // Custom insets - Inset inset = m->inset; - m->wx += inset.x; - m->wy += inset.y; - m->ww -= inset.w + inset.x; - m->wh -= inset.h + inset.y; - #endif // INSETS_PATCH + for (bar = m->bar; bar; bar = bar->next) { bar->bx = m->wx + x_pad; @@ -4136,14 +2372,6 @@ updateclientlist() XA_WINDOW, 32, PropModeAppend, (unsigned char *) &(c->win), 1); - #if NET_CLIENT_LIST_STACKING_PATCH - XDeleteProperty(dpy, root, netatom[NetClientListStacking]); - for (m = mons; m; m = m->next) - for (c = m->stack; c; c = c->snext) - XChangeProperty(dpy, root, netatom[NetClientListStacking], - XA_WINDOW, 32, PropModeAppend, - (unsigned char *) &(c->win), 1); - #endif // NET_CLIENT_LIST_STACKING_PATCH } int @@ -4167,9 +2395,6 @@ updategeom(void) memcpy(&unique[j++], &info[i], sizeof(XineramaScreenInfo)); XFree(info); nn = j; - #if SORTSCREENS_PATCH - sortscreens(unique, nn); - #endif // SORTSCREENS_PATCH if (n <= nn) { /* new monitors available */ for (i = 0; i < (nn - n); i++) { for (m = mons; m && m->next; m = m->next); @@ -4254,11 +2479,7 @@ updatesizehints(Client *c) if (!XGetWMNormalHints(dpy, c->win, &size, &msize)) /* size is uninitialized, ensure that size.flags aren't used */ - #if SIZEHINTS_PATCH || SIZEHINTS_RULED_PATCH - size.flags = 0; - #else size.flags = PSize; - #endif // SIZEHINTS_PATCH | SIZEHINTS_RULED_PATCH if (size.flags & PBaseSize) { c->basew = size.base_width; c->baseh = size.base_height; @@ -4290,16 +2511,6 @@ updatesizehints(Client *c) c->maxa = (float)size.max_aspect.x / size.max_aspect.y; } else c->maxa = c->mina = 0.0; - #if SIZEHINTS_PATCH || SIZEHINTS_RULED_PATCH - if (size.flags & PSize) { - c->basew = size.base_width; - c->baseh = size.base_height; - c->isfloating = 1; - } - #if SIZEHINTS_RULED_PATCH - checkfloatingrules(c); - #endif // SIZEHINTS_RULED_PATCH - #endif // SIZEHINTS_PATCH c->isfixed = (c->maxw && c->maxh && c->maxw == c->minw && c->maxh == c->minh); } @@ -4307,38 +2518,10 @@ void updatestatus(void) { Monitor *m; - #if BAR_EXTRASTATUS_PATCH - if (!gettextprop(root, XA_WM_NAME, rawstext, sizeof(rawstext))) { - strcpy(stext, "dwm-"VERSION); - estext[0] = '\0'; - } else { - char *e = strchr(rawstext, statussep); - if (e) { - *e = '\0'; e++; - #if BAR_STATUSCMD_PATCH - strncpy(rawestext, e, sizeof(estext) - 1); - copyvalidchars(estext, rawestext); - #else - strncpy(estext, e, sizeof(estext) - 1); - #endif // BAR_STATUSCMD_PATCH - } else { - estext[0] = '\0'; - } - #if BAR_STATUSCMD_PATCH - copyvalidchars(stext, rawstext); - #else - strncpy(stext, rawstext, sizeof(stext) - 1); - #endif // BAR_STATUSCMD_PATCH - } - #elif BAR_STATUSCMD_PATCH if (!gettextprop(root, XA_WM_NAME, rawstext, sizeof(rawstext))) strcpy(stext, "dwm-"VERSION); else copyvalidchars(stext, rawstext); - #else - if (!gettextprop(root, XA_WM_NAME, stext, sizeof(stext))) - strcpy(stext, "dwm-"VERSION); - #endif // BAR_EXTRASTATUS_PATCH | BAR_STATUSCMD_PATCH for (m = mons; m; m = m->next) drawbar(m); } @@ -4346,22 +2529,12 @@ updatestatus(void) void updatetitle(Client *c) { - #if IPC_PATCH - char oldname[sizeof(c->name)]; - strcpy(oldname, c->name); - #endif // IPC_PATCH if (!gettextprop(c->win, netatom[NetWMName], c->name, sizeof c->name)) gettextprop(c->win, XA_WM_NAME, c->name, sizeof c->name); if (c->name[0] == '\0') /* hack to mark broken clients */ strcpy(c->name, broken); - #if IPC_PATCH - for (Monitor *m = mons; m; m = m->next) { - if (m->sel == c && strcmp(oldname, c->name) != 0) - ipc_focused_title_change_event(m->num, c->win, oldname, c->name); - } - #endif // IPC_PATCH } void @@ -4392,35 +2565,14 @@ updatewmhints(Client *c) void view(const Arg *arg) { - #if EMPTYVIEW_PATCH - if (arg->ui && (arg->ui & TAGMASK) == selmon->tagset[selmon->seltags]) - #else if ((arg->ui & TAGMASK) == selmon->tagset[selmon->seltags]) - #endif // EMPTYVIEW_PATCH { - #if VIEW_SAME_TAG_GIVES_PREVIOUS_TAG_PATCH - view(&((Arg) { .ui = 0 })); - #endif // VIEW_SAME_TAG_GIVES_PREVIOUS_TAG_PATCH return; } selmon->seltags ^= 1; /* toggle sel tagset */ - #if PERTAG_PATCH pertagview(arg); - #if SWAPFOCUS_PATCH - Client *unmodified = selmon->pertag->prevclient[selmon->pertag->curtag]; - #endif // SWAPFOCUS_PATCH - #else - if (arg->ui & TAGMASK) - selmon->tagset[selmon->seltags] = arg->ui & TAGMASK; - #endif // PERTAG_PATCH focus(NULL); - #if SWAPFOCUS_PATCH && PERTAG_PATCH - selmon->pertag->prevclient[selmon->pertag->curtag] = unmodified; - #endif // SWAPFOCUS_PATCH arrange(selmon); - #if BAR_EWMHTAGS_PATCH - updatecurrentdesktop(); - #endif // BAR_EWMHTAGS_PATCH } Client * @@ -4499,178 +2651,40 @@ zoom(const Arg *arg) c = (Client*)arg->v; if (!c) return; - #if ZOOMSWAP_PATCH - Client *at = NULL, *cold, *cprevious = NULL, *p; - #endif // ZOOMSWAP_PATCH - #if ZOOMFLOATING_PATCH - if (c && c->isfloating) - togglefloating(&((Arg) { .v = c })); - #endif // ZOOMFLOATING_PATCH - #if SWAPFOCUS_PATCH && PERTAG_PATCH - c->mon->pertag->prevclient[c->mon->pertag->curtag] = nexttiled(c->mon->clients); - #endif // SWAPFOCUS_PATCH if (!c->mon->lt[c->mon->sellt]->arrange || (c && c->isfloating) - #if ZOOMSWAP_PATCH - || !c - #endif // ZOOMSWAP_PATCH ) return; - #if ZOOMSWAP_PATCH - if (c == nexttiled(c->mon->clients)) { - #if PERTAG_PATCH - p = c->mon->pertag->prevzooms[c->mon->pertag->curtag]; - #else - p = prevzoom; - #endif // PERTAG_PATCH - at = findbefore(p); - if (at) - cprevious = nexttiled(at->next); - if (!cprevious || cprevious != p) { - #if PERTAG_PATCH - c->mon->pertag->prevzooms[c->mon->pertag->curtag] = NULL; - #else - prevzoom = NULL; - #endif // PERTAG_PATCH - #if SWAPFOCUS_PATCH && PERTAG_PATCH - if (!c || !(c = c->mon->pertag->prevclient[c->mon->pertag->curtag] = nexttiled(c->next))) - #else - if (!c || !(c = nexttiled(c->next))) - #endif // SWAPFOCUS_PATCH - return; - } else - #if SWAPFOCUS_PATCH && PERTAG_PATCH - c = c->mon->pertag->prevclient[c->mon->pertag->curtag] = cprevious; - #else - c = cprevious; - #endif // SWAPFOCUS_PATCH - } - - cold = nexttiled(c->mon->clients); - if (c != cold && !at) - at = findbefore(c); - detach(c); - attach(c); - /* swap windows instead of pushing the previous one down */ - if (c != cold && at) { - #if PERTAG_PATCH - c->mon->pertag->prevzooms[c->mon->pertag->curtag] = cold; - #else - prevzoom = cold; - #endif // PERTAG_PATCH - if (cold && at != cold) { - detach(cold); - cold->next = at->next; - at->next = cold; - } - } - focus(c); - arrange(c->mon); - #else if (c == nexttiled(c->mon->clients)) - #if SWAPFOCUS_PATCH && PERTAG_PATCH - if (!c || !(c = c->mon->pertag->prevclient[c->mon->pertag->curtag] = nexttiled(c->next))) - #else if (!c || !(c = nexttiled(c->next))) - #endif // SWAPFOCUS_PATCH return; pop(c); - #endif // ZOOMSWAP_PATCH } int main(int argc, char *argv[]) { - #if CMDCUSTOMIZE_PATCH - for (int i=1;isel; - float ratio; - int w, h,nw, nh; - - if (!c || !arg) - return; - if (selmon->lt[selmon->sellt]->arrange && !c->isfloating) - return; - - ratio = (float)c->w / (float)c->h; - h = arg->i; - w = (int)(ratio * h); - - nw = c->w + w; - nh = c->h + h; - - XRaiseWindow(dpy, c->win); - resize(c, c->x, c->y, nw, nh, True); -} \ No newline at end of file diff --git a/suckless/dwm/patch/aspectresize.h b/suckless/dwm/patch/aspectresize.h deleted file mode 100644 index ad0d0546..00000000 --- a/suckless/dwm/patch/aspectresize.h +++ /dev/null @@ -1 +0,0 @@ -static void aspectresize(const Arg *arg); \ No newline at end of file diff --git a/suckless/dwm/patch/attachx.c b/suckless/dwm/patch/attachx.c deleted file mode 100644 index a9b99b62..00000000 --- a/suckless/dwm/patch/attachx.c +++ /dev/null @@ -1,42 +0,0 @@ -void -attachx(Client *c) -{ - #if ATTACHABOVE_PATCH - Client *at; - if (!(c->mon->sel == NULL || c->mon->sel == c->mon->clients || c->mon->sel->isfloating)) { - for (at = c->mon->clients; at->next != c->mon->sel; at = at->next); - c->next = at->next; - at->next = c; - return; - } - #elif ATTACHASIDE_PATCH - Client *at; - unsigned int n; - - for (at = c->mon->clients, n = 0; at; at = at->next) - if (!at->isfloating && ISVISIBLEONTAG(at, c->tags)) - if (++n >= c->mon->nmaster) - break; - - if (at && c->mon->nmaster) { - c->next = at->next; - at->next = c; - return; - } - #elif ATTACHBELOW_PATCH - if (!(c->mon->sel == NULL || c->mon->sel == c || c->mon->sel->isfloating)) { - c->next = c->mon->sel->next; - c->mon->sel->next = c; - return; - } - #elif ATTACHBOTTOM_PATCH - Client *at; - for (at = c->mon->clients; at && at->next; at = at->next); - if (at) { - at->next = c; - c->next = NULL; - return; - } - #endif - attach(c); // master (default) -} diff --git a/suckless/dwm/patch/attachx.h b/suckless/dwm/patch/attachx.h deleted file mode 100644 index 46a8c392..00000000 --- a/suckless/dwm/patch/attachx.h +++ /dev/null @@ -1 +0,0 @@ -static void attachx(Client *c); \ No newline at end of file diff --git a/suckless/dwm/patch/autostart.c b/suckless/dwm/patch/autostart.c index b829c593..3c214eb7 100644 --- a/suckless/dwm/patch/autostart.c +++ b/suckless/dwm/patch/autostart.c @@ -80,4 +80,4 @@ runautostart(void) free(pathpfx); free(path); } -} \ No newline at end of file +} diff --git a/suckless/dwm/patch/autostart.h b/suckless/dwm/patch/autostart.h index 299eaef4..10a6f88f 100644 --- a/suckless/dwm/patch/autostart.h +++ b/suckless/dwm/patch/autostart.h @@ -1 +1 @@ -static void runautostart(void); \ No newline at end of file +static void runautostart(void); diff --git a/suckless/dwm/patch/bar_alpha.c b/suckless/dwm/patch/bar_alpha.c deleted file mode 100644 index d86bc1d4..00000000 --- a/suckless/dwm/patch/bar_alpha.c +++ /dev/null @@ -1,42 +0,0 @@ - -static int useargb = 0; -static Visual *visual; -static int depth; -static Colormap cmap; - -void -xinitvisual() -{ - XVisualInfo *infos; - XRenderPictFormat *fmt; - int nitems; - int i; - - XVisualInfo tpl = { - .screen = screen, - .depth = 32, - .class = TrueColor - }; - long masks = VisualScreenMask | VisualDepthMask | VisualClassMask; - - infos = XGetVisualInfo(dpy, masks, &tpl, &nitems); - visual = NULL; - for (i = 0; i < nitems; i ++) { - fmt = XRenderFindVisualFormat(dpy, infos[i].visual); - if (fmt->type == PictTypeDirect && fmt->direct.alphaMask) { - visual = infos[i].visual; - depth = infos[i].depth; - cmap = XCreateColormap(dpy, root, visual, AllocNone); - useargb = 1; - break; - } - } - - XFree(infos); - - if (!visual) { - visual = DefaultVisual(dpy, screen); - depth = DefaultDepth(dpy, screen); - cmap = DefaultColormap(dpy, screen); - } -} diff --git a/suckless/dwm/patch/bar_alpha.h b/suckless/dwm/patch/bar_alpha.h deleted file mode 100644 index 3c81522c..00000000 --- a/suckless/dwm/patch/bar_alpha.h +++ /dev/null @@ -1,3 +0,0 @@ -#define OPAQUE 0xffU - -static void xinitvisual(); diff --git a/suckless/dwm/patch/bar_alternativetags.c b/suckless/dwm/patch/bar_alternativetags.c deleted file mode 100644 index 3c329bc5..00000000 --- a/suckless/dwm/patch/bar_alternativetags.c +++ /dev/null @@ -1,6 +0,0 @@ -void -togglealttag() -{ - selmon->alttag = !selmon->alttag; - drawbar(selmon); -} \ No newline at end of file diff --git a/suckless/dwm/patch/bar_alternativetags.h b/suckless/dwm/patch/bar_alternativetags.h deleted file mode 100644 index 2c130f30..00000000 --- a/suckless/dwm/patch/bar_alternativetags.h +++ /dev/null @@ -1 +0,0 @@ -static void togglealttag(); \ No newline at end of file diff --git a/suckless/dwm/patch/bar_anybar.c b/suckless/dwm/patch/bar_anybar.c deleted file mode 100644 index 05b2513f..00000000 --- a/suckless/dwm/patch/bar_anybar.c +++ /dev/null @@ -1,82 +0,0 @@ -void -managealtbar(Window win, XWindowAttributes *wa) -{ - Monitor *m; - Bar *bar; - int i; - if (!(m = recttomon(wa->x, wa->y, wa->width, wa->height))) - return; - for (i = 0, bar = m->bar; bar && bar->win && bar->next; bar = bar->next, ++i); // find last bar - if (!bar) { - bar = m->bar = ecalloc(1, sizeof(Bar)); - bar->topbar = topbar; - } else if (bar && bar->win) { - bar->next = ecalloc(1, sizeof(Bar)); - bar->next->topbar = !bar->topbar; - bar = bar->next; - } - bar->external = 1; - bar->showbar = 1; - bar->mon = m; - bar->idx = i; - bar->borderpx = 0; - bar->win = win; - bar->bh = wa->height; - updatebarpos(m); - arrange(m); - XSelectInput(dpy, win, EnterWindowMask|FocusChangeMask|PropertyChangeMask|StructureNotifyMask); - XMapWindow(dpy, win); - XMoveResizeWindow(dpy, bar->win, bar->bx, -bar->by, wa->width, bar->bh); - arrange(selmon); - XChangeProperty(dpy, root, netatom[NetClientList], XA_WINDOW, 32, PropModeAppend, - (unsigned char *) &win, 1); -} - -void -spawnbar() -{ - if (*altbarcmd) - system(altbarcmd); -} - -void -unmanagealtbar(Window w) -{ - Monitor *m = wintomon(w); - Bar *bar; - - if (!m) - return; - - for (bar = m->bar; bar && bar->win; bar = bar->next) - if (bar->win == w) { - bar->win = 0; - bar->by = 0; - bar->bh = 0; - break; - } - updatebarpos(m); - arrange(m); -} - -int -wmclasscontains(Window win, const char *class, const char *name) -{ - XClassHint ch = { NULL, NULL }; - int res = 1; - - if (XGetClassHint(dpy, win, &ch)) { - if (ch.res_name && strstr(ch.res_name, name) == NULL) - res = 0; - if (ch.res_class && strstr(ch.res_class, class) == NULL) - res = 0; - } else - res = 0; - - if (ch.res_class) - XFree(ch.res_class); - if (ch.res_name) - XFree(ch.res_name); - - return res; -} \ No newline at end of file diff --git a/suckless/dwm/patch/bar_anybar.h b/suckless/dwm/patch/bar_anybar.h deleted file mode 100644 index 99f439ac..00000000 --- a/suckless/dwm/patch/bar_anybar.h +++ /dev/null @@ -1,4 +0,0 @@ -static void managealtbar(Window win, XWindowAttributes *wa); -static void spawnbar(); -static void unmanagealtbar(Window w); -static int wmclasscontains(Window win, const char *class, const char *name); \ No newline at end of file diff --git a/suckless/dwm/patch/bar_awesomebar.c b/suckless/dwm/patch/bar_awesomebar.c deleted file mode 100644 index ec5fa55a..00000000 --- a/suckless/dwm/patch/bar_awesomebar.c +++ /dev/null @@ -1,79 +0,0 @@ -int -width_awesomebar(Bar *bar, BarArg *a) -{ - return a->w; -} - -int -draw_awesomebar(Bar *bar, BarArg *a) -{ - int n = 0, scm, remainder = 0, tabw, pad; - unsigned int i; - #if BAR_TITLE_LEFT_PAD_PATCH && BAR_TITLE_RIGHT_PAD_PATCH - int x = a->x + lrpad / 2, w = a->w - lrpad; - #elif BAR_TITLE_LEFT_PAD_PATCH - int x = a->x + lrpad / 2, w = a->w - lrpad / 2; - #elif BAR_TITLE_RIGHT_PAD_PATCH - int x = a->x, w = a->w - lrpad / 2; - #else - int x = a->x, w = a->w; - #endif // BAR_TITLE_LEFT_PAD_PATCH | BAR_TITLE_RIGHT_PAD_PATCH - - Client *c; - for (c = bar->mon->clients; c; c = c->next) - if (ISVISIBLE(c)) - n++; - - if (n > 0) { - remainder = w % n; - tabw = w / n; - for (i = 0, c = bar->mon->clients; c; c = c->next, i++) { - if (!ISVISIBLE(c)) - continue; - if (bar->mon->sel == c) - scm = SchemeTitleSel; - else if (HIDDEN(c)) - scm = SchemeHid; - else - scm = SchemeTitleNorm; - - pad = lrpad / 2; - #if BAR_CENTEREDWINDOWNAME_PATCH - if (TEXTW(c->name) < tabw) - pad = (tabw - TEXTW(c->name) + lrpad) / 2; - #endif // BAR_CENTEREDWINDOWNAME_PATCH - - drw_setscheme(drw, scheme[scm]); - drw_text(drw, x, a->y, tabw + (i < remainder ? 1 : 0), a->h, pad, c->name, 0, False); - drawstateindicator(c->mon, c, 1, x, a->y, tabw + (i < remainder ? 1 : 0), a->h, 0, 0, c->isfixed); - x += tabw + (i < remainder ? 1 : 0); - } - } - return n; -} - -int -click_awesomebar(Bar *bar, Arg *arg, BarArg *a) -{ - int x = 0, n = 0; - Client *c; - - for (c = bar->mon->clients; c; c = c->next) - if (ISVISIBLE(c)) - n++; - - c = bar->mon->clients; - - do { - if (!c || !ISVISIBLE(c)) - continue; - else - x += (1.0 / (double)n) * a->w; - } while (c && a->x > x && (c = c->next)); - - if (c) { - arg->v = c; - return ClkWinTitle; - } - return -1; -} diff --git a/suckless/dwm/patch/bar_awesomebar.h b/suckless/dwm/patch/bar_awesomebar.h deleted file mode 100644 index 25bd98f1..00000000 --- a/suckless/dwm/patch/bar_awesomebar.h +++ /dev/null @@ -1,3 +0,0 @@ -static int width_awesomebar(Bar *bar, BarArg *a); -static int draw_awesomebar(Bar *bar, BarArg *a); -static int click_awesomebar(Bar *bar, Arg *arg, BarArg *a); \ No newline at end of file diff --git a/suckless/dwm/patch/bar_dwmblocks.c b/suckless/dwm/patch/bar_dwmblocks.c index 442b0bcd..e510a826 100644 --- a/suckless/dwm/patch/bar_dwmblocks.c +++ b/suckless/dwm/patch/bar_dwmblocks.c @@ -28,4 +28,4 @@ sigdwmblocks(const Arg *arg) sigqueue(dwmblockspid, SIGUSR1, sv); } } -} \ No newline at end of file +} diff --git a/suckless/dwm/patch/bar_dwmblocks.h b/suckless/dwm/patch/bar_dwmblocks.h index f08f1d56..b52a5785 100644 --- a/suckless/dwm/patch/bar_dwmblocks.h +++ b/suckless/dwm/patch/bar_dwmblocks.h @@ -1,2 +1,2 @@ static int getdwmblockspid(); -static void sigdwmblocks(const Arg *arg); \ No newline at end of file +static void sigdwmblocks(const Arg *arg); diff --git a/suckless/dwm/patch/bar_ewmhtags.c b/suckless/dwm/patch/bar_ewmhtags.c deleted file mode 100644 index 99774c95..00000000 --- a/suckless/dwm/patch/bar_ewmhtags.c +++ /dev/null @@ -1,52 +0,0 @@ -void -setcurrentdesktop(void) -{ - long data[] = { 0 }; - XChangeProperty(dpy, root, netatom[NetCurrentDesktop], XA_CARDINAL, 32, PropModeReplace, (unsigned char *)data, 1); -} - -void -setdesktopnames(void) -{ - int i; - XTextProperty text; - char *tags[NUMTAGS]; - for (i = 0; i < NUMTAGS; i++) - tags[i] = tagicon(selmon, i); - Xutf8TextListToTextProperty(dpy, tags, NUMTAGS, XUTF8StringStyle, &text); - XSetTextProperty(dpy, root, &text, netatom[NetDesktopNames]); -} - -void -setfloatinghint(Client *c) -{ - Atom target = XInternAtom(dpy, "_IS_FLOATING", 0); - unsigned int floating[1] = {c->isfloating}; - XChangeProperty(dpy, c->win, target, XA_CARDINAL, 32, PropModeReplace, (unsigned char *)floating, 1); -} - -void -setnumdesktops(void) -{ - long data[] = { NUMTAGS }; - XChangeProperty(dpy, root, netatom[NetNumberOfDesktops], XA_CARDINAL, 32, PropModeReplace, (unsigned char *)data, 1); -} - -void -setviewport(void) -{ - long data[] = { 0, 0 }; - XChangeProperty(dpy, root, netatom[NetDesktopViewport], XA_CARDINAL, 32, PropModeReplace, (unsigned char *)data, 2); -} - -void -updatecurrentdesktop(void) -{ - long rawdata[] = { selmon->tagset[selmon->seltags] }; - int i = 0; - while (*rawdata >> (i + 1)) { - i++; - } - long data[] = { i }; - XChangeProperty(dpy, root, netatom[NetCurrentDesktop], XA_CARDINAL, 32, PropModeReplace, (unsigned char *)data, 1); -} \ No newline at end of file diff --git a/suckless/dwm/patch/bar_ewmhtags.h b/suckless/dwm/patch/bar_ewmhtags.h deleted file mode 100644 index 959ab75a..00000000 --- a/suckless/dwm/patch/bar_ewmhtags.h +++ /dev/null @@ -1,6 +0,0 @@ -static void setcurrentdesktop(void); -static void setdesktopnames(void); -static void setfloatinghint(Client *c); -static void setnumdesktops(void); -static void setviewport(void); -static void updatecurrentdesktop(void); \ No newline at end of file diff --git a/suckless/dwm/patch/bar_fancybar.c b/suckless/dwm/patch/bar_fancybar.c deleted file mode 100644 index 0222ca74..00000000 --- a/suckless/dwm/patch/bar_fancybar.c +++ /dev/null @@ -1,70 +0,0 @@ -int -width_fancybar(Bar *bar, BarArg *a) -{ - return a->w; -} - -int -draw_fancybar(Bar *bar, BarArg *a) -{ - int ftw, mw, ew = 0, n = 0; - unsigned int i; - Client *c; - Monitor *m = bar->mon; - - #if BAR_TITLE_LEFT_PAD_PATCH && BAR_TITLE_RIGHT_PAD_PATCH - int x = a->x + lrpad / 2, w = a->w - lrpad; - #elif BAR_TITLE_LEFT_PAD_PATCH - int x = a->x + lrpad / 2, w = a->w - lrpad / 2; - #elif BAR_TITLE_RIGHT_PAD_PATCH - int x = a->x, w = a->w - lrpad / 2; - #else - int x = a->x, w = a->w; - #endif // BAR_TITLE_LEFT_PAD_PATCH | BAR_TITLE_RIGHT_PAD_PATCH - - for (c = m->clients; c; c = c->next) { - if (ISVISIBLE(c)) - n++; - } - - if (n > 0) { - ftw = TEXTW(m->sel->name); - mw = (ftw >= w || n == 1) ? 0 : (w - ftw) / (n - 1); - - i = 0; - - for (c = m->clients; c; c = c->next) { - if (!ISVISIBLE(c) || c == m->sel) - continue; - ftw = TEXTW(c->name); - if (ftw < mw) - ew += (mw - ftw); - else - i++; - } - - if (i > 0) - mw += ew / i; - - for (c = m->clients; c; c = c->next) { - if (!ISVISIBLE(c)) - continue; - ftw = MIN(m->sel == c ? w : mw, TEXTW(c->name)); - drw_setscheme(drw, scheme[m->sel == c ? SchemeTitleSel : SchemeTitleNorm]); - if (ftw > 0) /* trap special handling of 0 in drw_text */ - drw_text(drw, x, a->y, ftw, a->h, lrpad / 2, c->name, 0, False); - drawstateindicator(c->mon, c, 1, x, a->y, ftw, a->h, 0, 0, c->isfixed); - x += ftw; - w -= ftw; - } - } - return n; -} - -int -click_fancybar(Bar *bar, Arg *arg, BarArg *a) -{ - return ClkWinTitle; -} - - diff --git a/suckless/dwm/patch/bar_fancybar.h b/suckless/dwm/patch/bar_fancybar.h deleted file mode 100644 index b4f81749..00000000 --- a/suckless/dwm/patch/bar_fancybar.h +++ /dev/null @@ -1,3 +0,0 @@ -static int width_fancybar(Bar *bar, BarArg *a); -static int draw_fancybar(Bar *bar, BarArg *a); -static int click_fancybar(Bar *bar, Arg *arg, BarArg *a); \ No newline at end of file diff --git a/suckless/dwm/patch/bar_flexwintitle.c b/suckless/dwm/patch/bar_flexwintitle.c deleted file mode 100644 index f7da241b..00000000 --- a/suckless/dwm/patch/bar_flexwintitle.c +++ /dev/null @@ -1,436 +0,0 @@ -/* Flexwintitle properties, you can override these in your config.h if you want. */ -#ifndef FLEXWINTITLE_BORDERS -#define FLEXWINTITLE_BORDERS 1 // 0 = off, 1 = on -#endif -#ifndef FLEXWINTITLE_SHOWFLOATING -#define FLEXWINTITLE_SHOWFLOATING 0 // whether to show titles for floating windows, hidden clients are always shown -#endif -#ifndef FLEXWINTITLE_MASTERWEIGHT -#define FLEXWINTITLE_MASTERWEIGHT 9 // master weight compared to stack, hidden and floating window titles -#endif -#ifndef FLEXWINTITLE_STACKWEIGHT -#define FLEXWINTITLE_STACKWEIGHT 3 // stack weight compared to master, hidden and floating window titles -#endif -#ifndef FLEXWINTITLE_HIDDENWEIGHT -#define FLEXWINTITLE_HIDDENWEIGHT 1 // hidden window title weight -#endif -#ifndef FLEXWINTITLE_FLOATWEIGHT -#define FLEXWINTITLE_FLOATWEIGHT 1 // floating window title weight, set to 0 to not show floating windows -#endif - -#define SCHEMEFOR(c) getschemefor(m, c, groupactive == c) - -enum { GRP_NOSELECTION, GRP_MASTER, GRP_STACK1, GRP_STACK2, GRP_FLOAT, GRP_HIDDEN }; - -int -width_flexwintitle(Bar *bar, BarArg *a) -{ - return a->w; -} - -int -draw_flexwintitle(Bar *bar, BarArg *a) -{ - drw_rect(drw, a->x, a->y, a->w, a->h, 1, 1); - return flextitlecalculate(bar->mon, a->x, a->w, -1, flextitledraw, NULL, a); -} - -int -click_flexwintitle(Bar *bar, Arg *arg, BarArg *a) -{ - flextitlecalculate(bar->mon, 0, a->w, a->x, flextitleclick, arg, a); - return ClkWinTitle; -} - -Client * -flextitledrawarea(Monitor *m, Client *c, int x, int r, int w, int max_clients, int scheme, int draw_tiled, int draw_hidden, int draw_floating, - int passx, void(*tabfn)(Monitor *, Client *, int, int, int, int, Arg *arg, BarArg *barg), Arg *arg, BarArg *barg) -{ - int i; - for (i = 0; c && i < max_clients; c = c->next) { - if ( - ISVISIBLE(c) && - ( - (draw_tiled && !c->isfloating && !HIDDEN(c)) || - (draw_floating && c->isfloating && !HIDDEN(c)) || - (draw_hidden && HIDDEN(c)) - ) - ) { - tabfn(m, c, passx, x, w + (i < r ? 1 : 0), scheme, arg, barg); - x += w + (i < r ? 1 : 0); - i++; - } - } - return c; -} - -int -getschemefor(Monitor *m, int group, int activegroup) -{ - switch (group) { - case GRP_NOSELECTION: - case GRP_MASTER: - case GRP_STACK1: - case GRP_STACK2: - #if BSTACK_LAYOUT - if (m->lt[m->sellt]->arrange == &bstack) - return (activegroup ? SchemeFlexActLTR : SchemeFlexInaLTR); - #endif // BSTACK_LAYOUT - #if BSTACKHORIZ_LAYOUT - if (m->lt[m->sellt]->arrange == &bstackhoriz) { - if (group == GRP_MASTER) - return (activegroup ? SchemeFlexActLTR : SchemeFlexInaLTR); - else - return (activegroup ? SchemeFlexActTTB : SchemeFlexInaTTB); - } - #endif // BSTACKHORIZ_LAYOUT - #if CENTEREDMASTER_LAYOUT - if (m->lt[m->sellt]->arrange == ¢eredmaster) - return (activegroup ? SchemeFlexActTTB : SchemeFlexInaTTB); - #endif // CENTEREDMASTER_LAYOUT - #if CENTEREDFLOATINGMASTER_LAYOUT - if (m->lt[m->sellt]->arrange == ¢eredfloatingmaster) - return (activegroup ? SchemeFlexActLTR : SchemeFlexInaLTR); - #endif // CENTEREDFLOATINGMASTER_LAYOUT - #if COLUMNS_LAYOUT - if (m->lt[m->sellt]->arrange == &col) { - if (group == GRP_MASTER) - return (activegroup ? SchemeFlexActLTR : SchemeFlexInaLTR); - else - return (activegroup ? SchemeFlexActTTB : SchemeFlexInaTTB); - } - #endif // COLUMNS_LAYOUT - #if DECK_LAYOUT - if (m->lt[m->sellt]->arrange == &deck) { - if (group == GRP_MASTER) - return (activegroup ? SchemeFlexActTTB : SchemeFlexInaTTB); - else - return (activegroup ? SchemeFlexActMONO : SchemeFlexInaMONO); - } - #endif // DECK_LAYOUT - #if FIBONACCI_DWINDLE_LAYOUT - if (m->lt[m->sellt]->arrange == &dwindle) - return (activegroup ? SchemeFlexActDWDL : SchemeFlexInaDWDL); - #endif // FIBONACCI_DWINDLE_LAYOUT - #if FIBONACCI_SPIRAL_LAYOUT - if (m->lt[m->sellt]->arrange == &spiral) - return (activegroup ? SchemeFlexActSPRL : SchemeFlexInaSPRL); - #endif // FIBONACCI_SPIRAL_LAYOUT - #if FLEXTILE_DELUXE_LAYOUT - if (m->lt[m->sellt]->arrange == &flextile) - return (activegroup ? SchemeFlexActTTB + m->ltaxis[group] : SchemeFlexInaTTB + m->ltaxis[group]); - #endif // FLEXTILE_DELUXE_LAYOUT - #if GAPPLESSGRID_LAYOUT - if (m->lt[m->sellt]->arrange == &gaplessgrid) - return (activegroup ? SchemeFlexActGRID : SchemeFlexInaGRID); - #endif // GAPPLESSGRID_LAYOUT - #if GRIDMODE_LAYOUT - if (m->lt[m->sellt]->arrange == &grid) - return (activegroup ? SchemeFlexActGRDM : SchemeFlexInaGRDM); - #endif // GRIDMODE_LAYOUT - #if HORIZGRID_LAYOUT - if (m->lt[m->sellt]->arrange == &horizgrid) - return (activegroup ? SchemeFlexActHGRD : SchemeFlexInaHGRD); - #endif // HORIZGRID_LAYOUT - #if NROWGRID_LAYOUT - if (m->lt[m->sellt]->arrange == &nrowgrid) - return (activegroup ? SchemeFlexActGRD1 : SchemeFlexInaGRD1); - #endif // NROWGRID_LAYOUT - #if TILE_LAYOUT - if (m->lt[m->sellt]->arrange == &tile) - return (activegroup ? SchemeFlexActTTB : SchemeFlexInaTTB); - #endif // TILE_LAYOUT - #if MONOCLE_LAYOUT - if (m->lt[m->sellt]->arrange == &monocle) - return (activegroup ? SchemeFlexActMONO : SchemeFlexInaMONO); - #endif // MONOCLE_LAYOUT - return SchemeTitleNorm; - case GRP_HIDDEN: - return SchemeHid; - case GRP_FLOAT: - return (activegroup ? SchemeFlexActFloat : SchemeFlexInaFloat); - } - return SchemeTitleNorm; -} - -int -getselschemefor(int scheme) -{ - if (scheme == SchemeFlexActFloat || scheme == SchemeFlexInaFloat) - return SchemeFlexSelFloat; - if (scheme >= SchemeFlexInaTTB) - return scheme + SchemeFlexInaTTB - SchemeFlexActTTB; - if (scheme >= SchemeFlexActTTB) - return scheme + SchemeFlexSelTTB - SchemeFlexActTTB; - return SchemeTitleSel; -} - -void -flextitledraw(Monitor *m, Client *c, int unused, int x, int w, int tabscheme, Arg *arg, BarArg *barg) -{ - if (!c) - return; - int i, nclienttags = 0, nviewtags = 0, pad = lrpad / 2; - int clientscheme = ( - c == selmon->sel - ? getselschemefor(tabscheme) - : HIDDEN(c) - ? SchemeHid - : c->isurgent - ? SchemeUrg - : tabscheme - ); - drw_setscheme(drw, scheme[clientscheme]); - XSetWindowBorder(dpy, c->win, scheme[clientscheme][ColBorder].pixel); - if (w <= TEXTW("A") - lrpad + pad) // reduce text padding if wintitle is too small - pad = (w - TEXTW("A") + lrpad < 0 ? 0 : (w - TEXTW("A") + lrpad) / 2); - #if BAR_CENTEREDWINDOWNAME_PATCH - else if (TEXTW(c->name) < w) - pad = (w - TEXTW(c->name) + lrpad) / 2; - #endif // BAR_CENTEREDWINDOWNAME_PATCH - - drw_text(drw, x, barg->y, w, barg->h, pad, c->name, 0, False); - drawstateindicator(m, c, 1, x + 2, barg->y, w, barg->h, 0, 0, 0); - - if (FLEXWINTITLE_BORDERS) { - XSetForeground(drw->dpy, drw->gc, scheme[SchemeSel][ColBorder].pixel); - XFillRectangle(drw->dpy, drw->drawable, drw->gc, x, barg->y, 1, barg->h); - XFillRectangle(drw->dpy, drw->drawable, drw->gc, x + w - (x + w >= barg->w ? 1 : 0), barg->y, 1, barg->h); - } - /* Optional tags icons */ - for (i = 0; i < NUMTAGS; i++) { - if ((m->tagset[m->seltags] >> i) & 1) - nviewtags++; - if ((c->tags >> i) & 1) - nclienttags++; - } - - if (TAGSINDICATOR == 2 || nclienttags > 1 || nviewtags > 1) - drawindicator(m, c, 1, x, barg->y, w, barg->h, 0, 0, 0, INDICATOR_RIGHT_TAGS); -} - -#ifndef HIDDEN -#define HIDDEN(C) 0 -#endif - -void -flextitleclick(Monitor *m, Client *c, int passx, int x, int w, int unused, Arg *arg, BarArg *barg) -{ - if (passx >= x && passx <= x + w) - arg->v = c; -} - -int -flextitlecalculate( - Monitor *m, int offx, int tabw, int passx, - void(*tabfn)(Monitor *, Client *, int, int, int, int, Arg *arg, BarArg *barg), - Arg *arg, BarArg *barg -) { - Client *c; - int n, center = 0, mirror = 0, fixed = 0; // layout configuration - int clientsnmaster = 0, clientsnstack = 0, clientsnfloating = 0, clientsnhidden = 0; - int i, w, r, num = 0, den, fulllayout = 0; - int clientsnstack2 = 0; - int groupactive = 0; - int selidx = 0; - int dualstack = 0; - int rw, rr; - - int mas_x = offx, st1_x = offx, st2_x = offx, hid_x = offx, flt_x = offx; - int mas_w, st1_w, st2_w, hid_w; - - for (i = 0, c = m->clients; c; c = c->next) { - if (!ISVISIBLE(c)) - continue; - if (HIDDEN(c)) { - if (FLEXWINTITLE_HIDDENWEIGHT) - clientsnhidden++; - continue; - } - - if (c->isfloating) { - if (FLEXWINTITLE_FLOATWEIGHT) - clientsnfloating++; - continue; - } - - if (m->sel == c) - selidx = i; - - if (i < m->nmaster) - clientsnmaster++; - #if FLEXTILE_DELUXE_LAYOUT - else if (m->nstack) { - if (clientsnstack < m->nstack) - clientsnstack++; - else - clientsnstack2++; - } - #endif // FLEXTILE_DELUXE_LAYOUT - else if ((i - m->nmaster) % 2) - clientsnstack2++; - else - clientsnstack++; - i++; - } - - if (!m->sel) - groupactive = GRP_NOSELECTION; - else if (HIDDEN(m->sel)) - groupactive = GRP_HIDDEN; - else if (m->sel->isfloating) - groupactive = GRP_FLOAT; - else if (selidx < clientsnmaster) - groupactive = GRP_MASTER; - else if (selidx < clientsnmaster + clientsnstack) - groupactive = GRP_STACK1; - else if (selidx < clientsnmaster + clientsnstack + clientsnstack2) - groupactive = GRP_STACK2; - - n = clientsnmaster + clientsnstack + clientsnstack2 + clientsnfloating + clientsnhidden; - if (n == 0) - return 0; - #if FLEXTILE_DELUXE_LAYOUT - else if (m->lt[m->sellt]->arrange == &flextile) { - int layout = m->ltaxis[LAYOUT]; - if (layout < 0) { - mirror = 1; - layout *= -1; - } - if (layout > FLOATING_MASTER) { - layout -= FLOATING_MASTER; - fixed = 1; - } - - if (layout == SPLIT_HORIZONTAL_DUAL_STACK || layout == SPLIT_HORIZONTAL_DUAL_STACK_FIXED) - dualstack = 1; - else if (layout == SPLIT_CENTERED_VERTICAL && (fixed || n - m->nmaster > 1)) - center = 1; - else if (layout == FLOATING_MASTER) - center = 1; - else if (layout == SPLIT_CENTERED_HORIZONTAL) { - if (fixed || n - m->nmaster > 1) - center = 1; - } - } - #endif // FLEXTILE_DELUXE_LAYOUT - #if CENTEREDMASTER_LAYOUT - else if (m->lt[m->sellt]->arrange == ¢eredmaster && (fixed || n - m->nmaster > 1)) - center = 1; - #endif // CENTEREDMASTER_LAYOUT - #if CENTEREDFLOATINGMASTER_LAYOUT - else if (m->lt[m->sellt]->arrange == ¢eredfloatingmaster) - center = 1; - #endif // CENTEREDFLOATINGMASTER_LAYOUT - - /* Certain layouts have no master / stack areas */ - if (!m->lt[m->sellt]->arrange // floating layout - || (!n || (!fixed && m->nmaster && n <= m->nmaster)) // no master - #if MONOCLE_LAYOUT - || m->lt[m->sellt]->arrange == &monocle - #endif // MONOCLE_LAYOUT - #if GRIDMODE_LAYOUT - || m->lt[m->sellt]->arrange == &grid - #endif // GRIDMODE_LAYOUT - #if HORIZGRID_LAYOUT - || m->lt[m->sellt]->arrange == &horizgrid - #endif // HORIZGRID_LAYOUT - #if GAPPLESSGRID_LAYOUT - || m->lt[m->sellt]->arrange == &gaplessgrid - #endif // GAPPLESSGRID_LAYOUT - #if NROWGRID_LAYOUT - || m->lt[m->sellt]->arrange == &nrowgrid - #endif // NROWGRID_LAYOUT - #if FLEXTILE_DELUXE_LAYOUT - || (m->lt[m->sellt]->arrange == &flextile && m->ltaxis[LAYOUT] == NO_SPLIT) - #endif // FLEXTILE_DELUXE_LAYOUT - ) - fulllayout = 1; - - num = tabw; - c = m->clients; - - /* floating mode */ - if ((fulllayout && FLEXWINTITLE_FLOATWEIGHT > 0) || clientsnmaster + clientsnstack == 0 || !m->lt[m->sellt]->arrange) { - den = clientsnmaster + clientsnstack + clientsnstack2 + clientsnfloating + clientsnhidden; - w = num / den; - r = num % den; // rest - c = flextitledrawarea(m, c, mas_x, r, w, den, !m->lt[m->sellt]->arrange ? SchemeFlexActFloat : SCHEMEFOR(GRP_MASTER), 1, FLEXWINTITLE_HIDDENWEIGHT, FLEXWINTITLE_FLOATWEIGHT, passx, tabfn, arg, barg); // floating - /* no master and stack mode, e.g. monocole, grid layouts, fibonacci */ - } else if (fulllayout) { - den = clientsnmaster + clientsnstack + clientsnstack2 + clientsnhidden; - w = num / den; - r = num % den; // rest - c = flextitledrawarea(m, c, mas_x, r, w, den, SCHEMEFOR(GRP_MASTER), 1, FLEXWINTITLE_HIDDENWEIGHT, 0, passx, tabfn, arg, barg); // full - /* tiled mode */ - } else { - den = clientsnmaster * FLEXWINTITLE_MASTERWEIGHT + (clientsnstack + clientsnstack2) * FLEXWINTITLE_STACKWEIGHT + clientsnfloating * FLEXWINTITLE_FLOATWEIGHT + clientsnhidden * FLEXWINTITLE_HIDDENWEIGHT; - w = num / den; // weight width per client - r = num % den; // weight rest width - rw = r / n; // rest incr per client - rr = r % n; // rest rest - #if FLEXTILE_DELUXE_LAYOUT - if ((!center && !dualstack) || (center && n <= m->nmaster + (m->nstack ? m->nstack : 1))) - #else - if ((!center && !dualstack) || (center && n <= m->nmaster + 1)) - #endif // FLEXTILE_DELUXE_LAYOUT - { - clientsnstack += clientsnstack2; - clientsnstack2 = 0; - if (groupactive == GRP_STACK2) - groupactive = GRP_STACK1; - } - - mas_w = clientsnmaster * rw + w * clientsnmaster * FLEXWINTITLE_MASTERWEIGHT + (rr > 0 ? MIN(rr, clientsnmaster) : 0); - rr -= clientsnmaster; - st1_w = clientsnstack * (rw + w * FLEXWINTITLE_STACKWEIGHT) + (rr > 0 ? MIN(rr, clientsnstack) : 0); - rr -= clientsnstack; - st2_w = clientsnstack2 * (rw + w * FLEXWINTITLE_STACKWEIGHT) + (rr > 0 ? MIN(rr, clientsnstack2) : 0); - rr -= clientsnstack2; - hid_w = clientsnhidden * (rw + w * FLEXWINTITLE_HIDDENWEIGHT) + (rr > 0 ? MIN(rr, clientsnhidden) : 0); - rr -= clientsnhidden; - rr = r % n; - - if (mirror) { - if (center && clientsnstack2) { - mas_x = st1_x + st1_w; - st2_x = mas_x + mas_w; - hid_x = st2_x + st2_w; - } else { - if (clientsnstack2) { - st2_x = st1_x + st1_w; - mas_x = st2_x + st2_w; - } else - mas_x = st1_x + st1_w; - hid_x = mas_x + mas_w; - } - } else { - if (center && clientsnstack2) { - mas_x = st2_x + st2_w; - st1_x = mas_x + mas_w; - hid_x = st1_x + st1_w; - } else { - st1_x = mas_x + mas_w; - if (clientsnstack2) { - st2_x = st1_x + st1_w; - hid_x = st2_x + st2_w; - } else - hid_x = st1_x + st1_w; - } - } - - flt_x = hid_x + hid_w; - c = flextitledrawarea(m, c, mas_x, rr, w * FLEXWINTITLE_MASTERWEIGHT + rw, clientsnmaster, SCHEMEFOR(GRP_MASTER), 1, 0, 0, passx, tabfn, arg, barg); // master - rr -= clientsnmaster; - c = flextitledrawarea(m, c, st1_x, rr, w * FLEXWINTITLE_STACKWEIGHT + rw, clientsnstack, SCHEMEFOR(GRP_STACK1), 1, 0, 0, passx, tabfn, arg, barg); // stack1 - rr -= clientsnstack; - if (clientsnstack2) { - c = flextitledrawarea(m, c, st2_x, rr, w * FLEXWINTITLE_STACKWEIGHT + rw, clientsnstack2, SCHEMEFOR(GRP_STACK2), 1, 0, 0, passx, tabfn, arg, barg); // stack2 - rr -= clientsnstack2; - } - c = flextitledrawarea(m, m->clients, hid_x, rr, w * FLEXWINTITLE_HIDDENWEIGHT + rw, clientsnhidden, SCHEMEFOR(GRP_HIDDEN), 0, 1, 0, passx, tabfn, arg, barg); // hidden - rr -= clientsnhidden; - c = flextitledrawarea(m, m->clients, flt_x, rr, w * FLEXWINTITLE_FLOATWEIGHT + rw, clientsnfloating, SCHEMEFOR(GRP_FLOAT), 0, 0, 1, passx, tabfn, arg, barg); // floating - } - return 1; -} \ No newline at end of file diff --git a/suckless/dwm/patch/bar_flexwintitle.h b/suckless/dwm/patch/bar_flexwintitle.h deleted file mode 100644 index 6183c8e6..00000000 --- a/suckless/dwm/patch/bar_flexwintitle.h +++ /dev/null @@ -1,10 +0,0 @@ -static int width_flexwintitle(Bar *bar, BarArg *a); -static int draw_flexwintitle(Bar *bar, BarArg *a); -static int click_flexwintitle(Bar *bar, Arg *arg, BarArg *a); - -static void flextitledraw(Monitor *m, Client *c, int unused, int x, int w, int groupactive, Arg *arg, BarArg *barg); -static void flextitleclick(Monitor *m, Client *c, int passx, int x, int w, int unused, Arg *arg, BarArg *barg); -static int flextitlecalculate(Monitor *m, int offx, int w, int passx, void(*tabfn)(Monitor *, Client *, int, int, int, int, Arg *arg, BarArg *barg), Arg *arg, BarArg *barg); -static int getschemefor(Monitor *m, int group, int activegroup); -static int getselschemefor(int scheme); -static Client *flextitledrawarea(Monitor *m, Client *c, int x, int r, int w, int max_clients, int tabscheme, int draw_tiled, int draw_hidden, int draw_floating, int passx, void(*tabfn)(Monitor *, Client *, int, int, int, int, Arg *arg, BarArg *barg), Arg *arg, BarArg *barg); \ No newline at end of file diff --git a/suckless/dwm/patch/bar_holdbar.c b/suckless/dwm/patch/bar_holdbar.c deleted file mode 100644 index 358cbec3..00000000 --- a/suckless/dwm/patch/bar_holdbar.c +++ /dev/null @@ -1,37 +0,0 @@ -void -holdbar(const Arg *arg) -{ - if (selmon->showbar) - return; - Bar *bar; - selmon->showbar = 2; - updatebarpos(selmon); - for (bar = selmon->bar; bar; bar = bar->next) - XMoveResizeWindow(dpy, bar->win, bar->bx, bar->by, bar->bw, bar->bh); -} - -void -keyrelease(XEvent *e) -{ - Bar *bar; - if (XEventsQueued(dpy, QueuedAfterReading)) { - XEvent ne; - XPeekEvent(dpy, &ne); - - if (ne.type == KeyPress && ne.xkey.time == e->xkey.time && - ne.xkey.keycode == e->xkey.keycode) { - XNextEvent(dpy, &ne); - return; - } - } - if (e->xkey.keycode == XKeysymToKeycode(dpy, HOLDKEY) && selmon->showbar == 2) { - selmon->showbar = 0; - updatebarpos(selmon); - for (bar = selmon->bar; bar; bar = bar->next) - XMoveResizeWindow(dpy, bar->win, bar->bx, bar->by, bar->bw, bar->bh); - arrange(selmon); - } - #if COMBO_PATCH - combo = 0; - #endif // COMBO_PATCH -} \ No newline at end of file diff --git a/suckless/dwm/patch/bar_holdbar.h b/suckless/dwm/patch/bar_holdbar.h deleted file mode 100644 index 53944251..00000000 --- a/suckless/dwm/patch/bar_holdbar.h +++ /dev/null @@ -1,2 +0,0 @@ -static void keyrelease(XEvent *e); -static void holdbar(const Arg *arg); \ No newline at end of file diff --git a/suckless/dwm/patch/bar_indicators.c b/suckless/dwm/patch/bar_indicators.c index 644e0726..298eb196 100644 --- a/suckless/dwm/patch/bar_indicators.c +++ b/suckless/dwm/patch/bar_indicators.c @@ -96,15 +96,8 @@ drawindicator(Monitor *m, Client *c, unsigned int occ, int x, int y, int w, int void drawstateindicator(Monitor *m, Client *c, unsigned int occ, int x, int y, int w, int h, unsigned int tag, int filled, int invert) { - #if FAKEFULLSCREEN_CLIENT_PATCH - if (c->fakefullscreen && c->isfloating) - drawindicator(m, c, occ, x, y, w, h, tag, filled, invert, floatfakefsindicatortype); - else if (c->fakefullscreen) - drawindicator(m, c, occ, x, y, w, h, tag, filled, invert, fakefsindicatortype); - else - #endif // FAKEFULLSCREEN_CLIENT_PATCH if (c->isfloating) drawindicator(m, c, occ, x, y, w, h, tag, filled, invert, floatindicatortype); else drawindicator(m, c, occ, x, y, w, h, tag, filled, invert, tiledindicatortype); -} \ No newline at end of file +} diff --git a/suckless/dwm/patch/bar_indicators.h b/suckless/dwm/patch/bar_indicators.h index d015101a..bc667dd4 100644 --- a/suckless/dwm/patch/bar_indicators.h +++ b/suckless/dwm/patch/bar_indicators.h @@ -17,4 +17,4 @@ enum { }; static void drawindicator(Monitor *m, Client *c, unsigned int occ, int x, int y, int w, int h, unsigned int tag, int filled, int invert, int type); -static void drawstateindicator(Monitor *m, Client *c, unsigned int occ, int x, int y, int w, int h, unsigned int tag, int filled, int invert); \ No newline at end of file +static void drawstateindicator(Monitor *m, Client *c, unsigned int occ, int x, int y, int w, int h, unsigned int tag, int filled, int invert); diff --git a/suckless/dwm/patch/bar_ltsymbol.c b/suckless/dwm/patch/bar_ltsymbol.c index 4c861f87..1004378e 100644 --- a/suckless/dwm/patch/bar_ltsymbol.c +++ b/suckless/dwm/patch/bar_ltsymbol.c @@ -14,4 +14,4 @@ int click_ltsymbol(Bar *bar, Arg *arg, BarArg *a) { return ClkLtSymbol; -} \ No newline at end of file +} diff --git a/suckless/dwm/patch/bar_powerline_status.c b/suckless/dwm/patch/bar_powerline_status.c deleted file mode 100644 index 2f95570a..00000000 --- a/suckless/dwm/patch/bar_powerline_status.c +++ /dev/null @@ -1,121 +0,0 @@ -static Clr **statusscheme; - -int -width_pwrl_status(Bar *bar, BarArg *a) -{ - #if BAR_STATUSCMD_PATCH - return widthpowerlinestatus(rawstext); - #else - return widthpowerlinestatus(stext); - #endif // BAR_STATUSCMD_PATCH -} - -#if BAR_EXTRASTATUS_PATCH -int -width_pwrl_status_es(Bar *bar, BarArg *a) -{ - #if BAR_STATUSCMD_PATCH - return widthpowerlinestatus(rawestext); - #else - return widthpowerlinestatus(estext); - #endif // BAR_STATUSCMD_PATCH -} -#endif // BAR_EXTRASTATUS_PATCH - -int -draw_pwrl_status(Bar *bar, BarArg *a) -{ - #if BAR_STATUSCMD_PATCH - return drawpowerlinestatus(a->x + a->w, rawstext, a); - #else - return drawpowerlinestatus(a->x + a->w, stext, a); - #endif // BAR_STATUSCMD_PATCH -} - -#if BAR_EXTRASTATUS_PATCH -int -draw_pwrl_status_es(Bar *bar, BarArg *a) -{ - #if BAR_STATUSCMD_PATCH - return drawpowerlinestatus(a->x + a->w, rawestext, a); - #else - return drawpowerlinestatus(a->x + a->w, estext, a); - #endif // BAR_STATUSCMD_PATCH -} -#endif // BAR_EXTRASTATUS_PATCH - -int -click_pwrl_status(Bar *bar, Arg *arg, BarArg *a) -{ - return ClkStatusText; -} - -int -widthpowerlinestatus(char *stext) -{ - char status[512]; - int w = 0, i, n = strlen(stext); - int plw = drw->fonts->h / 2 + 1; - char *bs, bp = '|'; - strcpy(status, stext); - - for (i = n, bs = &status[n-1]; i >= 0; i--, bs--) { - if (*bs == '<' || *bs == '/' || *bs == '\\' || *bs == '>' || *bs == '|') { /* block start */ - if (bp != '|') - w += plw; - w += TEXTW(bs+2); - bp = *bs; - *bs = 0; - } - } - if (bp != '|') - w += plw * 2; - - return w; -} - -int -drawpowerlinestatus(int xpos, char *stext, BarArg *barg) -{ - char status[512]; - int i, n = strlen(stext), cn = 0; - int x = xpos, w = 0; - int plw = drw->fonts->h / 2 + 1; - char *bs, bp = '|'; - Clr *prevscheme = statusscheme[0], *nxtscheme; - strcpy(status, stext); - - for (i = n, bs = &status[n-1]; i >= 0; i--, bs--) { - if (*bs == '<' || *bs == '/' || *bs == '\\' || *bs == '>' || *bs == '|') { /* block start */ - cn = ((int) *(bs+1)) - 1; - - if (cn < LENGTH(statuscolors)) { - drw_settrans(drw, prevscheme, (nxtscheme = statusscheme[cn])); - } else { - drw_settrans(drw, prevscheme, (nxtscheme = statusscheme[0])); - } - - if (bp != '|') { - drw_arrow(drw, x - plw, barg->y, plw, barg->h, bp == '\\' || bp == '>' ? 1 : 0, bp == '<' ? 0 : 1); - x -= plw; - } - - drw_setscheme(drw, nxtscheme); - w = TEXTW(bs+2); - drw_text(drw, x - w, barg->y, w, barg->h, lrpad / 2, bs+2, 0, False); - x -= w; - - bp = *bs; - *bs = 0; - prevscheme = nxtscheme; - } - } - if (bp != '|') { - drw_settrans(drw, prevscheme, scheme[SchemeNorm]); - drw_arrow(drw, x - plw, barg->y, plw, barg->h, bp == '\\' || bp == '>' ? 1 : 0, bp == '<' ? 0 : 1); - drw_rect(drw, x - 2 * plw, barg->y, plw, barg->h, 1, 1); - x -= plw * 2; - } - - return xpos - x; -} \ No newline at end of file diff --git a/suckless/dwm/patch/bar_powerline_status.h b/suckless/dwm/patch/bar_powerline_status.h deleted file mode 100644 index 1eb68240..00000000 --- a/suckless/dwm/patch/bar_powerline_status.h +++ /dev/null @@ -1,11 +0,0 @@ -static int width_pwrl_status(Bar *bar, BarArg *a); -#if BAR_EXTRASTATUS_PATCH -static int width_pwrl_status_es(Bar *bar, BarArg *a); -#endif // BAR_EXTRASTATUS_PATCH -static int draw_pwrl_status(Bar *bar, BarArg *a); -#if BAR_EXTRASTATUS_PATCH -static int draw_pwrl_status_es(Bar *bar, BarArg *a); -#endif // BAR_EXTRASTATUS_PATCH -static int click_pwrl_status(Bar *bar, Arg *arg, BarArg *a); -static int drawpowerlinestatus(int x, char *stext, BarArg *a); -static int widthpowerlinestatus(char *stext); \ No newline at end of file diff --git a/suckless/dwm/patch/bar_powerline_tags.c b/suckless/dwm/patch/bar_powerline_tags.c deleted file mode 100644 index f4dd9237..00000000 --- a/suckless/dwm/patch/bar_powerline_tags.c +++ /dev/null @@ -1,106 +0,0 @@ -int -width_pwrl_tags(Bar *bar, BarArg *a) -{ - int w, i; - int plw = drw->fonts->h / 2 + 1; - #if BAR_HIDEVACANTTAGS_PATCH - Client *c; - unsigned int occ = 0; - for (c = bar->mon->clients; c; c = c->next) - occ |= c->tags == 255 ? 0 : c->tags; - #endif // BAR_HIDEVACANTTAGS_PATCH - - for (w = 0, i = 0; i < NUMTAGS; i++) { - #if BAR_HIDEVACANTTAGS_PATCH - if (!(occ & 1 << i || bar->mon->tagset[bar->mon->seltags] & 1 << i)) - continue; - #endif // BAR_HIDEVACANTTAGS_PATCH - w += TEXTW(tagicon(bar->mon, i)) + plw; - } - return w + lrpad; -} - -int -draw_pwrl_tags(Bar *bar, BarArg *a) -{ - int x, w; - int invert; - int plw = drw->fonts->h / 2 + 1; - unsigned int i, occ = 0, urg = 0; - char *icon; - Client *c; - Clr *prevscheme, *nxtscheme; - - for (c = bar->mon->clients; c; c = c->next) { - #if BAR_HIDEVACANTTAGS_PATCH - occ |= c->tags == 255 ? 0 : c->tags; - #else - occ |= c->tags; - #endif // BAR_HIDEVACANTTAGS_PATCH - if (c->isurgent) - urg |= c->tags; - } - x = a->x; - prevscheme = scheme[SchemeNorm]; - for (i = 0; i < NUMTAGS; i++) { - #if BAR_HIDEVACANTTAGS_PATCH - /* do not draw vacant tags */ - if (!(occ & 1 << i || bar->mon->tagset[bar->mon->seltags] & 1 << i)) - continue; - #endif // BAR_HIDEVACANTTAGS_PATCH - - icon = tagicon(bar->mon, i); - invert = 0; - w = TEXTW(icon); - if (urg & 1 << i ) { - drw_settrans(drw, prevscheme, (nxtscheme = scheme[bar->mon->tagset[bar->mon->seltags] & 1 << i ? SchemeSel : SchemeUrg])); - } else { - drw_settrans(drw, prevscheme, (nxtscheme = scheme[bar->mon->tagset[bar->mon->seltags] & 1 << i ? SchemeSel : SchemeNorm])); - } - #if BAR_POWERLINE_TAGS_SLASH_PATCH - drw_arrow(drw, x, a->y, plw, a->h, 1, 1); - #else - drw_arrow(drw, x, a->y, plw, a->h, 1, 0); - #endif // BAR_POWERLINE_TAGS_SLASH_PATCH - x += plw; - drw_setscheme(drw, nxtscheme); - drw_text(drw, x, a->y, w, a->h, lrpad / 2, icon, invert, False); - drawindicator(bar->mon, NULL, occ, x, a->y, w, a->h, i, -1, invert, tagindicatortype); - x += w; - prevscheme = nxtscheme; - } - nxtscheme = scheme[SchemeNorm]; - - drw_settrans(drw, prevscheme, nxtscheme); - #if BAR_POWERLINE_TAGS_SLASH_PATCH - drw_arrow(drw, x, a->y, plw, a->h, 1, 1); - #else - drw_arrow(drw, x, a->y, plw, a->h, 1, 0); - #endif // BAR_POWERLINE_TAGS_SLASH_PATCH - return 1; -} - -int -click_pwrl_tags(Bar *bar, Arg *arg, BarArg *a) -{ - int i = 0, x = lrpad / 2; - int plw = drw->fonts->h / 2 + 1; - #if BAR_HIDEVACANTTAGS_PATCH - Client *c; - unsigned int occ = 0; - for (c = bar->mon->clients; c; c = c->next) - occ |= c->tags == 255 ? 0 : c->tags; - #endif // BAR_HIDEVACANTTAGS_PATCH - - do { - #if BAR_HIDEVACANTTAGS_PATCH - if (!(occ & 1 << i || bar->mon->tagset[bar->mon->seltags] & 1 << i)) - continue; - #endif // BAR_HIDEVACANTTAGS_PATCH - x += TEXTW(tagicon(bar->mon, i)) + plw; - } while (a->x >= x && ++i < NUMTAGS); - if (i < NUMTAGS) { - arg->ui = 1 << i; - } - return ClkTagBar; -} diff --git a/suckless/dwm/patch/bar_powerline_tags.h b/suckless/dwm/patch/bar_powerline_tags.h deleted file mode 100644 index f942ff10..00000000 --- a/suckless/dwm/patch/bar_powerline_tags.h +++ /dev/null @@ -1,3 +0,0 @@ -static int width_pwrl_tags(Bar *bar, BarArg *a); -static int draw_pwrl_tags(Bar *bar, BarArg *a); -static int click_pwrl_tags(Bar *bar, Arg *arg, BarArg *a); \ No newline at end of file diff --git a/suckless/dwm/patch/bar_status.c b/suckless/dwm/patch/bar_status.c index d37424df..f21cefdb 100644 --- a/suckless/dwm/patch/bar_status.c +++ b/suckless/dwm/patch/bar_status.c @@ -4,13 +4,6 @@ width_status(Bar *bar, BarArg *a) return TEXTWM(stext); } -#if BAR_EXTRASTATUS_PATCH -int -width_status_es(Bar *bar, BarArg *a) -{ - return TEXTWM(estext) - lrpad; -} -#endif // BAR_EXTRASTATUS_PATCH int draw_status(Bar *bar, BarArg *a) @@ -18,13 +11,6 @@ draw_status(Bar *bar, BarArg *a) return drw_text(drw, a->x, a->y, a->w, a->h, lrpad / 2, stext, 0, True); } -#if BAR_EXTRASTATUS_PATCH -int -draw_status_es(Bar *bar, BarArg *a) -{ - return drw_text(drw, a->x, a->y, a->w, a->h, 0, estext, 0, True); -} -#endif // BAR_EXTRASTATUS_PATCH int click_status(Bar *bar, Arg *arg, BarArg *a) diff --git a/suckless/dwm/patch/bar_status.h b/suckless/dwm/patch/bar_status.h index e6d8ab01..867d5774 100644 --- a/suckless/dwm/patch/bar_status.h +++ b/suckless/dwm/patch/bar_status.h @@ -1,9 +1,3 @@ static int width_status(Bar *bar, BarArg *a); -#if BAR_EXTRASTATUS_PATCH -static int width_status_es(Bar *bar, BarArg *a); -#endif // BAR_EXTRASTATUS_PATCH static int draw_status(Bar *bar, BarArg *a); -#if BAR_EXTRASTATUS_PATCH -static int draw_status_es(Bar *bar, BarArg *a); -#endif // BAR_EXTRASTATUS_PATCH -static int click_status(Bar *bar, Arg *arg, BarArg *a); \ No newline at end of file +static int click_status(Bar *bar, Arg *arg, BarArg *a); diff --git a/suckless/dwm/patch/bar_status2d.c b/suckless/dwm/patch/bar_status2d.c index 54e008d4..a884aa60 100644 --- a/suckless/dwm/patch/bar_status2d.c +++ b/suckless/dwm/patch/bar_status2d.c @@ -1,81 +1,20 @@ -#if BAR_STATUS2D_XRDB_TERMCOLORS_PATCH -static char termcol0[] = "#000000"; /* black */ -static char termcol1[] = "#ff0000"; /* red */ -static char termcol2[] = "#33ff00"; /* green */ -static char termcol3[] = "#ff0099"; /* yellow */ -static char termcol4[] = "#0066ff"; /* blue */ -static char termcol5[] = "#cc00ff"; /* magenta */ -static char termcol6[] = "#00ffff"; /* cyan */ -static char termcol7[] = "#d0d0d0"; /* white */ -static char termcol8[] = "#808080"; /* black */ -static char termcol9[] = "#ff0000"; /* red */ -static char termcol10[] = "#33ff00"; /* green */ -static char termcol11[] = "#ff0099"; /* yellow */ -static char termcol12[] = "#0066ff"; /* blue */ -static char termcol13[] = "#cc00ff"; /* magenta */ -static char termcol14[] = "#00ffff"; /* cyan */ -static char termcol15[] = "#ffffff"; /* white */ -static char *termcolor[] = { - termcol0, termcol1, termcol2, termcol3, termcol4, termcol5, termcol6, termcol7, - termcol8, termcol9, termcol10, termcol11, termcol12, termcol13, termcol14, termcol15, -}; -#endif // BAR_STATUS2D_XRDB_TERMCOLORS_PATCH int width_status2d(Bar *bar, BarArg *a) { int width; - #if BAR_EXTRASTATUS_PATCH || BAR_STATUSCMD_PATCH width = status2dtextlength(rawstext); - #else - width = status2dtextlength(stext); - #endif // #if BAR_EXTRASTATUS_PATCH | BAR_STATUSCMD_PATCH return width ? width + lrpad : 0; } -#if BAR_EXTRASTATUS_PATCH -int -width_status2d_es(Bar *bar, BarArg *a) -{ - int width; - #if BAR_STATUSCMD_PATCH - width = status2dtextlength(rawestext); - #else - width = status2dtextlength(estext); - #endif // BAR_STATUSCMD_PATCH - return width ? width + lrpad : 0; -} -#endif // BAR_EXTRASTATUS_PATCH int draw_status2d(Bar *bar, BarArg *a) { - #if BAR_EXTRASTATUS_PATCH || BAR_STATUSCMD_PATCH return drawstatusbar(a, rawstext); - #else - return drawstatusbar(a, stext); - #endif // #if BAR_EXTRASTATUS_PATCH | BAR_STATUSCMD_PATCH } -#if BAR_EXTRASTATUS_PATCH -int -draw_status2d_es(Bar *bar, BarArg *a) -{ - #if BAR_STATUSCMD_PATCH - return drawstatusbar(a, rawestext); - #else - return drawstatusbar(a, estext); - #endif // BAR_STATUSCMD_PATCH -} -#endif // BAR_EXTRASTATUS_PATCH -#if !BAR_STATUSCMD_PATCH -int -click_status2d(Bar *bar, Arg *arg, BarArg *a) -{ - return ClkStatusText; -} -#endif // BAR_STATUSCMD_PATCH int drawstatusbar(BarArg *a, char* stext) @@ -91,11 +30,7 @@ drawstatusbar(BarArg *a, char* stext) if (!(text = (char*) malloc(sizeof(char)*len))) die("malloc"); p = text; - #if BAR_STATUSCMD_PATCH copyvalidchars(text, stext); - #else - memcpy(text, stext, len); - #endif // BAR_STATUSCMD_PATCH x += lrpad / 2; drw_setscheme(drw, scheme[LENGTH(colors)]); @@ -124,13 +59,7 @@ drawstatusbar(BarArg *a, char* stext) } memcpy(buf, (char*)text+i+1, 7); buf[7] = '\0'; - #if BAR_ALPHA_PATCH && BAR_STATUS2D_NO_ALPHA_PATCH - drw_clr_create(drw, &drw->scheme[ColFg], buf, 0xff); - #elif BAR_ALPHA_PATCH - drw_clr_create(drw, &drw->scheme[ColFg], buf, alphas[SchemeNorm][ColFg]); - #else drw_clr_create(drw, &drw->scheme[ColFg], buf); - #endif // BAR_ALPHA_PATCH i += 7; } else if (text[i] == 'b') { char buf[8]; @@ -140,34 +69,8 @@ drawstatusbar(BarArg *a, char* stext) } memcpy(buf, (char*)text+i+1, 7); buf[7] = '\0'; - #if BAR_ALPHA_PATCH && BAR_STATUS2D_NO_ALPHA_PATCH - drw_clr_create(drw, &drw->scheme[ColBg], buf, 0xff); - #elif BAR_ALPHA_PATCH - drw_clr_create(drw, &drw->scheme[ColBg], buf, alphas[SchemeNorm][ColBg]); - #else drw_clr_create(drw, &drw->scheme[ColBg], buf); - #endif // BAR_ALPHA_PATCH i += 7; - #if BAR_STATUS2D_XRDB_TERMCOLORS_PATCH - } else if (text[i] == 'C') { - int c = atoi(text + ++i) % 16; - #if BAR_ALPHA_PATCH && BAR_STATUS2D_NO_ALPHA_PATCH - drw_clr_create(drw, &drw->scheme[ColFg], termcolor[c], 0xff); - #elif BAR_ALPHA_PATCH - drw_clr_create(drw, &drw->scheme[ColFg], termcolor[c], alphas[SchemeNorm][ColBg]); - #else - drw_clr_create(drw, &drw->scheme[ColFg], termcolor[c]); - #endif // BAR_ALPHA_PATCH - } else if (text[i] == 'B') { - int c = atoi(text + ++i) % 16; - #if BAR_ALPHA_PATCH && BAR_STATUS2D_NO_ALPHA_PATCH - drw_clr_create(drw, &drw->scheme[ColBg], termcolor[c], 0xff); - #elif BAR_ALPHA_PATCH - drw_clr_create(drw, &drw->scheme[ColBg], termcolor[c], alphas[SchemeNorm][ColBg]); - #else - drw_clr_create(drw, &drw->scheme[ColBg], termcolor[c]); - #endif // BAR_ALPHA_PATCH - #endif // BAR_STATUS2D_XRDB_TERMCOLORS_PATCH } else if (text[i] == 'd') { drw->scheme[ColFg] = scheme[SchemeNorm][ColFg]; drw->scheme[ColBg] = scheme[SchemeNorm][ColBg]; @@ -230,11 +133,7 @@ status2dtextlength(char* stext) if (!(text = (char*) malloc(sizeof(char)*len))) die("malloc"); p = text; - #if BAR_STATUSCMD_PATCH copyvalidchars(text, stext); - #else - memcpy(text, stext, len); - #endif // BAR_STATUSCMD_PATCH /* compute width of the status text */ w = 0; @@ -259,4 +158,4 @@ status2dtextlength(char* stext) w += TEXTWM(text) - lrpad; free(p); return w; -} \ No newline at end of file +} diff --git a/suckless/dwm/patch/bar_status2d.h b/suckless/dwm/patch/bar_status2d.h index 868a5681..2efed765 100644 --- a/suckless/dwm/patch/bar_status2d.h +++ b/suckless/dwm/patch/bar_status2d.h @@ -1,13 +1,4 @@ static int width_status2d(Bar *bar, BarArg *a); -#if BAR_EXTRASTATUS_PATCH -static int width_status2d_es(Bar *bar, BarArg *a); -#endif // BAR_EXTRASTATUS_PATCH static int draw_status2d(Bar *bar, BarArg *a); -#if BAR_EXTRASTATUS_PATCH -static int draw_status2d_es(Bar *bar, BarArg *a); -#endif // BAR_EXTRASTATUS_PATCH -#if !BAR_STATUSCMD_PATCH -static int click_status2d(Bar *bar, Arg *arg, BarArg *a); -#endif // BAR_STATUSCMD_PATCH static int drawstatusbar(BarArg *a, char *text); -static int status2dtextlength(char *stext); \ No newline at end of file +static int status2dtextlength(char *stext); diff --git a/suckless/dwm/patch/bar_statusbutton.c b/suckless/dwm/patch/bar_statusbutton.c deleted file mode 100644 index 7f52af41..00000000 --- a/suckless/dwm/patch/bar_statusbutton.c +++ /dev/null @@ -1,17 +0,0 @@ -int -width_stbutton(Bar *bar, BarArg *a) -{ - return TEXTW(buttonbar); -} - -int -draw_stbutton(Bar *bar, BarArg *a) -{ - return drw_text(drw, a->x, a->y, a->w, a->h, lrpad / 2, buttonbar, 0, False); -} - -int -click_stbutton(Bar *bar, Arg *arg, BarArg *a) -{ - return ClkButton; -} diff --git a/suckless/dwm/patch/bar_statusbutton.h b/suckless/dwm/patch/bar_statusbutton.h deleted file mode 100644 index 68ae839a..00000000 --- a/suckless/dwm/patch/bar_statusbutton.h +++ /dev/null @@ -1,3 +0,0 @@ -static int width_stbutton(Bar *bar, BarArg *a); -static int draw_stbutton(Bar *bar, BarArg *a); -static int click_stbutton(Bar *bar, Arg *arg, BarArg *a); \ No newline at end of file diff --git a/suckless/dwm/patch/bar_statuscmd.c b/suckless/dwm/patch/bar_statuscmd.c index 0a4ad722..85182063 100644 --- a/suckless/dwm/patch/bar_statuscmd.c +++ b/suckless/dwm/patch/bar_statuscmd.c @@ -1,8 +1,3 @@ -#if !BAR_DWMBLOCKS_PATCH -static const char statusexport[] = "export BUTTON=-;"; -static int statuscmdn; -static int lastbutton; -#endif // BAR_DWMBLOCKS_PATCH int click_statuscmd(Bar *bar, Arg *arg, BarArg *a) @@ -10,13 +5,6 @@ click_statuscmd(Bar *bar, Arg *arg, BarArg *a) return click_statuscmd_text(arg, a->x, rawstext); } -#if BAR_EXTRASTATUS_PATCH -int -click_statuscmd_es(Bar *bar, Arg *arg, BarArg *a) -{ - return click_statuscmd_text(arg, a->x, rawestext); -} -#endif // BAR_EXTRASTATUS_PATCH int click_statuscmd_text(Arg *arg, int rel_x, char *text) @@ -24,39 +12,22 @@ click_statuscmd_text(Arg *arg, int rel_x, char *text) int i = -1; int x = 0; char ch; - #if BAR_DWMBLOCKS_PATCH dwmblockssig = -1; - #else - statuscmdn = 0; - #endif // BAR_DWMBLOCKS_PATCH while (text[++i]) { if ((unsigned char)text[i] < ' ') { ch = text[i]; text[i] = '\0'; - #if BAR_STATUS2D_PATCH && !BAR_BAR_STATUSCOLORS_PATCH x += status2dtextlength(text); - #else - x += TEXTWM(text) - lrpad; - #endif // BAR_STATUS2D_PATCH text[i] = ch; text += i+1; i = -1; - #if BAR_DWMBLOCKS_PATCH if (x >= rel_x && dwmblockssig != -1) break; dwmblockssig = ch; - #else - if (x >= rel_x) - break; - if (ch <= LENGTH(statuscmds)) - statuscmdn = ch - 1; - #endif // BAR_DWMBLOCKS_PATCH } } - #if BAR_DWMBLOCKS_PATCH if (dwmblockssig == -1) dwmblockssig = 0; - #endif // BAR_DWMBLOCKS_PATCH return ClkStatusText; } diff --git a/suckless/dwm/patch/bar_statuscmd.h b/suckless/dwm/patch/bar_statuscmd.h index e2e75b16..35a41eb2 100644 --- a/suckless/dwm/patch/bar_statuscmd.h +++ b/suckless/dwm/patch/bar_statuscmd.h @@ -1,6 +1,3 @@ static int click_statuscmd(Bar *bar, Arg *arg, BarArg *a); -#if BAR_EXTRASTATUS_PATCH -static int click_statuscmd_es(Bar *bar, Arg *arg, BarArg *a); -#endif // BAR_EXTRASTATUS_PATCH static int click_statuscmd_text(Arg *arg, int rel_x, char *text); -static void copyvalidchars(char *text, char *rawtext); \ No newline at end of file +static void copyvalidchars(char *text, char *rawtext); diff --git a/suckless/dwm/patch/bar_statuscolors.c b/suckless/dwm/patch/bar_statuscolors.c deleted file mode 100644 index a443056f..00000000 --- a/suckless/dwm/patch/bar_statuscolors.c +++ /dev/null @@ -1,23 +0,0 @@ -int -textw_wosc(char *s) -{ - char *ts = s; - char *tp = s; - int sw = 0; - char ctmp; - while (1) { - if ((unsigned int)*ts > LENGTH(colors)) { - ts++; - continue; - } - ctmp = *ts; - *ts = '\0'; - sw += drw_fontset_getwidth(drw, tp, True); - *ts = ctmp; - if (ctmp == '\0') - break; - tp = ++ts; - } - - return sw; -} \ No newline at end of file diff --git a/suckless/dwm/patch/bar_systray.c b/suckless/dwm/patch/bar_systray.c index b20b45e2..82be1e22 100644 --- a/suckless/dwm/patch/bar_systray.c +++ b/suckless/dwm/patch/bar_systray.c @@ -33,25 +33,13 @@ draw_systray(Bar *bar, BarArg *a) wa.event_mask = ButtonPressMask|ExposureMask; wa.border_pixel = 0; systray->h = MIN(a->h, drw->fonts->h); - #if BAR_ALPHA_PATCH - wa.background_pixel = 0; - wa.colormap = cmap; - systray->win = XCreateWindow(dpy, root, bar->bx + a->x + lrpad / 2, bar->by + a->y + (a->h - systray->h) / 2, MAX(a->w + 40, 1), systray->h, 0, depth, - InputOutput, visual, - CWOverrideRedirect|CWBorderPixel|CWBackPixel|CWColormap|CWEventMask, &wa); // CWBackPixmap - #else wa.background_pixel = scheme[SchemeNorm][ColBg].pixel; systray->win = XCreateSimpleWindow(dpy, root, bar->bx + a->x + lrpad / 2, bar->by + a->y + (a->h - systray->h) / 2, MIN(a->w, 1), systray->h, 0, 0, scheme[SchemeNorm][ColBg].pixel); XChangeWindowAttributes(dpy, systray->win, CWOverrideRedirect|CWBackPixel|CWBorderPixel|CWEventMask, &wa); - #endif // BAR_ALPHA_PATCH XSelectInput(dpy, systray->win, SubstructureNotifyMask); XChangeProperty(dpy, systray->win, netatom[NetSystemTrayOrientation], XA_CARDINAL, 32, PropModeReplace, (unsigned char *)&systrayorientation, 1); - #if BAR_ALPHA_PATCH - XChangeProperty(dpy, systray->win, netatom[NetSystemTrayVisual], XA_VISUALID, 32, - PropModeReplace, (unsigned char *)&visual->visualid, 1); - #endif // BAR_ALPHA_PATCH XChangeProperty(dpy, systray->win, netatom[NetWMWindowType], XA_ATOM, 32, PropModeReplace, (unsigned char *)&netatom[NetWMWindowTypeDock], 1); XMapRaised(dpy, systray->win); @@ -75,11 +63,7 @@ draw_systray(Bar *bar, BarArg *a) drw_setscheme(drw, scheme[SchemeNorm]); for (w = 0, i = systray->icons; i; i = i->next) { - #if BAR_ALPHA_PATCH - wa.background_pixel = 0; - #else wa.background_pixel = scheme[SchemeNorm][ColBg].pixel; - #endif // BAR_ALPHA_PATCH XChangeWindowAttributes(dpy, i->win, CWBackPixel, &wa); XMapRaised(dpy, i->win); i->x = w; @@ -194,4 +178,4 @@ wintosystrayicon(Window w) return i; for (i = systray->icons; i && i->win != w; i = i->next); return i; -} \ No newline at end of file +} diff --git a/suckless/dwm/patch/bar_tabgroups.c b/suckless/dwm/patch/bar_tabgroups.c deleted file mode 100644 index 28a39fa9..00000000 --- a/suckless/dwm/patch/bar_tabgroups.c +++ /dev/null @@ -1,220 +0,0 @@ -/* Bartabgroups properties, you can override these in your config.h if you want. */ -#ifndef BARTAB_BORDERS -#define BARTAB_BORDERS 1 // 0 = off, 1 = on -#endif -#ifndef BARTAB_SHOWFLOATING -#define BARTAB_SHOWFLOATING 0 // whether to show titles for floating windows, hidden clients are always shown -#endif -#ifndef BARTAB_STACKWEIGHT -#define BARTAB_STACKWEIGHT 1 // stack weight compared to hidden and floating window titles -#endif -#ifndef BARTAB_HIDDENWEIGHT -#define BARTAB_HIDDENWEIGHT 1 // hidden window title weight -#endif -#ifndef BARTAB_FLOATWEIGHT -#define BARTAB_FLOATWEIGHT 1 // floating window title weight, set to 0 to not show floating windows -#endif - -int -width_bartabgroups(Bar *bar, BarArg *a) -{ - return a->w; -} - -int -draw_bartabgroups(Bar *bar, BarArg *a) -{ - drw_rect(drw, a->x, a->y, a->w, a->h, 1, 1); - return bartabcalculate(bar->mon, a->x, a->w, -1, bartabdraw, NULL, a); -} - -int -click_bartabgroups(Bar *bar, Arg *arg, BarArg *a) -{ - bartabcalculate(bar->mon, 0, a->w, a->x, bartabclick, arg, a); - return ClkWinTitle; -} - -void -bartabdraw(Monitor *m, Client *c, int unused, int x, int w, int groupactive, Arg *arg, BarArg *barg) -{ - if (!c) - return; - int i, nclienttags = 0, nviewtags = 0, pad = lrpad / 2; - drw_setscheme(drw, scheme[ - m->sel == c - ? SchemeSel - #ifdef HIDDEN - : HIDDEN(c) - ? SchemeHid - #endif - : groupactive - ? SchemeTitleSel - : SchemeTitleNorm - ]); - if (w <= TEXTW("A") - lrpad + pad) // reduce text padding if wintitle is too small - pad = (w - TEXTW("A") + lrpad < 0 ? 0 : (w - TEXTW("A") + lrpad) / 2); - #if BAR_CENTEREDWINDOWNAME_PATCH - else if (TEXTW(c->name) < w) - pad = (w - TEXTW(c->name) + lrpad) / 2; - #endif // BAR_CENTEREDWINDOWNAME_PATCH - - drw_text(drw, x, barg->y, w, barg->h, pad, c->name, 0, False); - drawstateindicator(m, c, 1, x, barg->y, w, barg->h, 0, 0, c->isfixed); - - if (BARTAB_BORDERS) { - XSetForeground(drw->dpy, drw->gc, scheme[SchemeSel][ColBorder].pixel); - XFillRectangle(drw->dpy, drw->drawable, drw->gc, x, barg->y, 1, barg->h); - XFillRectangle(drw->dpy, drw->drawable, drw->gc, x + w - (x + w >= barg->w ? 1 : 0), barg->y, 1, barg->h); - } - /* Optional tags icons */ - for (i = 0; i < NUMTAGS; i++) { - if ((m->tagset[m->seltags] >> i) & 1) - nviewtags++; - if ((c->tags >> i) & 1) - nclienttags++; - } - - if (TAGSINDICATOR == 2 || nclienttags > 1 || nviewtags > 1) - drawindicator(m, c, 1, x, barg->y, w, barg->h, 0, 0, 0, INDICATOR_RIGHT_TAGS); -} - -#ifndef HIDDEN -#define HIDDEN(C) 0 -#endif - -void -bartabclick(Monitor *m, Client *c, int passx, int x, int w, int unused, Arg *arg, BarArg *barg) -{ - if (passx >= x && passx <= x + w) - arg->v = c; -} - -int -bartabcalculate( - Monitor *m, int offx, int tabw, int passx, - void(*tabfn)(Monitor *, Client *, int, int, int, int, Arg *arg, BarArg *barg), - Arg *arg, BarArg *barg -) { - Client *c; - int - i, clientsnmaster = 0, clientsnstack = 0, clientsnfloating = 0, clientsnhidden = 0, - masteractive = 0, fulllayout = 0, - x = offx, w, r, num = 0, den, tgactive; - - for (i = 0; i < LENGTH(bartabmonfns); i++) - if (m ->lt[m->sellt]->arrange == bartabmonfns[i]) { - fulllayout = 1; - break; - } - - for (i = 0, c = m->clients; c; c = c->next) { - if (!ISVISIBLE(c)) - continue; - if (HIDDEN(c)) { - clientsnhidden++; - continue; - } - if (c->isfloating) { - clientsnfloating++; - continue; - } - if (m->sel == c) - masteractive = i < m->nmaster; - if (i < m->nmaster) - clientsnmaster++; - else - clientsnstack++; - i++; - } - - if (clientsnmaster + clientsnstack + clientsnfloating + clientsnhidden == 0) - return 0; - - tgactive = 1; - num = tabw; - /* floating mode */ - if ((fulllayout && BARTAB_FLOATWEIGHT) || clientsnmaster + clientsnstack == 0 || !m->lt[m->sellt]->arrange) { - den = clientsnmaster + clientsnstack + clientsnfloating + clientsnhidden; - r = num % den; - w = num / den; - for (c = m->clients, i = 0; c; c = c->next) { - if (!ISVISIBLE(c)) - continue; - tabfn(m, c, passx, x, w + (i < r ? 1 : 0), tgactive, arg, barg); - x += w + (i < r ? 1 : 0); - i++; - } - /* no master and stack mode, e.g. monocole, grid layouts, fibonacci */ - } else if (fulllayout) { - den = clientsnmaster + clientsnstack + clientsnhidden; - r = num % den; - w = num / den; - for (c = m->clients, i = 0; c; c = c->next) { - if (!ISVISIBLE(c) || (c->isfloating && !HIDDEN(c))) - continue; - tabfn(m, c, passx, x, w + (i < r ? 1 : 0), tgactive, arg, barg); - x += w + (i < r ? 1 : 0); - i++; - } - /* tiled mode */ - } else { - den = clientsnmaster; - c = m->clients; - i = 0; - if (den) { - if (clientsnstack + clientsnfloating * BARTAB_FLOATWEIGHT + clientsnhidden) { - tgactive = masteractive; - num = tabw * m->mfact; - } - r = num % den; - w = num / den; - for (; c && i < m->nmaster; c = c->next) { // tiled master - if (!ISVISIBLE(c) || c->isfloating || HIDDEN(c)) - continue; - tabfn(m, c, passx, x, w + (i < r ? 1 : 0), tgactive, arg, barg); - x += w + (i < r ? 1 : 0); - i++; - } - tgactive = !tgactive; - num = tabw - num; - } - - den = clientsnstack * BARTAB_STACKWEIGHT + clientsnfloating * BARTAB_FLOATWEIGHT + clientsnhidden * BARTAB_HIDDENWEIGHT; - if (!den) - return 1; - - r = num % den; - w = num / den; - #if BARTAB_STACKWEIGHT - for (; c; c = c->next) { // tiled stack - if (!ISVISIBLE(c) || HIDDEN(c) || c->isfloating) - continue; - tabfn(m, c, passx, x, w * BARTAB_STACKWEIGHT + (i - m->nmaster < r ? 1 : 0), tgactive, arg, barg); - x += w * BARTAB_STACKWEIGHT + (i - m->nmaster < r ? 1 : 0); - i++; - } - #endif // BARTAB_STACKWEIGHT - - #if BARTAB_HIDDENWEIGHT - for (c = m->clients; c; c = c->next) { // hidden windows - if (!ISVISIBLE(c) || !HIDDEN(c)) - continue; - tabfn(m, c, passx, x, w * BARTAB_HIDDENWEIGHT + (i - m->nmaster < r ? 1 : 0), tgactive, arg, barg); - x += w * BARTAB_HIDDENWEIGHT + (i - m->nmaster < r ? 1 : 0); - i++; - } - #endif // BARTAB_HIDDENWEIGHT - - #if BARTAB_FLOATWEIGHT - for (c = m->clients; c; c = c->next) { // floating windows - if (!ISVISIBLE(c) || HIDDEN(c) || !c->isfloating) - continue; - tabfn(m, c, passx, x, w * BARTAB_FLOATWEIGHT + (i - m->nmaster < r ? 1 : 0), tgactive, arg, barg); - x += w * BARTAB_FLOATWEIGHT + (i - m->nmaster < r ? 1 : 0); - i++; - } - #endif // BARTAB_FLOATWEIGHT - } - return 1; -} \ No newline at end of file diff --git a/suckless/dwm/patch/bar_tabgroups.h b/suckless/dwm/patch/bar_tabgroups.h deleted file mode 100644 index e118c0d2..00000000 --- a/suckless/dwm/patch/bar_tabgroups.h +++ /dev/null @@ -1,7 +0,0 @@ -static int width_bartabgroups(Bar *bar, BarArg *a); -static int draw_bartabgroups(Bar *bar, BarArg *a); -static int click_bartabgroups(Bar *bar, Arg *arg, BarArg *a); - -static void bartabdraw(Monitor *m, Client *c, int unused, int x, int w, int groupactive, Arg *arg, BarArg *barg); -static void bartabclick(Monitor *m, Client *c, int passx, int x, int w, int unused, Arg *arg, BarArg *barg); -static int bartabcalculate(Monitor *m, int offx, int w, int passx, void(*tabfn)(Monitor *, Client *, int, int, int, int, Arg *arg, BarArg *barg), Arg *arg, BarArg *barg); \ No newline at end of file diff --git a/suckless/dwm/patch/bar_taggrid.c b/suckless/dwm/patch/bar_taggrid.c deleted file mode 100644 index 387f25ba..00000000 --- a/suckless/dwm/patch/bar_taggrid.c +++ /dev/null @@ -1,149 +0,0 @@ -int -width_taggrid(Bar *bar, BarArg *a) -{ - return (a->h / 2) * (NUMTAGS / tagrows + ((NUMTAGS % tagrows > 0) ? 1 : 0)) + lrpad; -} - -int -draw_taggrid(Bar *bar, BarArg *a) -{ - unsigned int x, y, h, max_x = 0, columns, occ = 0; - int invert, i,j, k; - Client *c; - - for (c = bar->mon->clients; c; c = c->next) - occ |= c->tags; - - max_x = x = a->x + lrpad / 2; - h = a->h / tagrows - 1; - y = a->y; - columns = NUMTAGS / tagrows + ((NUMTAGS % tagrows > 0) ? 1 : 0); - - /* Firstly we will fill the borders of squares */ - XSetForeground(drw->dpy, drw->gc, scheme[SchemeTagsNorm][ColBg].pixel); - XFillRectangle(dpy, drw->drawable, drw->gc, x, y, h*columns + 1, a->h); - - /* We will draw NUMTAGS squares in tagraws raws. */ - for (j = 0, i = 0; j < tagrows; j++) { - x = a->x + lrpad / 2; - for (k = 0; k < columns; k++, i++) { - if (i < NUMTAGS) { - invert = bar->mon->tagset[bar->mon->seltags] & 1 << i ? 0 : 1; - - /* Select active color for current square */ - XSetForeground(drw->dpy, drw->gc, !invert ? scheme[SchemeTagsSel][ColBg].pixel : - scheme[SchemeTagsNorm][ColFg].pixel); - XFillRectangle(dpy, drw->drawable, drw->gc, x+1, y+1, h-1, h-1); - - /* Mark square if tag has client */ - if (occ & 1 << i) { - XSetForeground(drw->dpy, drw->gc, !invert ? scheme[SchemeTagsSel][ColFg].pixel : - scheme[SchemeTagsNorm][ColBg].pixel); - XFillRectangle(dpy, drw->drawable, drw->gc, x + 1, y + 1, - h / 2, h / 2); - } - } else { - XSetForeground(drw->dpy, drw->gc, scheme[SchemeTagsNorm][ColBg].pixel); - XFillRectangle(dpy, drw->drawable, drw->gc, x+1, y+1, h-1, h); - } - x += h; - if (x > max_x) { - max_x = x; - } - } - y += h; - } - return 1; -} - -int -click_taggrid(Bar *bar, Arg *arg, BarArg *a) -{ - unsigned int i, h, columns; - - h = a->h / tagrows - 1; - columns = NUMTAGS / tagrows + ((NUMTAGS % tagrows > 0) ? 1 : 0); - i = (a->x - lrpad / 2) / h + columns * (a->y / h); - if (i >= NUMTAGS) { - i = NUMTAGS - 1; - } - arg->ui = 1 << i; - return ClkTagBar; -} - -void -switchtag(const Arg *arg) -{ - unsigned int columns; - unsigned int new_tagset = 0; - unsigned int pos, i; - int col, row; - Arg new_arg; - - columns = NUMTAGS / tagrows + ((NUMTAGS % tagrows > 0) ? 1 : 0); - - for (i = 0; i < NUMTAGS; ++i) { - if (!(selmon->tagset[selmon->seltags] & 1 << i)) { - continue; - } - pos = i; - row = pos / columns; - col = pos % columns; - if (arg->ui & SWITCHTAG_UP) { /* UP */ - row --; - if (row < 0) { - row = tagrows - 1; - } - do { - pos = row * columns + col; - row --; - } while (pos >= NUMTAGS); - } - if (arg->ui & SWITCHTAG_DOWN) { /* DOWN */ - row ++; - if (row >= tagrows) { - row = 0; - } - pos = row * columns + col; - if (pos >= NUMTAGS) { - row = 0; - } - pos = row * columns + col; - } - if (arg->ui & SWITCHTAG_LEFT) { /* LEFT */ - col --; - if (col < 0) { - col = columns - 1; - } - do { - pos = row * columns + col; - col --; - } while (pos >= NUMTAGS); - } - if (arg->ui & SWITCHTAG_RIGHT) { /* RIGHT */ - col ++; - if (col >= columns) { - col = 0; - } - pos = row * columns + col; - if (pos >= NUMTAGS) { - col = 0; - pos = row * columns + col; - } - } - new_tagset |= 1 << pos; - } - new_arg.ui = new_tagset; - if (arg->ui & SWITCHTAG_TOGGLETAG) { - toggletag(&new_arg); - } - if (arg->ui & SWITCHTAG_TAG) { - tag(&new_arg); - } - if (arg->ui & SWITCHTAG_VIEW) { - view (&new_arg); - } - if (arg->ui & SWITCHTAG_TOGGLEVIEW) { - toggleview (&new_arg); - } -} \ No newline at end of file diff --git a/suckless/dwm/patch/bar_taggrid.h b/suckless/dwm/patch/bar_taggrid.h deleted file mode 100644 index e0c824e8..00000000 --- a/suckless/dwm/patch/bar_taggrid.h +++ /dev/null @@ -1,4 +0,0 @@ -static int width_taggrid(Bar *bar, BarArg *a); -static int draw_taggrid(Bar *bar, BarArg *a); -static int click_taggrid(Bar *bar, Arg *arg, BarArg *a); -static void switchtag(const Arg *arg); \ No newline at end of file diff --git a/suckless/dwm/patch/bar_tagicons.c b/suckless/dwm/patch/bar_tagicons.c index d472407c..1307b253 100644 --- a/suckless/dwm/patch/bar_tagicons.c +++ b/suckless/dwm/patch/bar_tagicons.c @@ -1,20 +1,8 @@ char * tagicon(Monitor *m, int tag) { - #if BAR_ALTTAGSDECORATION_PATCH - Client *c; - #endif // BAR_ALTTAGSDECORATION_PATCH int tagindex = tag + NUMTAGS * m->index; if (tagindex >= LENGTH(tagicons[DEFAULT_TAGS])) tagindex = tagindex % LENGTH(tagicons[DEFAULT_TAGS]); - #if BAR_ALTTAGSDECORATION_PATCH - for (c = m->clients; c && (!(c->tags & 1 << tag) || HIDDEN(c)); c = c->next); - if (c) - return tagicons[ALT_TAGS_DECORATION][tagindex]; - #endif // BAR_ALTTAGSDECORATION_PATCH - #if BAR_ALTERNATIVE_TAGS_PATCH - if (m->alttag) - return tagicons[ALTERNATIVE_TAGS][tagindex]; - #endif // BAR_ALTERNATIVE_TAGS_PATCH return tagicons[DEFAULT_TAGS][tagindex]; -} \ No newline at end of file +} diff --git a/suckless/dwm/patch/bar_tagicons.h b/suckless/dwm/patch/bar_tagicons.h index be5d35c9..f2eafb4c 100644 --- a/suckless/dwm/patch/bar_tagicons.h +++ b/suckless/dwm/patch/bar_tagicons.h @@ -4,4 +4,4 @@ enum { ALT_TAGS_DECORATION, }; -static char * tagicon(Monitor *m, int tag); \ No newline at end of file +static char * tagicon(Monitor *m, int tag); diff --git a/suckless/dwm/patch/bar_tags.c b/suckless/dwm/patch/bar_tags.c index df83144f..82f3a537 100644 --- a/suckless/dwm/patch/bar_tags.c +++ b/suckless/dwm/patch/bar_tags.c @@ -2,18 +2,8 @@ int width_tags(Bar *bar, BarArg *a) { int w, i; - #if BAR_HIDEVACANTTAGS_PATCH - Client *c; - unsigned int occ = 0; - for (c = bar->mon->clients; c; c = c->next) - occ |= c->tags == 255 ? 0 : c->tags; - #endif // BAR_HIDEVACANTTAGS_PATCH for (w = 0, i = 0; i < NUMTAGS; i++) { - #if BAR_HIDEVACANTTAGS_PATCH - if (!(occ & 1 << i || bar->mon->tagset[bar->mon->seltags] & 1 << i)) - continue; - #endif // BAR_HIDEVACANTTAGS_PATCH w += TEXTW(tagicon(bar->mon, i)); } return w; @@ -30,20 +20,11 @@ draw_tags(Bar *bar, BarArg *a) Monitor *m = bar->mon; for (c = m->clients; c; c = c->next) { - #if BAR_HIDEVACANTTAGS_PATCH - occ |= c->tags == 255 ? 0 : c->tags; - #else occ |= c->tags; - #endif // BAR_HIDEVACANTTAGS_PATCH if (c->isurgent) urg |= c->tags; } for (i = 0; i < NUMTAGS; i++) { - #if BAR_HIDEVACANTTAGS_PATCH - /* do not draw vacant tags */ - if (!(occ & 1 << i || m->tagset[m->seltags] & 1 << i)) - continue; - #endif // BAR_HIDEVACANTTAGS_PATCH icon = tagicon(bar->mon, i); invert = 0; @@ -67,18 +48,8 @@ int click_tags(Bar *bar, Arg *arg, BarArg *a) { int i = 0, x = lrpad / 2; - #if BAR_HIDEVACANTTAGS_PATCH - Client *c; - unsigned int occ = 0; - for (c = bar->mon->clients; c; c = c->next) - occ |= c->tags == 255 ? 0 : c->tags; - #endif // BAR_HIDEVACANTTAGS_PATCH do { - #if BAR_HIDEVACANTTAGS_PATCH - if (!(occ & 1 << i || bar->mon->tagset[bar->mon->seltags] & 1 << i)) - continue; - #endif // BAR_HIDEVACANTTAGS_PATCH x += TEXTW(tagicon(bar->mon, i)); } while (a->x >= x && ++i < NUMTAGS); if (i < NUMTAGS) { diff --git a/suckless/dwm/patch/bar_tags.h b/suckless/dwm/patch/bar_tags.h index 9ab784b7..f6987d68 100644 --- a/suckless/dwm/patch/bar_tags.h +++ b/suckless/dwm/patch/bar_tags.h @@ -1,3 +1,3 @@ static int width_tags(Bar *bar, BarArg *a); static int draw_tags(Bar *bar, BarArg *a); -static int click_tags(Bar *bar, Arg *arg, BarArg *a); \ No newline at end of file +static int click_tags(Bar *bar, Arg *arg, BarArg *a); diff --git a/suckless/dwm/patch/bar_vtcolors.c b/suckless/dwm/patch/bar_vtcolors.c deleted file mode 100644 index 2002985f..00000000 --- a/suckless/dwm/patch/bar_vtcolors.c +++ /dev/null @@ -1,68 +0,0 @@ -void -get_vt_colors(void) -{ - char *cfs[3] = { - "/sys/module/vt/parameters/default_red", - "/sys/module/vt/parameters/default_grn", - "/sys/module/vt/parameters/default_blu", - }; - char vtcs[16][8]; - char tk[] = ","; - char cl[64]; - char *tp = NULL; - FILE *fp; - size_t r; - int i, c, n, len; - for (i = 0; i < 16; i++) - strcpy(vtcs[i], "#000000"); - - for (i = 0, r = 0; i < 3; i++) { - if ((fp = fopen(cfs[i], "r")) == NULL) - continue; - while ((cl[r] = fgetc(fp)) != EOF && cl[r] != '\n') - r++; - cl[r] = '\0'; - for (c = 0, tp = cl, n = 0; c < 16; c++, tp++) { - if ((r = strcspn(tp, tk)) == -1) - break; - for (n = 0; r && *tp >= 48 && *tp < 58; r--, tp++) - n = n * 10 - 48 + *tp; - vtcs[c][i * 2 + 1] = n / 16 < 10 ? n / 16 + 48 : n / 16 + 87; - vtcs[c][i * 2 + 2] = n % 16 < 10 ? n % 16 + 48 : n % 16 + 87; - } - fclose(fp); - } - - len = LENGTH(colors); - if (len > LENGTH(color_ptrs)) - len = LENGTH(color_ptrs); - for (i = 0; i < len; i++) { - for (c = 0; c < ColCount; c++) { - n = color_ptrs[i][c]; - if (n > -1 && strlen(colors[i][c]) >= strlen(vtcs[n])) - memcpy(colors[i][c], vtcs[n], 7); - } - } -} - -int get_luminance(char *r) -{ - char *c = r; - int n[3] = {0}; - int i = 0; - - while (*c) { - if (*c >= 48 && *c < 58) - n[i / 2] = n[i / 2] * 16 - 48 + *c; - else if (*c >= 65 && *c < 71) - n[i / 2] = n[i / 2] * 16 - 55 + *c; - else if (*c >= 97 && *c < 103) - n[i / 2] = n[i / 2] * 16 - 87 + *c; - else - i--; - i++; - c++; - } - - return (0.299 * n[0] + 0.587 * n[1] + 0.114 * n[2]) / 2.55; -} \ No newline at end of file diff --git a/suckless/dwm/patch/bar_vtcolors.h b/suckless/dwm/patch/bar_vtcolors.h deleted file mode 100644 index 7341e6a4..00000000 --- a/suckless/dwm/patch/bar_vtcolors.h +++ /dev/null @@ -1,2 +0,0 @@ -static void get_vt_colors(void); -static int get_luminance(char *rgb); \ No newline at end of file diff --git a/suckless/dwm/patch/bar_wintitle.c b/suckless/dwm/patch/bar_wintitle.c deleted file mode 100644 index 1e9fb772..00000000 --- a/suckless/dwm/patch/bar_wintitle.c +++ /dev/null @@ -1,51 +0,0 @@ -int -width_wintitle(Bar *bar, BarArg *a) -{ - return a->w; -} - -int -draw_wintitle(Bar *bar, BarArg *a) -{ - #if BAR_TITLE_LEFT_PAD_PATCH && BAR_TITLE_RIGHT_PAD_PATCH - int x = a->x + lrpad / 2, w = a->w - lrpad; - #elif BAR_TITLE_LEFT_PAD_PATCH - int x = a->x + lrpad / 2, w = a->w - lrpad / 2; - #elif BAR_TITLE_RIGHT_PAD_PATCH - int x = a->x, w = a->w - lrpad / 2; - #else - int x = a->x, w = a->w; - #endif // BAR_TITLE_LEFT_PAD_PATCH | BAR_TITLE_RIGHT_PAD_PATCH - Monitor *m = bar->mon; - int pad = lrpad / 2; - - if (!m->sel) { - drw_setscheme(drw, scheme[SchemeTitleNorm]); - drw_rect(drw, x, a->y, w, a->h, 1, 1); - return 0; - } - - drw_setscheme(drw, scheme[m == selmon ? SchemeTitleSel : SchemeTitleNorm]); - #if BAR_IGNORE_XFT_ERRORS_WHEN_DRAWING_TEXT_PATCH - XSetErrorHandler(xerrordummy); - #endif // BAR_IGNORE_XFT_ERRORS_WHEN_DRAWING_TEXT_PATCH - #if BAR_CENTEREDWINDOWNAME_PATCH - if (TEXTW(m->sel->name) < w) - pad = (w - TEXTW(m->sel->name) + lrpad) / 2; - #endif // BAR_CENTEREDWINDOWNAME_PATCH - drw_text(drw, x, a->y, w, a->h, pad, m->sel->name, 0, False); - #if BAR_IGNORE_XFT_ERRORS_WHEN_DRAWING_TEXT_PATCH - XSync(dpy, False); - XSetErrorHandler(xerror); - #endif // BAR_IGNORE_XFT_ERRORS_WHEN_DRAWING_TEXT_PATCH - drawstateindicator(m, m->sel, 1, x, a->y, w, a->h, 0, 0, m->sel->isfixed); - return 1; -} - -int -click_wintitle(Bar *bar, Arg *arg, BarArg *a) -{ - return ClkWinTitle; -} - - diff --git a/suckless/dwm/patch/bar_wintitle.h b/suckless/dwm/patch/bar_wintitle.h deleted file mode 100644 index 349f948f..00000000 --- a/suckless/dwm/patch/bar_wintitle.h +++ /dev/null @@ -1,3 +0,0 @@ -static int width_wintitle(Bar *bar, BarArg *a); -static int draw_wintitle(Bar *bar, BarArg *a); -static int click_wintitle(Bar *bar, Arg *arg, BarArg *a); \ No newline at end of file diff --git a/suckless/dwm/patch/bar_wintitle_floating.c b/suckless/dwm/patch/bar_wintitle_floating.c deleted file mode 100644 index 001486b5..00000000 --- a/suckless/dwm/patch/bar_wintitle_floating.c +++ /dev/null @@ -1,45 +0,0 @@ -int -width_wintitle_floating(Bar *bar, BarArg *a) -{ - return a->w; -} - -int -draw_wintitle_floating(Bar *bar, BarArg *a) -{ - drw_rect(drw, a->x, a->y, a->w, a->h, 1, 1); - return calc_wintitle_floating(bar->mon, a->x, a->w, -1, flextitledraw, NULL, a); -} - -int -click_wintitle_floating(Bar *bar, Arg *arg, BarArg *a) -{ - calc_wintitle_floating(bar->mon, 0, a->w, a->x, flextitleclick, arg, a); - return ClkWinTitle; -} - -int -calc_wintitle_floating( - Monitor *m, int offx, int tabw, int passx, - void(*tabfn)(Monitor *, Client *, int, int, int, int, Arg *arg, BarArg *barg), - Arg *arg, BarArg *barg -) { - Client *c; - int clientsnfloating = 0, w, r; - int groupactive = GRP_FLOAT; - - for (c = m->clients; c; c = c->next) { - if (!ISVISIBLE(c) || HIDDEN(c)) - continue; - if (c->isfloating) - clientsnfloating++; - } - - if (!clientsnfloating) - return 0; - - w = tabw / clientsnfloating; - r = tabw % clientsnfloating; - c = flextitledrawarea(m, m->clients, offx, r, w, clientsnfloating, SCHEMEFOR(GRP_FLOAT), 0, 0, 1, passx, tabfn, arg, barg); - return 1; -} \ No newline at end of file diff --git a/suckless/dwm/patch/bar_wintitle_floating.h b/suckless/dwm/patch/bar_wintitle_floating.h deleted file mode 100644 index d04569ca..00000000 --- a/suckless/dwm/patch/bar_wintitle_floating.h +++ /dev/null @@ -1,8 +0,0 @@ -static int width_wintitle_floating(Bar *bar, BarArg *a); -static int draw_wintitle_floating(Bar *bar, BarArg *a); -static int click_wintitle_floating(Bar *bar, Arg *arg, BarArg *a); -static int calc_wintitle_floating( - Monitor *m, int offx, int tabw, int passx, - void(*tabfn)(Monitor *, Client *, int, int, int, int, Arg *arg, BarArg *barg), - Arg *arg, BarArg *barg -); \ No newline at end of file diff --git a/suckless/dwm/patch/bar_wintitle_hidden.c b/suckless/dwm/patch/bar_wintitle_hidden.c deleted file mode 100644 index 1fa12bc7..00000000 --- a/suckless/dwm/patch/bar_wintitle_hidden.c +++ /dev/null @@ -1,45 +0,0 @@ -int -width_wintitle_hidden(Bar *bar, BarArg *a) -{ - return a->w; -} - -int -draw_wintitle_hidden(Bar *bar, BarArg *a) -{ - drw_rect(drw, a->x, a->y, a->w, a->h, 1, 1); - return calc_wintitle_hidden(bar->mon, a->x, a->w, -1, flextitledraw, NULL, a); -} - -int -click_wintitle_hidden(Bar *bar, Arg *arg, BarArg *a) -{ - calc_wintitle_hidden(bar->mon, 0, a->w, a->x, flextitleclick, arg, a); - return ClkWinTitle; -} - -int -calc_wintitle_hidden( - Monitor *m, int offx, int tabw, int passx, - void(*tabfn)(Monitor *, Client *, int, int, int, int, Arg *arg, BarArg *barg), - Arg *arg, BarArg *barg -) { - Client *c; - int clientsnhidden = 0, w, r; - int groupactive = GRP_HIDDEN; - - for (c = m->clients; c; c = c->next) { - if (!ISVISIBLE(c)) - continue; - if (HIDDEN(c)) - clientsnhidden++; - } - - if (!clientsnhidden) - return 0; - - w = tabw / clientsnhidden; - r = tabw % clientsnhidden; - c = flextitledrawarea(m, m->clients, offx, r, w, clientsnhidden, SCHEMEFOR(GRP_HIDDEN), 0, 1, 0, passx, tabfn, arg, barg); - return 1; -} \ No newline at end of file diff --git a/suckless/dwm/patch/bar_wintitle_hidden.h b/suckless/dwm/patch/bar_wintitle_hidden.h deleted file mode 100644 index e757391d..00000000 --- a/suckless/dwm/patch/bar_wintitle_hidden.h +++ /dev/null @@ -1,8 +0,0 @@ -static int width_wintitle_hidden(Bar *bar, BarArg *a); -static int draw_wintitle_hidden(Bar *bar, BarArg *a); -static int click_wintitle_hidden(Bar *bar, Arg *arg, BarArg *a); -static int calc_wintitle_hidden( - Monitor *m, int offx, int tabw, int passx, - void(*tabfn)(Monitor *, Client *, int, int, int, int, Arg *arg, BarArg *barg), - Arg *arg, BarArg *barg -); \ No newline at end of file diff --git a/suckless/dwm/patch/bar_wintitleactions.c b/suckless/dwm/patch/bar_wintitleactions.c deleted file mode 100644 index e94fe067..00000000 --- a/suckless/dwm/patch/bar_wintitleactions.c +++ /dev/null @@ -1,93 +0,0 @@ -void -hide(Client *c) { - - Client *n; - if (!c || HIDDEN(c)) - return; - - Window w = c->win; - static XWindowAttributes ra, ca; - - // more or less taken directly from blackbox's hide() function - XGrabServer(dpy); - XGetWindowAttributes(dpy, root, &ra); - XGetWindowAttributes(dpy, w, &ca); - // prevent UnmapNotify events - XSelectInput(dpy, root, ra.your_event_mask & ~SubstructureNotifyMask); - XSelectInput(dpy, w, ca.your_event_mask & ~StructureNotifyMask); - XUnmapWindow(dpy, w); - setclientstate(c, IconicState); - XSelectInput(dpy, root, ra.your_event_mask); - XSelectInput(dpy, w, ca.your_event_mask); - XUngrabServer(dpy); - - if (c->isfloating || !c->mon->lt[c->mon->sellt]->arrange) { - for (n = c->snext; n && (!ISVISIBLE(n) || HIDDEN(n)); n = n->snext); - if (!n) - for (n = c->mon->stack; n && (!ISVISIBLE(n) || HIDDEN(n)); n = n->snext); - } else { - n = nexttiled(c); - if (!n) - n = prevtiled(c); - } - focus(n); - arrange(c->mon); -} - -void -show(Client *c) -{ - if (!c || !HIDDEN(c)) - return; - - XMapWindow(dpy, c->win); - setclientstate(c, NormalState); - arrange(c->mon); -} - -void -togglewin(const Arg *arg) -{ - Client *c = (Client*)arg->v; - if (!c) - return; - if (c == selmon->sel) - hide(c); - else { - if (HIDDEN(c)) - show(c); - focus(c); - restack(c->mon); - } -} - -Client * -prevtiled(Client *c) -{ - Client *p, *i; - for (p = NULL, i = c->mon->clients; c && i != c; i = i->next) - if (ISVISIBLE(i) && !HIDDEN(i)) - p = i; - return p; -} - -void -showhideclient(const Arg *arg) -{ - Client *c = (Client*)arg->v; - if (!c) - c = selmon->sel; - if (!c) - return; - - #if WARP_PATCH - force_warp = 1; - #endif // WARP_PATCH - if (HIDDEN(c)) { - show(c); - focus(c); - restack(c->mon); - } else { - hide(c); - } -} \ No newline at end of file diff --git a/suckless/dwm/patch/bar_wintitleactions.h b/suckless/dwm/patch/bar_wintitleactions.h deleted file mode 100644 index 67a9d791..00000000 --- a/suckless/dwm/patch/bar_wintitleactions.h +++ /dev/null @@ -1,5 +0,0 @@ -static void hide(Client *c); -static void show(Client *c); -static void togglewin(const Arg *arg); -static Client * prevtiled(Client *c); -static void showhideclient(const Arg *arg); \ No newline at end of file diff --git a/suckless/dwm/patch/cfacts.c b/suckless/dwm/patch/cfacts.c deleted file mode 100644 index ece210f4..00000000 --- a/suckless/dwm/patch/cfacts.c +++ /dev/null @@ -1,23 +0,0 @@ -void -setcfact(const Arg *arg) -{ - float f; - Client *c; - - c = selmon->sel; - - if (!arg || !c || !selmon->lt[selmon->sellt]->arrange) - return; - if (!arg->f) - f = 1.0; - else if (arg->f > 4.0) // set fact absolutely - f = arg->f - 4.0; - else - f = arg->f + c->cfact; - if (f < 0.25) - f = 0.25; - else if (f > 4.0) - f = 4.0; - c->cfact = f; - arrange(selmon); -} \ No newline at end of file diff --git a/suckless/dwm/patch/cfacts.h b/suckless/dwm/patch/cfacts.h deleted file mode 100644 index b8d8b041..00000000 --- a/suckless/dwm/patch/cfacts.h +++ /dev/null @@ -1 +0,0 @@ -static void setcfact(const Arg *arg); \ No newline at end of file diff --git a/suckless/dwm/patch/cmdcustomize.c b/suckless/dwm/patch/cmdcustomize.c deleted file mode 100644 index 1e62d205..00000000 --- a/suckless/dwm/patch/cmdcustomize.c +++ /dev/null @@ -1,5 +0,0 @@ -char* -help(void) -{ - return "usage: dwm [-hv] [-fn font] [-nb color] [-nf color] [-sb color] [-sf color]\n[-df font] [-dnf color] [-dnb color] [-dsf color] [-dsb color]\n"; -} \ No newline at end of file diff --git a/suckless/dwm/patch/cmdcustomize.h b/suckless/dwm/patch/cmdcustomize.h deleted file mode 100644 index 280f5b87..00000000 --- a/suckless/dwm/patch/cmdcustomize.h +++ /dev/null @@ -1 +0,0 @@ -static char* help(); \ No newline at end of file diff --git a/suckless/dwm/patch/combo.c b/suckless/dwm/patch/combo.c index 43f7e5d4..d668d4a2 100644 --- a/suckless/dwm/patch/combo.c +++ b/suckless/dwm/patch/combo.c @@ -1,21 +1,15 @@ static int combo = 0; -#if !BAR_HOLDBAR_PATCH void keyrelease(XEvent *e) { combo = 0; } -#endif // !BAR_HOLDBAR_PATCH void combotag(const Arg *arg) { if (selmon->sel && arg->ui & TAGMASK) { - #if SWITCHTAG_PATCH - if (selmon->sel->switchtag) - selmon->sel->switchtag = 0; - #endif // SWITCHTAG_PATCH if (combo) { selmon->sel->tags |= arg->ui & TAGMASK; } else { @@ -37,13 +31,9 @@ comboview(const Arg *arg) selmon->seltags ^= 1; /*toggle tagset*/ combo = 1; if (newtags) { - #if PERTAG_PATCH pertagview(&((Arg) { .ui = newtags })); - #else - selmon->tagset[selmon->seltags] = newtags; - #endif // PERTAG_PATCH } } focus(NULL); arrange(selmon); -} \ No newline at end of file +} diff --git a/suckless/dwm/patch/combo.h b/suckless/dwm/patch/combo.h index 752f6363..e90f5ecd 100644 --- a/suckless/dwm/patch/combo.h +++ b/suckless/dwm/patch/combo.h @@ -1,5 +1,3 @@ -#if !BAR_HOLDBAR_PATCH static void keyrelease(XEvent *e); -#endif // !BAR_HOLDBAR_PATCH static void combotag(const Arg *arg); -static void comboview(const Arg *arg); \ No newline at end of file +static void comboview(const Arg *arg); diff --git a/suckless/dwm/patch/cool_autostart.c b/suckless/dwm/patch/cool_autostart.c deleted file mode 100644 index 2bc3c3b4..00000000 --- a/suckless/dwm/patch/cool_autostart.c +++ /dev/null @@ -1,28 +0,0 @@ -/* dwm will keep pid's of processes from autostart array and kill them at quit */ -static pid_t *autostart_pids; -static size_t autostart_len; - -/* execute command from autostart array */ -static void -autostart_exec() -{ - const char *const *p; - size_t i = 0; - - /* count entries */ - for (p = autostart; *p; autostart_len++, p++) - while (*++p); - - autostart_pids = malloc(autostart_len * sizeof(pid_t)); - for (p = autostart; *p; i++, p++) { - if ((autostart_pids[i] = fork()) == 0) { - setsid(); - execvp(*p, (char *const *)p); - fprintf(stderr, "dwm: execvp %s\n", *p); - perror(" failed"); - _exit(EXIT_FAILURE); - } - /* skip arguments */ - while (*++p); - } -} \ No newline at end of file diff --git a/suckless/dwm/patch/cool_autostart.h b/suckless/dwm/patch/cool_autostart.h deleted file mode 100644 index 8dc0d192..00000000 --- a/suckless/dwm/patch/cool_autostart.h +++ /dev/null @@ -1 +0,0 @@ -static void autostart_exec(void); \ No newline at end of file diff --git a/suckless/dwm/patch/cyclelayouts.h b/suckless/dwm/patch/cyclelayouts.h index 02c5f9d0..c3918f8b 100644 --- a/suckless/dwm/patch/cyclelayouts.h +++ b/suckless/dwm/patch/cyclelayouts.h @@ -1 +1 @@ -static void cyclelayout(const Arg *arg); \ No newline at end of file +static void cyclelayout(const Arg *arg); diff --git a/suckless/dwm/patch/decorationhints.c b/suckless/dwm/patch/decorationhints.c deleted file mode 100644 index 66369983..00000000 --- a/suckless/dwm/patch/decorationhints.c +++ /dev/null @@ -1,38 +0,0 @@ -static Atom motifatom; - -void -updatemotifhints(Client *c) -{ - Atom real; - int format; - unsigned char *p = NULL; - unsigned long n, extra; - unsigned long *motif; - int width, height; - - if (!decorhints) - return; - - if (XGetWindowProperty(dpy, c->win, motifatom, 0L, 5L, False, motifatom, - &real, &format, &n, &extra, &p) == Success && p != NULL) { - motif = (unsigned long*)p; - if (motif[MWM_HINTS_FLAGS_FIELD] & MWM_HINTS_DECORATIONS) { - width = WIDTH(c); - height = HEIGHT(c); - - if (motif[MWM_HINTS_DECORATIONS_FIELD] & MWM_DECOR_ALL || - motif[MWM_HINTS_DECORATIONS_FIELD] & MWM_DECOR_BORDER || - motif[MWM_HINTS_DECORATIONS_FIELD] & MWM_DECOR_TITLE) - #if SETBORDERPX_PATCH - c->bw = c->oldbw = c->mon->borderpx; - #else - c->bw = c->oldbw = borderpx; - #endif // SETBORDERPX_PATCH - else - c->bw = c->oldbw = 0; - - resize(c, c->x, c->y, width - (2*c->bw), height - (2*c->bw), 0); - } - XFree(p); - } -} \ No newline at end of file diff --git a/suckless/dwm/patch/decorationhints.h b/suckless/dwm/patch/decorationhints.h deleted file mode 100644 index 3a9c641c..00000000 --- a/suckless/dwm/patch/decorationhints.h +++ /dev/null @@ -1,8 +0,0 @@ -#define MWM_HINTS_FLAGS_FIELD 0 -#define MWM_HINTS_DECORATIONS_FIELD 2 -#define MWM_HINTS_DECORATIONS (1 << 1) -#define MWM_DECOR_ALL (1 << 0) -#define MWM_DECOR_BORDER (1 << 1) -#define MWM_DECOR_TITLE (1 << 3) - -static void updatemotifhints(Client *c); \ No newline at end of file diff --git a/suckless/dwm/patch/dragcfact.c b/suckless/dwm/patch/dragcfact.c deleted file mode 100644 index fce5c92d..00000000 --- a/suckless/dwm/patch/dragcfact.c +++ /dev/null @@ -1,82 +0,0 @@ -void -dragcfact(const Arg *arg) -{ - int prev_x, prev_y, dist_x, dist_y; - float fact; - Client *c; - XEvent ev; - Time lasttime = 0; - - if (!(c = selmon->sel)) - return; - if (c->isfloating) { - resizemouse(arg); - return; - } - #if !FAKEFULLSCREEN_PATCH - #if FAKEFULLSCREEN_CLIENT_PATCH - if (c->isfullscreen && !c->fakefullscreen) /* no support resizing fullscreen windows by mouse */ - return; - #else - if (c->isfullscreen) /* no support resizing fullscreen windows by mouse */ - return; - #endif // FAKEFULLSCREEN_CLIENT_PATCH - #endif // !FAKEFULLSCREEN_PATCH - restack(selmon); - - if (XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync, - None, cursor[CurIronCross]->cursor, CurrentTime) != GrabSuccess) - return; - - #if WARP_PATCH - ignore_warp = 1; - #endif // WARP_PATCH - - XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w/2, c->h/2); - - prev_x = prev_y = -999999; - - do { - XMaskEvent(dpy, MOUSEMASK|ExposureMask|SubstructureRedirectMask, &ev); - switch(ev.type) { - case ConfigureRequest: - case Expose: - case MapRequest: - handler[ev.type](&ev); - break; - case MotionNotify: - if ((ev.xmotion.time - lasttime) <= (1000 / 60)) - continue; - lasttime = ev.xmotion.time; - if (prev_x == -999999) { - prev_x = ev.xmotion.x_root; - prev_y = ev.xmotion.y_root; - } - - dist_x = ev.xmotion.x - prev_x; - dist_y = ev.xmotion.y - prev_y; - - if (abs(dist_x) > abs(dist_y)) { - fact = (float) 4.0 * dist_x / c->mon->ww; - } else { - fact = (float) -4.0 * dist_y / c->mon->wh; - } - - if (fact) - setcfact(&((Arg) { .f = fact })); - - prev_x = ev.xmotion.x; - prev_y = ev.xmotion.y; - break; - } - } while (ev.type != ButtonRelease); - - #if WARP_PATCH - ignore_warp = 0; - #endif // WARP_PATCH - - XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w/2, c->h/2); - - XUngrabPointer(dpy, CurrentTime); - while (XCheckMaskEvent(dpy, EnterWindowMask, &ev)); -} \ No newline at end of file diff --git a/suckless/dwm/patch/dragcfact.h b/suckless/dwm/patch/dragcfact.h deleted file mode 100644 index 6cf6b9c0..00000000 --- a/suckless/dwm/patch/dragcfact.h +++ /dev/null @@ -1 +0,0 @@ -static void dragcfact(const Arg *arg); \ No newline at end of file diff --git a/suckless/dwm/patch/dragmfact.c b/suckless/dwm/patch/dragmfact.c deleted file mode 100644 index 257b5c1f..00000000 --- a/suckless/dwm/patch/dragmfact.c +++ /dev/null @@ -1,231 +0,0 @@ -void -dragmfact(const Arg *arg) -{ - unsigned int n; - int py, px; // pointer coordinates - int ax, ay, aw, ah; // area position, width and height - int center = 0, horizontal = 0, mirror = 0, fixed = 0; // layout configuration - double fact; - Monitor *m; - XEvent ev; - Time lasttime = 0; - - m = selmon; - - #if VANITYGAPS_PATCH - int oh, ov, ih, iv; - getgaps(m, &oh, &ov, &ih, &iv, &n); - #else - Client *c; - for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); - #endif // VANITYGAPS_PATCH - - ax = m->wx; - ay = m->wy; - ah = m->wh; - aw = m->ww; - - if (!n) - return; - #if FLEXTILE_DELUXE_LAYOUT - else if (m->lt[m->sellt]->arrange == &flextile) { - int layout = m->ltaxis[LAYOUT]; - if (layout < 0) { - mirror = 1; - layout *= -1; - } - if (layout > FLOATING_MASTER) { - layout -= FLOATING_MASTER; - fixed = 1; - } - - if (layout == SPLIT_HORIZONTAL || layout == SPLIT_HORIZONTAL_DUAL_STACK) - horizontal = 1; - else if (layout == SPLIT_CENTERED_VERTICAL && (fixed || n - m->nmaster > 1)) - center = 1; - else if (layout == FLOATING_MASTER) { - center = 1; - if (aw < ah) - horizontal = 1; - } - else if (layout == SPLIT_CENTERED_HORIZONTAL) { - if (fixed || n - m->nmaster > 1) - center = 1; - horizontal = 1; - } - } - #endif // FLEXTILE_DELUXE_LAYOUT - #if CENTEREDMASTER_LAYOUT - else if (m->lt[m->sellt]->arrange == ¢eredmaster && (fixed || n - m->nmaster > 1)) - center = 1; - #endif // CENTEREDMASTER_LAYOUT - #if CENTEREDFLOATINGMASTER_LAYOUT - else if (m->lt[m->sellt]->arrange == ¢eredfloatingmaster) - center = 1; - #endif // CENTEREDFLOATINGMASTER_LAYOUT - #if BSTACK_LAYOUT - else if (m->lt[m->sellt]->arrange == &bstack) - horizontal = 1; - #endif // BSTACK_LAYOUT - #if BSTACKHORIZ_LAYOUT - else if (m->lt[m->sellt]->arrange == &bstackhoriz) - horizontal = 1; - #endif // BSTACKHORIZ_LAYOUT - - /* do not allow mfact to be modified under certain conditions */ - if (!m->lt[m->sellt]->arrange // floating layout - || (!fixed && m->nmaster && n <= m->nmaster) // no master - #if MONOCLE_LAYOUT - || m->lt[m->sellt]->arrange == &monocle - #endif // MONOCLE_LAYOUT - #if GRIDMODE_LAYOUT - || m->lt[m->sellt]->arrange == &grid - #endif // GRIDMODE_LAYOUT - #if HORIZGRID_LAYOUT - || m->lt[m->sellt]->arrange == &horizgrid - #endif // HORIZGRID_LAYOUT - #if GAPPLESSGRID_LAYOUT - || m->lt[m->sellt]->arrange == &gaplessgrid - #endif // GAPPLESSGRID_LAYOUT - #if NROWGRID_LAYOUT - || m->lt[m->sellt]->arrange == &nrowgrid - #endif // NROWGRID_LAYOUT - #if FLEXTILE_DELUXE_LAYOUT - || (m->lt[m->sellt]->arrange == &flextile && m->ltaxis[LAYOUT] == NO_SPLIT) - #endif // FLEXTILE_DELUXE_LAYOUT - ) - return; - - #if VANITYGAPS_PATCH - ay += oh; - ax += ov; - aw -= 2*ov; - ah -= 2*oh; - #endif // VANITYGAPS_PATCH - - if (center) { - if (horizontal) { - px = ax + aw / 2; - #if VANITYGAPS_PATCH - py = ay + ah / 2 + (ah - 2*ih) * (m->mfact / 2.0) + ih / 2; - #else - py = ay + ah / 2 + ah * m->mfact / 2.0; - #endif // VANITYGAPS_PATCH - } else { // vertical split - #if VANITYGAPS_PATCH - px = ax + aw / 2 + (aw - 2*iv) * m->mfact / 2.0 + iv / 2; - #else - px = ax + aw / 2 + aw * m->mfact / 2.0; - #endif // VANITYGAPS_PATCH - py = ay + ah / 2; - } - } else if (horizontal) { - px = ax + aw / 2; - if (mirror) - #if VANITYGAPS_PATCH - py = ay + (ah - ih) * (1.0 - m->mfact) + ih / 2; - #else - py = ay + (ah * (1.0 - m->mfact)); - #endif // VANITYGAPS_PATCH - else - #if VANITYGAPS_PATCH - py = ay + ((ah - ih) * m->mfact) + ih / 2; - #else - py = ay + (ah * m->mfact); - #endif // VANITYGAPS_PATCH - } else { // vertical split - if (mirror) - #if VANITYGAPS_PATCH - px = ax + (aw - iv) * (1.0 - m->mfact) + iv / 2; - #else - px = ax + (aw * m->mfact); - #endif // VANITYGAPS_PATCH - else - #if VANITYGAPS_PATCH - px = ax + ((aw - iv) * m->mfact) + iv / 2; - #else - px = ax + (aw * m->mfact); - #endif // VANITYGAPS_PATCH - py = ay + ah / 2; - } - - if (XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync, - None, cursor[horizontal ? CurResizeVertArrow : CurResizeHorzArrow]->cursor, CurrentTime) != GrabSuccess) - return; - - #if WARP_PATCH - ignore_warp = 1; - #endif // WARP_PATCH - - XWarpPointer(dpy, None, root, 0, 0, 0, 0, px, py); - - do { - XMaskEvent(dpy, MOUSEMASK|ExposureMask|SubstructureRedirectMask, &ev); - switch(ev.type) { - case ConfigureRequest: - case Expose: - case MapRequest: - handler[ev.type](&ev); - break; - case MotionNotify: - if ((ev.xmotion.time - lasttime) <= (1000 / 40)) - continue; - if (lasttime != 0) { - px = ev.xmotion.x; - py = ev.xmotion.y; - } - lasttime = ev.xmotion.time; - - #if VANITYGAPS_PATCH - if (center) - if (horizontal) - if (py - ay > ah / 2) - fact = (double) 1.0 - (ay + ah - py - ih / 2) * 2 / (double) (ah - 2*ih); - else - fact = (double) 1.0 - (py - ay - ih / 2) * 2 / (double) (ah - 2*ih); - else - if (px - ax > aw / 2) - fact = (double) 1.0 - (ax + aw - px - iv / 2) * 2 / (double) (aw - 2*iv); - else - fact = (double) 1.0 - (px - ax - iv / 2) * 2 / (double) (aw - 2*iv); - else - if (horizontal) - fact = (double) (py - ay - ih / 2) / (double) (ah - ih); - else - fact = (double) (px - ax - iv / 2) / (double) (aw - iv); - #else - if (center) - if (horizontal) - if (py - ay > ah / 2) - fact = (double) 1.0 - (ay + ah - py) * 2 / (double) ah; - else - fact = (double) 1.0 - (py - ay) * 2 / (double) ah; - else - if (px - ax > aw / 2) - fact = (double) 1.0 - (ax + aw - px) * 2 / (double) aw; - else - fact = (double) 1.0 - (px - ax) * 2 / (double) aw; - else - if (horizontal) - fact = (double) (py - ay) / (double) ah; - else - fact = (double) (px - ax) / (double) aw; - #endif // VANITYGAPS_PATCH - - if (!center && mirror) - fact = 1.0 - fact; - - setmfact(&((Arg) { .f = 1.0 + fact })); - px = ev.xmotion.x; - py = ev.xmotion.y; - break; - } - } while (ev.type != ButtonRelease); - - #if WARP_PATCH - ignore_warp = 0; - #endif // WARP_PATCH - - XUngrabPointer(dpy, CurrentTime); - while (XCheckMaskEvent(dpy, EnterWindowMask, &ev)); -} \ No newline at end of file diff --git a/suckless/dwm/patch/dragmfact.h b/suckless/dwm/patch/dragmfact.h deleted file mode 100644 index 6390b717..00000000 --- a/suckless/dwm/patch/dragmfact.h +++ /dev/null @@ -1 +0,0 @@ -static void dragmfact(const Arg *arg); \ No newline at end of file diff --git a/suckless/dwm/patch/dwmc b/suckless/dwm/patch/dwmc deleted file mode 100755 index 66862311..00000000 --- a/suckless/dwm/patch/dwmc +++ /dev/null @@ -1,129 +0,0 @@ -#!/usr/bin/env bash - -signal() { - xsetroot -name "fsignal:$*" -} - -case $# in -1) - case $1 in - focusurgent) ;& - mirrorlayout) ;& - mpdcontrol) ;& - pushdown) ;& - pushup) ;& - self_restart) ;& - setlayout) ;& - setcfact) ;& - switchcol) ;& - view) ;& - viewall) ;& - viewtoleft) ;& - viewtoright) ;& - tagtoleft) ;& - tagtoright) ;& - tagandviewtoleft) ;& - tagandviewtoright) ;& - transfer) ;& - transferall) ;& - togglealttag) ;& - togglebar) ;& - togglefloating) ;& - togglefullscreen) ;& - fullscreen) ;& - togglefakefullscreen) ;& - togglesticky) ;& - togglehorizontalmax) ;& - toggleverticalmax) ;& - togglemax) ;& - togglegaps) ;& - defaultgaps) ;& - unfloatvisible) ;& - winview) ;& - xrdb) ;& - zoom) ;& - killclient) ;& - quit) - signal $1 - ;; - *) - echo "Unknown command ($1) or missing one argument." - exit 1 - ;; - esac - ;; -2) - case $1 in - cyclelayout) ;& - explace) ;& - moveplace) ;& - mpdchange) ;& - setkeymode) ;& - switchtag) ;& - togglescratch) ;& - view) - signal $1 ui $2 - ;; - viewex) ;& - toggleviewex) ;& - tagallmon) ;& - tagswapmon) ;& - tagex) ;& - toggletagex) ;& - setborderpx) ;& - setgaps) ;& - setlayoutex) ;& - setlayoutaxisex) ;& - swapfocus) ;& - focusstack) ;& - pushstack) ;& - inplacerotate) ;& - rotatestack) ;& - rotatelayoutaxis) ;& - incnmaster) ;& - incnstack) ;& - incrgaps) ;& - incrigaps) ;& - incrogaps) ;& - incrihgaps) ;& - incrivgaps) ;& - incrohgaps) ;& - incrovgaps) ;& - movestack) ;& - shiftview) ;& - shiftviewclients) ;& - focusmon) ;& - tagmon) - signal $1 i $2 - ;; - setcfact) ;& - setmfact) - signal $1 f $2 - ;; - *) - echo "Unknown command ($1) or too many arguments" - exit 1 - ;; - esac - ;; -5) - case $1 in - setgaps) - # Expects "setgaps oh ov ih iv" where -1 means to keep existing values - [ $2 = -1 ] && oh=128 || oh=$2 - [ $3 = -1 ] && ov=128 || ov=$3 - [ $4 = -1 ] && ih=128 || ih=$4 - [ $5 = -1 ] && iv=128 || iv=$5 - signal $1 i $(((oh << 24) + (ov << 16) + (ih << 8) + iv)) - ;; - *) - echo "Unknown command ($1) or too many arguments" - exit 1 - ;; - esac - ;; -*) - echo "Unknown command ($1) or too many arguments" - exit 1 - ;; -esac diff --git a/suckless/dwm/patch/dwmc.c b/suckless/dwm/patch/dwmc.c deleted file mode 100644 index 9c2e8631..00000000 --- a/suckless/dwm/patch/dwmc.c +++ /dev/null @@ -1,100 +0,0 @@ -void -setlayoutex(const Arg *arg) -{ - setlayout(&((Arg) { .v = &layouts[arg->i] })); -} - -void -viewex(const Arg *arg) -{ - view(&((Arg) { .ui = 1 << arg->ui })); -} - -void -viewallex(const Arg *arg) -{ - #if SCRATCHPADS_PATCH - view(&((Arg){.ui = ~SPTAGMASK})); - #else - view(&((Arg){.ui = ~0})); - #endif // SCRATCHPADS_PATCH -} - -void -toggleviewex(const Arg *arg) -{ - toggleview(&((Arg) { .ui = 1 << arg->ui })); -} - -void -tagex(const Arg *arg) -{ - tag(&((Arg) { .ui = 1 << arg->ui })); -} - -void -toggletagex(const Arg *arg) -{ - toggletag(&((Arg) { .ui = 1 << arg->ui })); -} - -void -tagallex(const Arg *arg) -{ - #if SCRATCHPADS_PATCH - tag(&((Arg){.ui = ~SPTAGMASK})); - #else - tag(&((Arg){.ui = ~0})); - #endif // SCRATCHPADS_PATCH -} - -int -fake_signal(void) -{ - char fsignal[256]; - char indicator[9] = "fsignal:"; - char str_sig[50]; - char param[16]; - int i, len_str_sig, n, paramn; - size_t len_fsignal, len_indicator = strlen(indicator); - Arg arg; - - // Get root name property - if (gettextprop(root, XA_WM_NAME, fsignal, sizeof(fsignal))) { - len_fsignal = strlen(fsignal); - - // Check if this is indeed a fake signal - if (len_indicator > len_fsignal ? 0 : strncmp(indicator, fsignal, len_indicator) == 0) { - paramn = sscanf(fsignal+len_indicator, "%s%n%s%n", str_sig, &len_str_sig, param, &n); - - if (paramn == 1) arg = (Arg) {0}; - else if (paramn > 2) return 1; - else if (strncmp(param, "i", n - len_str_sig) == 0) - #if IPC_PATCH - sscanf(fsignal + len_indicator + n, "%li", &(arg.i)); - #else - sscanf(fsignal + len_indicator + n, "%i", &(arg.i)); - #endif // IPC_PATCH - else if (strncmp(param, "ui", n - len_str_sig) == 0) - #if IPC_PATCH - sscanf(fsignal + len_indicator + n, "%lu", &(arg.ui)); - #else - sscanf(fsignal + len_indicator + n, "%u", &(arg.ui)); - #endif // IPC_PATCH - else if (strncmp(param, "f", n - len_str_sig) == 0) - sscanf(fsignal + len_indicator + n, "%f", &(arg.f)); - else return 1; - - // Check if a signal was found, and if so handle it - for (i = 0; i < LENGTH(signals); i++) - if (strncmp(str_sig, signals[i].sig, len_str_sig) == 0 && signals[i].func) - signals[i].func(&(arg)); - - // A fake signal was sent - return 1; - } - } - - // No fake signal was sent, so proceed with update - return 0; -} diff --git a/suckless/dwm/patch/dwmc.h b/suckless/dwm/patch/dwmc.h deleted file mode 100644 index 4fb04057..00000000 --- a/suckless/dwm/patch/dwmc.h +++ /dev/null @@ -1,13 +0,0 @@ -typedef struct { - const char * sig; - void (*func)(const Arg *); -} Signal; - -static void setlayoutex(const Arg *arg); -static void viewex(const Arg *arg); -static void viewallex(const Arg *arg); -static void toggleviewex(const Arg *arg); -static void tagex(const Arg *arg); -static void toggletagex(const Arg *arg); -static void tagallex(const Arg *arg); -static int fake_signal(void); diff --git a/suckless/dwm/patch/exresize.c b/suckless/dwm/patch/exresize.c deleted file mode 100644 index e9786b3d..00000000 --- a/suckless/dwm/patch/exresize.c +++ /dev/null @@ -1,195 +0,0 @@ -#define EXPAND_LEFT (1 << 0) -#define EXPAND_RIGHT (1 << 2) -#define EXPAND_UP (1 << 4) -#define EXPAND_DOWN (1 << 6) - -#define IS_SET(q, w) ((q & w) != 0) -#define IS_FORCED(q, w) IS_SET((q << 1), w) - -#define EXPANDALL (EXPAND_LEFT | EXPAND_RIGHT | EXPAND_UP | EXPAND_DOWN) -#define UNEXPAND (EXPANDALL << 1) // Force all directions to 0 -#define FORCE_EXPANDALL ~0 // Force expand in all directions - -void -exresize(const Arg *arg) -{ - Client *c; - int x, y, nx, ny, nw, nh; - c = selmon->sel; - - if (!c || !arg) return; - if (selmon->lt[selmon->sellt]->arrange && !c->isfloating) - togglefloating(NULL); - if (c->expandmask != 0) - expand(UNEXPAND); - - x = ((int *)arg->v)[0]; - y = ((int *)arg->v)[1]; - - nw = MIN(selmon->ww - c->bw*2, c->w + x); - nh = MIN(selmon->wh - c->bw*2, c->h + y); - nx = c->x - x/2; - ny = c->y - y/2; - - if (!((abs(c->x + c->w/2 - (selmon->wx + selmon->ww/2)) < snap))) { - if ((nw == selmon->ww) || - (nx < selmon->wx) || - (abs(selmon->wx - c->x) < snap)) - nx = selmon->wx; - else if ((nx+nw > (selmon->wx + selmon->ww)) || - (abs((selmon->wx + selmon->ww) - (c->x + c->w)) < snap)) - nx = (selmon->wx + selmon->ww) - nw - c->bw*2; - } else - nx = selmon->wx + selmon->ww/2 - nw/2; - - if (!((abs(c->y + c->h/2 - (selmon->wy + selmon->wh/2)) < snap))) { - - if ((nh == selmon->wh) || - (ny < selmon->wy) || - (abs(selmon->wy - c->y) < snap)) - ny = selmon->wy; - else if ((ny+nh > (selmon->wy + selmon->wh)) || - (abs((selmon->wy + selmon->wh) - (c->y + c->h)) < snap)) - ny = (selmon->wy + selmon->wh) - nh - c->bw*2; - } else - ny = selmon->wy + selmon->wh/2 - nh/2; - - - resizeclient(c, nx, ny, MAX(nw, 32), MAX(nh, 32)); - XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w/2, c->h/2); -} - -void -explace(const Arg *arg) -{ - Client *c; - int nx, ny; - - c = selmon->sel; - if (!c || (arg->ui >= 9)) return; - if (selmon->lt[selmon->sellt]->arrange && !c->isfloating) - togglefloating(NULL); - - nx = (arg->ui % 3) - 1; - ny = (arg->ui / 3) - 1; - - if (nx < 0) nx = selmon->wx; - else if (nx > 0) nx = selmon->wx + selmon->ww - c->w - c->bw*2; - else nx = selmon->wx + selmon->ww/2 - c->w/2; - - if (ny < 0) ny = selmon->wy; - else if (ny > 0) ny = selmon->wy + selmon->wh - c->h - c->bw*2; - else ny = selmon->wy + selmon->wh/2 - c->h/2; - - resize(c, nx, ny, c->w, c->h, True); - XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w/2, c->h/2); -} - -int -calculate_expand(unsigned char mask, unsigned char curmask, - unsigned char *newmask, unsigned char key, - int *reset_value, int new_reset_value, - int max_value, int old_value) -{ - if (IS_SET(key, mask) || - (IS_SET(key, curmask) && (!IS_SET(key, mask) && IS_FORCED(key, mask))) || - (!IS_SET(key, curmask) && (IS_SET(key, mask) && IS_FORCED(key, mask)))) { - - if (IS_SET(key, mask) && (!IS_SET(key,curmask) || IS_FORCED(key,mask))) { - if (!IS_SET(key, curmask)) - *reset_value = new_reset_value; - *newmask |= key; - return max_value; - } else if ((IS_SET(key,curmask) && IS_SET(key, mask)) || - (!IS_SET(key, mask) && IS_FORCED(key, mask))) { - *newmask &= ~key; - return *reset_value; - } else { - *newmask &= ~key; - return old_value; - } - } else - return new_reset_value; -} - -void -expand(unsigned char mask) -{ - XEvent ev; - int nx1, ny1, nx2, ny2; - #if SETBORDERPX_PATCH - int bp = selmon->borderpx; - #else - int bp = borderpx; - #endif // SETBORDERPX_PATCH - unsigned char curmask; - unsigned char newmask; - - if (!selmon->sel || selmon->sel->isfixed) - return; - XRaiseWindow(dpy, selmon->sel->win); - newmask = curmask = selmon->sel->expandmask; - - if (curmask == 0) { - if(!selmon->lt[selmon->sellt]->arrange || selmon->sel->isfloating) - selmon->sel->wasfloating = 1; - else { - togglefloating(NULL); - selmon->sel->wasfloating = 0; - } - } - - nx1 = calculate_expand(mask, curmask, &newmask, - EXPAND_LEFT, &selmon->sel->expandx1, - selmon->sel->x, - selmon->wx, - selmon->sel->oldx); - nx2 = calculate_expand(mask, curmask, &newmask, - EXPAND_RIGHT, &selmon->sel->expandx2, - selmon->sel->x + selmon->sel->w, - selmon->wx + selmon->ww - 2*bp, - selmon->sel->oldw + selmon->sel->x); - ny1 = calculate_expand(mask, curmask, &newmask, - EXPAND_UP, &selmon->sel->expandy1, - selmon->sel->y, - selmon->wy, - selmon->sel->oldy); - ny2 = calculate_expand(mask, curmask, &newmask, - EXPAND_DOWN, &selmon->sel->expandy2, - selmon->sel->y + selmon->sel->h, - selmon->wy + selmon->wh - 2*bp, - selmon->sel->oldh + selmon->sel->y); - - - resizeclient(selmon->sel, nx1, ny1, MAX(nx2-nx1, 32), MAX(ny2-ny1, 32)); - - if ((newmask == 0) && (!selmon->sel->wasfloating)) - togglefloating(NULL); - selmon->sel->expandmask = newmask; - drawbar(selmon); - while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); -} - -void -togglemaximize(const Arg *arg) -{ - if (arg->i > 0) expand(FORCE_EXPANDALL); - else if (arg->i < 0) expand(UNEXPAND); - else expand(EXPANDALL); -} - -void -toggleverticalexpand(const Arg *arg) -{ - if (arg->i < 0) expand(EXPAND_DOWN); - else if (arg->i > 0) expand(EXPAND_UP); - else expand(EXPAND_DOWN | EXPAND_UP); -} - -void -togglehorizontalexpand(const Arg *arg) -{ - if (arg->i < 0) expand(EXPAND_LEFT); - else if (arg->i > 0) expand(EXPAND_RIGHT); - else expand(EXPAND_LEFT | EXPAND_RIGHT); -} diff --git a/suckless/dwm/patch/exresize.h b/suckless/dwm/patch/exresize.h deleted file mode 100644 index 79695ba3..00000000 --- a/suckless/dwm/patch/exresize.h +++ /dev/null @@ -1,8 +0,0 @@ -enum { EX_NW, EX_N, EX_NE, EX_W, EX_C, EX_E, EX_SW, EX_S, EX_SE }; - -void expand(unsigned char mask); -void togglemaximize(const Arg *arg); -void toggleverticalexpand(const Arg *arg); -void togglehorizontalexpand(const Arg *arg); -void exresize(const Arg *arg); -void explace(const Arg *arg); \ No newline at end of file diff --git a/suckless/dwm/patch/fakefullscreenclient.c b/suckless/dwm/patch/fakefullscreenclient.c deleted file mode 100644 index eb51652e..00000000 --- a/suckless/dwm/patch/fakefullscreenclient.c +++ /dev/null @@ -1,18 +0,0 @@ -void -togglefakefullscreen(const Arg *arg) -{ - Client *c = selmon->sel; - if (!c) - return; - - if (c->fakefullscreen != 1 && c->isfullscreen) { // exit fullscreen --> fake fullscreen - c->fakefullscreen = 2; - setfullscreen(c, 0); - } else if (c->fakefullscreen == 1) { - setfullscreen(c, 0); - c->fakefullscreen = 0; - } else { - c->fakefullscreen = 1; - setfullscreen(c, 1); - } -} diff --git a/suckless/dwm/patch/fakefullscreenclient.h b/suckless/dwm/patch/fakefullscreenclient.h deleted file mode 100644 index e2a36d1a..00000000 --- a/suckless/dwm/patch/fakefullscreenclient.h +++ /dev/null @@ -1 +0,0 @@ -static void togglefakefullscreen(const Arg *arg); \ No newline at end of file diff --git a/suckless/dwm/patch/floatpos.c b/suckless/dwm/patch/floatpos.c index 5d3947a3..91ef9d12 100644 --- a/suckless/dwm/patch/floatpos.c +++ b/suckless/dwm/patch/floatpos.c @@ -9,10 +9,8 @@ floatpos(const Arg *arg) setfloatpos(c, (char *)arg->v); resizeclient(c, c->x, c->y, c->w, c->h); - #if !FOCUSONCLICK_PATCH XRaiseWindow(dpy, c->win); XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w/2, c->h/2); - #endif // FOCUSONCLICK_PATCH } void @@ -20,10 +18,8 @@ setfloatpos(Client *c, const char *floatpos) { char xCh, yCh, wCh, hCh; int x, y, w, h, wx, ww, wy, wh; - #if FLOATPOS_RESPECT_GAPS_PATCH int oh, ov, ih, iv; unsigned int n; - #endif // FLOATPOS_RESPECT_GAPS_PATCH if (!c || !floatpos) return; @@ -57,18 +53,11 @@ setfloatpos(Client *c, const char *floatpos) return; } - #if FLOATPOS_RESPECT_GAPS_PATCH getgaps(c->mon, &oh, &ov, &ih, &iv, &n); wx = c->mon->wx + ov; wy = c->mon->wy + oh; ww = c->mon->ww - 2*ov; wh = c->mon->wh - 2*oh; - #else - wx = c->mon->wx; - wy = c->mon->wy; - ww = c->mon->ww; - wh = c->mon->wh; - #endif // FLOATPOS_RESPECT_GAPS_PATCH getfloatpos(x, xCh, w, wCh, wx, ww, c->x, c->w, c->bw, floatposgrid_x, &c->x, &c->w); getfloatpos(y, yCh, h, hCh, wy, wh, c->y, c->h, c->bw, floatposgrid_y, &c->y, &c->h); diff --git a/suckless/dwm/patch/floatpos.h b/suckless/dwm/patch/floatpos.h index 21e94efb..ad0d826a 100644 --- a/suckless/dwm/patch/floatpos.h +++ b/suckless/dwm/patch/floatpos.h @@ -1,3 +1,3 @@ static void floatpos(const Arg *arg); static void setfloatpos(Client *c, const char *floatpos); -static void getfloatpos(int pos, char pCh, int size, char sCh, int min_p, int max_s, int cp, int cs, int cbw, int defgrid, int *out_p, int *out_s); \ No newline at end of file +static void getfloatpos(int pos, char pCh, int size, char sCh, int min_p, int max_s, int cp, int cs, int cbw, int defgrid, int *out_p, int *out_s); diff --git a/suckless/dwm/patch/focusadjacenttag.c b/suckless/dwm/patch/focusadjacenttag.c deleted file mode 100644 index 5b13b542..00000000 --- a/suckless/dwm/patch/focusadjacenttag.c +++ /dev/null @@ -1,73 +0,0 @@ -void -tagtoleft(const Arg *arg) -{ - if (selmon->sel != NULL - && __builtin_popcount(selmon->tagset[selmon->seltags] & TAGMASK) == 1 - && selmon->tagset[selmon->seltags] > 1) { - selmon->sel->tags >>= 1; - focus(NULL); - arrange(selmon); - } -} - -void -tagtoright(const Arg *arg) -{ - if (selmon->sel != NULL - && __builtin_popcount(selmon->tagset[selmon->seltags] & TAGMASK) == 1 - && selmon->tagset[selmon->seltags] & (TAGMASK >> 1)) { - selmon->sel->tags <<= 1; - focus(NULL); - arrange(selmon); - } -} - -void -viewtoleft(const Arg *arg) -{ - if (__builtin_popcount(selmon->tagset[selmon->seltags] & TAGMASK) == 1 - && selmon->tagset[selmon->seltags] > 1) { - selmon->seltags ^= 1; /* toggle sel tagset */ - selmon->tagset[selmon->seltags] = selmon->tagset[selmon->seltags ^ 1] >> 1; - focus(NULL); - arrange(selmon); - } -} - -void -viewtoright(const Arg *arg) -{ - if (__builtin_popcount(selmon->tagset[selmon->seltags] & TAGMASK) == 1 - && selmon->tagset[selmon->seltags] & (TAGMASK >> 1)) { - selmon->seltags ^= 1; /* toggle sel tagset */ - selmon->tagset[selmon->seltags] = selmon->tagset[selmon->seltags ^ 1] << 1; - focus(NULL); - arrange(selmon); - } -} - -void -tagandviewtoleft(const Arg *arg) -{ - if (__builtin_popcount(selmon->tagset[selmon->seltags] & TAGMASK) == 1 - && selmon->tagset[selmon->seltags] > 1) { - selmon->sel->tags >>= 1; - selmon->seltags ^= 1; /* toggle sel tagset */ - selmon->tagset[selmon->seltags] = selmon->tagset[selmon->seltags ^ 1] >> 1; - focus(selmon->sel); - arrange(selmon); - } -} - -void -tagandviewtoright(const Arg *arg) -{ - if (__builtin_popcount(selmon->tagset[selmon->seltags] & TAGMASK) == 1 - && selmon->tagset[selmon->seltags] & (TAGMASK >> 1)) { - selmon->sel->tags <<= 1; - selmon->seltags ^= 1; /* toggle sel tagset */ - selmon->tagset[selmon->seltags] = selmon->tagset[selmon->seltags ^ 1] << 1; - focus(selmon->sel); - arrange(selmon); - } -} \ No newline at end of file diff --git a/suckless/dwm/patch/focusadjacenttag.h b/suckless/dwm/patch/focusadjacenttag.h deleted file mode 100644 index 55b1019d..00000000 --- a/suckless/dwm/patch/focusadjacenttag.h +++ /dev/null @@ -1,6 +0,0 @@ -static void tagtoleft(const Arg *arg); -static void tagtoright(const Arg *arg); -static void viewtoleft(const Arg *arg); -static void viewtoright(const Arg *arg); -static void tagandviewtoleft(const Arg *arg); -static void tagandviewtoright(const Arg *arg); \ No newline at end of file diff --git a/suckless/dwm/patch/focusdir.c b/suckless/dwm/patch/focusdir.c deleted file mode 100644 index 1807e42a..00000000 --- a/suckless/dwm/patch/focusdir.c +++ /dev/null @@ -1,65 +0,0 @@ -void -focusdir(const Arg *arg) -{ - Client *s = selmon->sel, *f = NULL, *c, *next; - - if (!s) - return; - - unsigned int score = -1; - unsigned int client_score; - int dist; - int dirweight = 20; - int isfloating = s->isfloating; - - next = s->next; - if (!next) - next = s->mon->clients; - for (c = next; c != s; c = next) { - - next = c->next; - if (!next) - next = s->mon->clients; - - if (!ISVISIBLE(c) || c->isfloating != isfloating) // || HIDDEN(c) - continue; - - switch (arg->i) { - case 0: // left - dist = s->x - c->x - c->w; - client_score = - dirweight * MIN(abs(dist), abs(dist + s->mon->ww)) + - abs(s->y - c->y); - break; - case 1: // right - dist = c->x - s->x - s->w; - client_score = - dirweight * MIN(abs(dist), abs(dist + s->mon->ww)) + - abs(c->y - s->y); - break; - case 2: // up - dist = s->y - c->y - c->h; - client_score = - dirweight * MIN(abs(dist), abs(dist + s->mon->wh)) + - abs(s->x - c->x); - break; - default: - case 3: // down - dist = c->y - s->y - s->h; - client_score = - dirweight * MIN(abs(dist), abs(dist + s->mon->wh)) + - abs(c->x - s->x); - break; - } - - if (((arg->i == 0 || arg->i == 2) && client_score <= score) || client_score < score) { - score = client_score; - f = c; - } - } - - if (f && f != s) { - focus(f); - restack(f->mon); - } -} \ No newline at end of file diff --git a/suckless/dwm/patch/focusdir.h b/suckless/dwm/patch/focusdir.h deleted file mode 100644 index f0f3e5e5..00000000 --- a/suckless/dwm/patch/focusdir.h +++ /dev/null @@ -1 +0,0 @@ -static void focusdir(const Arg *arg); \ No newline at end of file diff --git a/suckless/dwm/patch/focusmaster.c b/suckless/dwm/patch/focusmaster.c deleted file mode 100644 index 839fb436..00000000 --- a/suckless/dwm/patch/focusmaster.c +++ /dev/null @@ -1,13 +0,0 @@ -void -focusmaster(const Arg *arg) -{ - Client *c; - - if (selmon->nmaster < 1) - return; - - c = nexttiled(selmon->clients); - - if (c) - focus(c); -} \ No newline at end of file diff --git a/suckless/dwm/patch/focusmaster.h b/suckless/dwm/patch/focusmaster.h deleted file mode 100644 index 5732e4b4..00000000 --- a/suckless/dwm/patch/focusmaster.h +++ /dev/null @@ -1 +0,0 @@ -static void focusmaster(const Arg *arg); \ No newline at end of file diff --git a/suckless/dwm/patch/focusurgent.c b/suckless/dwm/patch/focusurgent.c deleted file mode 100644 index 74946ce6..00000000 --- a/suckless/dwm/patch/focusurgent.c +++ /dev/null @@ -1,15 +0,0 @@ -void -focusurgent(const Arg *arg) -{ - Client *c; - int i; - for (c = selmon->clients; c && !c->isurgent; c = c->next); - if (c) { - for (i = 0; i < NUMTAGS && !((1 << i) & c->tags); i++); - if (i < NUMTAGS) { - if (((1 << i) & TAGMASK) != selmon->tagset[selmon->seltags]) - view(&((Arg) { .ui = 1 << i })); - focus(c); - } - } -} \ No newline at end of file diff --git a/suckless/dwm/patch/focusurgent.h b/suckless/dwm/patch/focusurgent.h deleted file mode 100644 index 27ab8acb..00000000 --- a/suckless/dwm/patch/focusurgent.h +++ /dev/null @@ -1 +0,0 @@ -static void focusurgent(const Arg *arg); \ No newline at end of file diff --git a/suckless/dwm/patch/fsignal.c b/suckless/dwm/patch/fsignal.c deleted file mode 100644 index 8ae237b7..00000000 --- a/suckless/dwm/patch/fsignal.c +++ /dev/null @@ -1,40 +0,0 @@ -int -fake_signal(void) -{ - char fsignal[256]; - char indicator[9] = "fsignal:"; - char str_signum[16]; - int i, v, signum; - size_t len_fsignal, len_indicator = strlen(indicator); - - // Get root name property - if (gettextprop(root, XA_WM_NAME, fsignal, sizeof(fsignal))) { - len_fsignal = strlen(fsignal); - - // Check if this is indeed a fake signal - if (len_indicator > len_fsignal ? 0 : strncmp(indicator, fsignal, len_indicator) == 0) { - memcpy(str_signum, &fsignal[len_indicator], len_fsignal - len_indicator); - str_signum[len_fsignal - len_indicator] = '\0'; - - // Convert string value into managable integer - for (i = signum = 0; i < strlen(str_signum); i++) { - v = str_signum[i] - '0'; - if (v >= 0 && v <= 9) { - signum = signum * 10 + v; - } - } - - // Check if a signal was found, and if so handle it - if (signum) - for (i = 0; i < LENGTH(signals); i++) - if (signum == signals[i].signum && signals[i].func) - signals[i].func(&(signals[i].arg)); - - // A fake signal was sent - return 1; - } - } - - // No fake signal was sent, so proceed with update - return 0; -} \ No newline at end of file diff --git a/suckless/dwm/patch/fsignal.h b/suckless/dwm/patch/fsignal.h deleted file mode 100644 index bfb56af1..00000000 --- a/suckless/dwm/patch/fsignal.h +++ /dev/null @@ -1,7 +0,0 @@ -typedef struct { - unsigned int signum; - void (*func)(const Arg *); - const Arg arg; -} Signal; - -static int fake_signal(void); \ No newline at end of file diff --git a/suckless/dwm/patch/fullscreen.c b/suckless/dwm/patch/fullscreen.c index a89d40db..72c24753 100644 --- a/suckless/dwm/patch/fullscreen.c +++ b/suckless/dwm/patch/fullscreen.c @@ -5,13 +5,11 @@ fullscreen(const Arg *arg) { int monocle_pos = 0; if (selmon->showbar || last_layout == NULL) { - #if MONOCLE_LAYOUT for (monocle_pos = 0, last_layout = (Layout *)layouts; !last_layout->arrange || last_layout->arrange != &monocle; monocle_pos++, last_layout++ ); - #endif // MONOCLE_LAYOUT for (last_layout = (Layout *)layouts; last_layout != selmon->lt[selmon->sellt]; last_layout++); setlayout(&((Arg) { .v = &layouts[monocle_pos] })); } else { setlayout(&((Arg) { .v = last_layout })); } togglebar(arg); -} \ No newline at end of file +} diff --git a/suckless/dwm/patch/fullscreen.h b/suckless/dwm/patch/fullscreen.h index b380c2ed..28a833b9 100644 --- a/suckless/dwm/patch/fullscreen.h +++ b/suckless/dwm/patch/fullscreen.h @@ -1 +1 @@ -static void fullscreen(const Arg *arg); \ No newline at end of file +static void fullscreen(const Arg *arg); diff --git a/suckless/dwm/patch/include.c b/suckless/dwm/patch/include.c index 7f796240..c25b9681 100644 --- a/suckless/dwm/patch/include.c +++ b/suckless/dwm/patch/include.c @@ -2,342 +2,35 @@ #include "bar_indicators.c" #include "bar_tagicons.c" -#if BAR_ALPHA_PATCH -#include "bar_alpha.c" -#endif -#if BAR_ALTERNATIVE_TAGS_PATCH -#include "bar_alternativetags.c" -#endif -#if BAR_ANYBAR_PATCH -#include "bar_anybar.c" -#endif -#if BAR_DWMBLOCKS_PATCH && BAR_STATUSCMD_PATCH #include "bar_dwmblocks.c" -#endif -#if BAR_EWMHTAGS_PATCH -#include "bar_ewmhtags.c" -#endif -#if COMBO_PATCH #include "combo.c" -#endif -#if BAR_HOLDBAR_PATCH -#include "bar_holdbar.c" -#endif -#if BAR_LTSYMBOL_PATCH #include "bar_ltsymbol.c" -#endif -#if BAR_POWERLINE_STATUS_PATCH -#include "bar_powerline_status.c" -#endif -#if BAR_POWERLINE_TAGS_PATCH -#include "bar_powerline_tags.c" -#endif -#if BAR_STATUS_PATCH #include "bar_status.c" -#endif -#if BAR_STATUS2D_PATCH #include "bar_status2d.c" -#endif -#if BAR_STATUSBUTTON_PATCH -#include "bar_statusbutton.c" -#endif -#if BAR_STATUSCMD_PATCH #include "bar_statuscmd.c" -#endif -#if BAR_STATUSCOLORS_PATCH -#include "bar_statuscolors.c" -#endif -#if BAR_TABGROUPS_PATCH -#include "bar_tabgroups.c" -#endif -#if BAR_TAGS_PATCH #include "bar_tags.c" -#endif -#if BAR_TAGGRID_PATCH -#include "bar_taggrid.c" -#endif -#if BAR_WINTITLE_PATCH -#include "bar_wintitle.c" -#endif -#if BAR_FANCYBAR_PATCH -#include "bar_fancybar.c" -#endif -#if BAR_FLEXWINTITLE_PATCH -#include "bar_flexwintitle.c" -#if BAR_WINTITLE_FLOATING_PATCH -#include "bar_wintitle_floating.c" -#endif -#if BAR_WINTITLE_HIDDEN_PATCH -#include "bar_wintitle_hidden.c" -#endif -#endif // BAR_FLEXWINTITLE_PATCH -#if BAR_AWESOMEBAR_PATCH -#include "bar_awesomebar.c" -#endif -#if BAR_SYSTRAY_PATCH #include "bar_systray.c" -#endif -#if BAR_VTCOLORS_PATCH -#include "bar_vtcolors.c" -#endif -#if BAR_WINTITLEACTIONS_PATCH -#include "bar_wintitleactions.c" -#endif -#if BAR_LAYOUTMENU_PATCH #include "bar_layoutmenu.c" -#endif /* Other patches */ -#if ASPECTRESIZE_PATCH -#include "aspectresize.c" -#endif -#if ATTACHABOVE_PATCH || ATTACHASIDE_PATCH || ATTACHBELOW_PATCH || ATTACHBOTTOM_PATCH -#include "attachx.c" -#endif -#if AUTOSTART_PATCH #include "autostart.c" -#endif -#if CFACTS_PATCH -#include "cfacts.c" -#endif -#if CMDCUSTOMIZE_PATCH -#include "cmdcustomize.c" -#endif -#if COOL_AUTOSTART_PATCH -#include "cool_autostart.c" -#endif -#if CYCLELAYOUTS_PATCH #include "cyclelayouts.c" -#endif -#if DECORATION_HINTS_PATCH -#include "decorationhints.c" -#endif -#if DRAGCFACT_PATCH && CFACTS_PATCH -#include "dragcfact.c" -#endif -#if DWMC_PATCH -#include "dwmc.c" -#elif FSIGNAL_PATCH -#include "fsignal.c" -#endif -#if EXRESIZE_PATCH -#include "exresize.c" -#endif -#if !FAKEFULLSCREEN_PATCH && FAKEFULLSCREEN_CLIENT_PATCH -#include "fakefullscreenclient.c" -#endif -#if FLOATPOS_PATCH #include "floatpos.c" -#endif -#if FOCUSADJACENTTAG_PATCH -#include "focusadjacenttag.c" -#endif -#if FOCUSDIR_PATCH -#include "focusdir.c" -#endif -#if FOCUSMASTER_PATCH -#include "focusmaster.c" -#endif -#if FOCUSURGENT_PATCH -#include "focusurgent.c" -#endif -#if FULLSCREEN_PATCH #include "fullscreen.c" -#endif -#if INPLACEROTATE_PATCH -#include "inplacerotate.c" -#endif -#if IPC_PATCH -#include "ipc.c" -#ifdef VERSION -#include "ipc/IPCClient.c" -#include "ipc/yajl_dumps.c" -#include "ipc/ipc.c" -#include "ipc/util.c" -#endif -#endif // IPC_PATCH -#if INSETS_PATCH -#include "insets.c" -#endif -#if KEYMODES_PATCH -#include "keymodes.c" -#endif -#if KILLUNSEL_PATCH -#include "killunsel.c" -#endif -#if MAXIMIZE_PATCH -#include "maximize.c" -#endif -#if MPDCONTROL_PATCH -#include "mpdcontrol.c" -#endif -#if MOVEPLACE_PATCH -#include "moveplace.c" -#endif -#if MOVERESIZE_PATCH -#include "moveresize.c" -#endif -#if MOVESTACK_PATCH #include "movestack.c" -#endif -#if NO_MOD_BUTTONS_PATCH -#include "nomodbuttons.c" -#endif -#if PERTAG_PATCH #include "pertag.c" -#endif -#if PLACEMOUSE_PATCH -#include "placemouse.c" -#endif -#if PUSH_NO_MASTER_PATCH -#include "push_no_master.c" -#elif PUSH_PATCH -#include "push.c" -#endif -#if REORGANIZETAGS_PATCH -#include "reorganizetags.c" -#endif -#if RESTARTSIG_PATCH -#include "restartsig.c" -#endif -#if RIODRAW_PATCH -#include "riodraw.c" -#endif -#if ROTATESTACK_PATCH -#include "rotatestack.c" -#endif -#if ROUNDED_CORNERS_PATCH -#include "roundedcorners.c" -#endif -#if SCRATCHPADS_PATCH #include "scratchpad.c" -#endif -#if SCRATCHPAD_ALT_1_PATCH -#include "scratchpad_alt_1.c" -#endif -#if SELFRESTART_PATCH -#include "selfrestart.c" -#endif -#if SETBORDERPX_PATCH -#include "setborderpx.c" -#endif -#if SHIFTVIEW_PATCH #include "shiftview.c" -#endif -#if SHIFTVIEW_CLIENTS_PATCH -#include "shiftviewclients.c" -#endif -#if SIZEHINTS_RULED_PATCH -#include "sizehints_ruled.c" -#endif -#if SORTSCREENS_PATCH -#ifdef XINERAMA -#include "sortscreens.c" -#endif // XINERAMA -#endif -#if STACKER_PATCH -#include "stacker.c" -#endif -#if STICKY_PATCH -#include "sticky.c" -#endif -#if SWALLOW_PATCH -#include "swallow.c" -#endif -#if SWAPFOCUS_PATCH && PERTAG_PATCH -#include "swapfocus.c" -#endif -#if SWAPTAGS_PATCH -#include "swaptags.c" -#endif -#if SWITCHCOL_PATCH #include "switchcol.c" -#endif -#if TAGALL_PATCH -#include "tagall.c" -#endif -#if TAGALLMON_PATCH -#include "tagallmon.c" -#endif -#if TAGOTHERMONITOR_PATCH -#include "tagothermonitor.c" -#endif -#if TAGSWAPMON_PATCH -#include "tagswapmon.c" -#endif -#if TOGGLEFULLSCREEN_PATCH #include "togglefullscreen.c" -#endif -#if TRANSFER_PATCH -#include "transfer.c" -#endif -#if TRANSFER_ALL_PATCH -#include "transferall.c" -#endif -#if UNFLOATVISIBLE_PATCH -#include "unfloatvisible.c" -#endif -#if VANITYGAPS_PATCH #include "vanitygaps.c" -#endif -#if WARP_PATCH -#include "warp.c" -#endif -#if WINVIEW_PATCH #include "winview.c" -#endif -#if ZOOMSWAP_PATCH -#include "zoomswap.c" -#endif -#if XRDB_PATCH && !BAR_VTCOLORS_PATCH -#include "xrdb.c" -#endif -#if DRAGMFACT_PATCH -#include "dragmfact.c" -#endif /* Layouts */ -#if BSTACK_LAYOUT || BSTACKHORIZ_LAYOUT || CENTEREDMASTER_LAYOUT || CENTEREDFLOATINGMASTER_LAYOUT || COLUMNS_LAYOUT || DECK_LAYOUT || TILE_LAYOUT #include "layout_facts.c" -#endif -#if BSTACK_LAYOUT -#include "layout_bstack.c" -#endif -#if BSTACKHORIZ_LAYOUT -#include "layout_bstackhoriz.c" -#endif -#if CENTEREDMASTER_LAYOUT #include "layout_centeredmaster.c" -#endif -#if CENTEREDFLOATINGMASTER_LAYOUT #include "layout_centeredfloatingmaster.c" -#endif -#if COLUMNS_LAYOUT -#include "layout_columns.c" -#endif -#if DECK_LAYOUT #include "layout_deck.c" -#endif -#if FIBONACCI_DWINDLE_LAYOUT || FIBONACCI_SPIRAL_LAYOUT #include "layout_fibonacci.c" -#endif -#if FLEXTILE_DELUXE_LAYOUT -#include "layout_flextile-deluxe.c" -#endif -#if GAPPLESSGRID_LAYOUT -#include "layout_gapplessgrid.c" -#endif -#if GRIDMODE_LAYOUT #include "layout_grid.c" -#endif -#if HORIZGRID_LAYOUT -#include "layout_horizgrid.c" -#endif -#if MONOCLE_LAYOUT #include "layout_monocle.c" -#endif -#if NROWGRID_LAYOUT -#include "layout_nrowgrid.c" -#endif -#if TILE_LAYOUT #include "layout_tile.c" -#endif diff --git a/suckless/dwm/patch/include.h b/suckless/dwm/patch/include.h index 9b3de500..b14677b3 100644 --- a/suckless/dwm/patch/include.h +++ b/suckless/dwm/patch/include.h @@ -2,332 +2,34 @@ #include "bar_indicators.h" #include "bar_tagicons.h" -#if BAR_ALPHA_PATCH -#include "bar_alpha.h" -#endif -#if BAR_ALTERNATIVE_TAGS_PATCH -#include "bar_alternativetags.h" -#endif -#if BAR_ANYBAR_PATCH -#include "bar_anybar.h" -#endif -#if BAR_DWMBLOCKS_PATCH && BAR_STATUSCMD_PATCH #include "bar_dwmblocks.h" -#endif -#if BAR_EWMHTAGS_PATCH -#include "bar_ewmhtags.h" -#endif -#if COMBO_PATCH #include "combo.h" -#endif -#if BAR_HOLDBAR_PATCH -#include "bar_holdbar.h" -#endif -#if BAR_LTSYMBOL_PATCH #include "bar_ltsymbol.h" -#endif -#if BAR_POWERLINE_STATUS_PATCH -#include "bar_powerline_status.h" -#endif -#if BAR_POWERLINE_TAGS_PATCH -#include "bar_powerline_tags.h" -#endif -#if BAR_STATUS_PATCH #include "bar_status.h" -#endif -#if BAR_STATUS2D_PATCH #include "bar_status2d.h" -#endif -#if BAR_STATUSBUTTON_PATCH -#include "bar_statusbutton.h" -#endif -#if BAR_STATUSCMD_PATCH #include "bar_statuscmd.h" -#endif -#if BAR_TABGROUPS_PATCH -#include "bar_tabgroups.h" -#endif -#if BAR_TAGS_PATCH #include "bar_tags.h" -#endif -#if BAR_TAGGRID_PATCH -#include "bar_taggrid.h" -#endif -#if BAR_WINTITLE_PATCH -#include "bar_wintitle.h" -#endif -#if BAR_FANCYBAR_PATCH -#include "bar_fancybar.h" -#endif -#if BAR_FLEXWINTITLE_PATCH -#include "bar_flexwintitle.h" -#if BAR_WINTITLE_FLOATING_PATCH -#include "bar_wintitle_floating.h" -#endif -#if BAR_WINTITLE_HIDDEN_PATCH -#include "bar_wintitle_hidden.h" -#endif -#endif // BAR_FLEXWINTITLE_PATCH -#if BAR_AWESOMEBAR_PATCH -#include "bar_awesomebar.h" -#endif -#if BAR_SYSTRAY_PATCH #include "bar_systray.h" -#endif -#if BAR_VTCOLORS_PATCH -#include "bar_vtcolors.h" -#endif -#if BAR_WINTITLEACTIONS_PATCH -#include "bar_wintitleactions.h" -#endif -#if BAR_LAYOUTMENU_PATCH #include "bar_layoutmenu.h" -#endif /* Other patches */ -#if ASPECTRESIZE_PATCH -#include "aspectresize.h" -#endif -#if ATTACHABOVE_PATCH || ATTACHASIDE_PATCH || ATTACHBELOW_PATCH || ATTACHBOTTOM_PATCH -#include "attachx.h" -#endif -#if AUTOSTART_PATCH #include "autostart.h" -#endif -#if CFACTS_PATCH -#include "cfacts.h" -#endif -#if CMDCUSTOMIZE_PATCH -#include "cmdcustomize.h" -#endif -#if COOL_AUTOSTART_PATCH -#include "cool_autostart.h" -#endif -#if CYCLELAYOUTS_PATCH #include "cyclelayouts.h" -#endif -#if DECORATION_HINTS_PATCH -#include "decorationhints.h" -#endif -#if DRAGCFACT_PATCH && CFACTS_PATCH -#include "dragcfact.h" -#endif -#if DRAGMFACT_PATCH -#include "dragmfact.h" -#endif -#if DWMC_PATCH -#include "dwmc.h" -#elif FSIGNAL_PATCH -#include "fsignal.h" -#endif -#if EXRESIZE_PATCH -#include "exresize.h" -#endif -#if !FAKEFULLSCREEN_PATCH && FAKEFULLSCREEN_CLIENT_PATCH -#include "fakefullscreenclient.h" -#endif -#if FLOATPOS_PATCH #include "floatpos.h" -#endif -#if FOCUSDIR_PATCH -#include "focusdir.h" -#endif -#if FOCUSADJACENTTAG_PATCH -#include "focusadjacenttag.h" -#endif -#if FOCUSMASTER_PATCH -#include "focusmaster.h" -#endif -#if FOCUSURGENT_PATCH -#include "focusurgent.h" -#endif -#if FULLSCREEN_PATCH #include "fullscreen.h" -#endif -#if INPLACEROTATE_PATCH -#include "inplacerotate.h" -#endif -#if IPC_PATCH -#include "ipc.h" -#include "ipc/ipc.h" -#include "ipc/util.h" -#endif -#if INSETS_PATCH -#include "insets.h" -#endif -#if KEYMODES_PATCH -#include "keymodes.h" -#endif -#if KILLUNSEL_PATCH -#include "killunsel.h" -#endif -#if MAXIMIZE_PATCH -#include "maximize.h" -#endif -#if MPDCONTROL_PATCH -#include "mpdcontrol.h" -#endif -#if MOVEPLACE_PATCH -#include "moveplace.h" -#endif -#if MOVERESIZE_PATCH -#include "moveresize.h" -#endif -#if MOVESTACK_PATCH #include "movestack.h" -#endif -#if NO_MOD_BUTTONS_PATCH -#include "nomodbuttons.h" -#endif -#if PERTAG_PATCH #include "pertag.h" -#endif -#if PLACEMOUSE_PATCH -#include "placemouse.h" -#endif -#if PUSH_NO_MASTER_PATCH -#include "push_no_master.h" -#elif PUSH_PATCH -#include "push.h" -#endif -#if REORGANIZETAGS_PATCH -#include "reorganizetags.h" -#endif -#if RESTARTSIG_PATCH -#include "restartsig.h" -#endif -#if RIODRAW_PATCH -#include "riodraw.h" -#endif -#if ROTATESTACK_PATCH -#include "rotatestack.h" -#endif -#if ROUNDED_CORNERS_PATCH -#include "roundedcorners.h" -#endif -#if SCRATCHPADS_PATCH #include "scratchpad.h" -#endif -#if SCRATCHPAD_ALT_1_PATCH -#include "scratchpad_alt_1.h" -#endif -#if SELFRESTART_PATCH -#include "selfrestart.h" -#endif -#if SETBORDERPX_PATCH -#include "setborderpx.h" -#endif -#if SHIFTVIEW_PATCH #include "shiftview.h" -#endif -#if SHIFTVIEW_CLIENTS_PATCH -#include "shiftviewclients.h" -#endif -#if SIZEHINTS_RULED_PATCH -#include "sizehints_ruled.h" -#endif -#if SORTSCREENS_PATCH -#ifdef XINERAMA -#include "sortscreens.h" -#endif // XINERAMA -#endif -#if STACKER_PATCH -#include "stacker.h" -#endif -#if STICKY_PATCH -#include "sticky.h" -#endif -#if SWALLOW_PATCH -#include "swallow.h" -#endif -#if SWAPFOCUS_PATCH && PERTAG_PATCH -#include "swapfocus.h" -#endif -#if SWAPTAGS_PATCH -#include "swaptags.h" -#endif -#if SWITCHCOL_PATCH #include "switchcol.h" -#endif -#if TAGALL_PATCH -#include "tagall.h" -#endif -#if TAGALLMON_PATCH -#include "tagallmon.h" -#endif -#if TAGOTHERMONITOR_PATCH -#include "tagothermonitor.h" -#endif -#if TAGSWAPMON_PATCH -#include "tagswapmon.h" -#endif -#if TOGGLEFULLSCREEN_PATCH #include "togglefullscreen.h" -#endif -#if TRANSFER_PATCH -#include "transfer.h" -#endif -#if TRANSFER_ALL_PATCH -#include "transferall.h" -#endif -#if UNFLOATVISIBLE_PATCH -#include "unfloatvisible.h" -#endif -#if VANITYGAPS_PATCH #include "vanitygaps.h" -#endif -#if WARP_PATCH -#include "warp.h" -#endif -#if WINVIEW_PATCH #include "winview.h" -#endif -#if ZOOMSWAP_PATCH -#include "zoomswap.h" -#endif -#if XRDB_PATCH && !BAR_VTCOLORS_PATCH -#include "xrdb.h" -#endif /* Layouts */ -#if BSTACK_LAYOUT -#include "layout_bstack.h" -#endif -#if BSTACKHORIZ_LAYOUT -#include "layout_bstackhoriz.h" -#endif -#if CENTEREDMASTER_LAYOUT #include "layout_centeredmaster.h" -#endif -#if CENTEREDFLOATINGMASTER_LAYOUT #include "layout_centeredfloatingmaster.h" -#endif -#if COLUMNS_LAYOUT -#include "layout_columns.h" -#endif -#if DECK_LAYOUT #include "layout_deck.h" -#endif -#if FIBONACCI_DWINDLE_LAYOUT || FIBONACCI_SPIRAL_LAYOUT #include "layout_fibonacci.h" -#endif -#if FLEXTILE_DELUXE_LAYOUT -#include "layout_flextile-deluxe.h" -#endif -#if GAPPLESSGRID_LAYOUT -#include "layout_gapplessgrid.h" -#endif -#if GRIDMODE_LAYOUT #include "layout_grid.h" -#endif -#if HORIZGRID_LAYOUT -#include "layout_horizgrid.h" -#endif -#if MONOCLE_LAYOUT #include "layout_monocle.h" -#endif -#if NROWGRID_LAYOUT -#include "layout_nrowgrid.h" -#endif -#if TILE_LAYOUT #include "layout_tile.h" -#endif diff --git a/suckless/dwm/patch/inplacerotate.c b/suckless/dwm/patch/inplacerotate.c deleted file mode 100644 index 28eb2891..00000000 --- a/suckless/dwm/patch/inplacerotate.c +++ /dev/null @@ -1,53 +0,0 @@ -void -insertclient(Client *item, Client *insertItem, int after) -{ - Client *c; - if (item == NULL || insertItem == NULL || item == insertItem) return; - detach(insertItem); - if (!after && selmon->clients == item) { - attach(insertItem); - return; - } - if (after) { - c = item; - } else { - for (c = selmon->clients; c; c = c->next) { if (c->next == item) break; } - } - insertItem->next = c->next; - c->next = insertItem; -} - -void -inplacerotate(const Arg *arg) -{ - if (!selmon->sel || (selmon->sel->isfloating && !arg->f)) return; - - unsigned int selidx = 0, i = 0; - Client *c = NULL, *stail = NULL, *mhead = NULL, *mtail = NULL, *shead = NULL; - - // Shift client - for (c = selmon->clients; c; c = c->next) { - if (ISVISIBLE(c) && !(c->isfloating)) { - if (selmon->sel == c) { selidx = i; } - if (i == selmon->nmaster - 1) { mtail = c; } - if (i == selmon->nmaster) { shead = c; } - if (mhead == NULL) { mhead = c; } - stail = c; - i++; - } - } - if (arg->i < 0 && selidx >= selmon->nmaster) insertclient(stail, shead, 1); - if (arg->i > 0 && selidx >= selmon->nmaster) insertclient(shead, stail, 0); - if (arg->i < 0 && selidx < selmon->nmaster) insertclient(mtail, mhead, 1); - if (arg->i > 0 && selidx < selmon->nmaster) insertclient(mhead, mtail, 0); - - // Restore focus position - i = 0; - for (c = selmon->clients; c; c = c->next) { - if (!ISVISIBLE(c) || (c->isfloating)) continue; - if (i == selidx) { focus(c); break; } - i++; - } - arrange(selmon); - focus(c); -} \ No newline at end of file diff --git a/suckless/dwm/patch/inplacerotate.h b/suckless/dwm/patch/inplacerotate.h deleted file mode 100644 index 2767ad12..00000000 --- a/suckless/dwm/patch/inplacerotate.h +++ /dev/null @@ -1 +0,0 @@ -static void inplacerotate(const Arg *arg); \ No newline at end of file diff --git a/suckless/dwm/patch/insets.c b/suckless/dwm/patch/insets.c deleted file mode 100644 index c0836cf1..00000000 --- a/suckless/dwm/patch/insets.c +++ /dev/null @@ -1,18 +0,0 @@ -void -setinset(Monitor *m, Inset inset) -{ - Bar *bar; - m->inset = inset; - updatebarpos(m); - for (bar = m->bar; bar; bar = bar->next) - XMoveResizeWindow(dpy, bar->win, bar->bx, bar->by, bar->bw, bar->bh); - arrange(m); -} - -void -updateinset(const Arg *arg) -{ - Inset *inset = (Inset *)arg->v; - for (Monitor *m = mons; m; m = m->next) - setinset(m, *inset); -} \ No newline at end of file diff --git a/suckless/dwm/patch/insets.h b/suckless/dwm/patch/insets.h deleted file mode 100644 index ab76278c..00000000 --- a/suckless/dwm/patch/insets.h +++ /dev/null @@ -1,2 +0,0 @@ -static void setinset(Monitor *m, Inset inset); -static void updateinset(const Arg *arg); \ No newline at end of file diff --git a/suckless/dwm/patch/ipc.c b/suckless/dwm/patch/ipc.c deleted file mode 100644 index e863afc9..00000000 --- a/suckless/dwm/patch/ipc.c +++ /dev/null @@ -1,101 +0,0 @@ -static int epoll_fd; -static int dpy_fd; -static Monitor *lastselmon; - -int -handlexevent(struct epoll_event *ev) -{ - if (ev->events & EPOLLIN) { - XEvent ev; - while (running && XPending(dpy)) { - XNextEvent(dpy, &ev); - if (handler[ev.type]) { - handler[ev.type](&ev); /* call handler */ - ipc_send_events(mons, &lastselmon, selmon); - } - } - } else if (ev-> events & EPOLLHUP) - return -1; - - return 0; -} - -void -setlayoutsafe(const Arg *arg) -{ - const Layout *ltptr = (Layout *)arg->v; - if (ltptr == 0) - setlayout(arg); - for (int i = 0; i < LENGTH(layouts); i++) { - if (ltptr == &layouts[i]) - setlayout(arg); - } -} - -void -setupepoll(void) -{ - epoll_fd = epoll_create1(0); - dpy_fd = ConnectionNumber(dpy); - struct epoll_event dpy_event; - - // Initialize struct to 0 - memset(&dpy_event, 0, sizeof(dpy_event)); - - DEBUG("Display socket is fd %d\n", dpy_fd); - - if (epoll_fd == -1) - fputs("Failed to create epoll file descriptor", stderr); - - dpy_event.events = EPOLLIN; - dpy_event.data.fd = dpy_fd; - if (epoll_ctl(epoll_fd, EPOLL_CTL_ADD, dpy_fd, &dpy_event)) { - fputs("Failed to add display file descriptor to epoll", stderr); - close(epoll_fd); - exit(1); - } - - if (ipc_init(ipcsockpath, epoll_fd, ipccommands, LENGTH(ipccommands)) < 0) - fputs("Failed to initialize IPC\n", stderr); -} - -void -setstatus(const Arg *arg) -{ - Monitor *m; - #if BAR_EXTRASTATUS_PATCH - if (arg->v == NULL) { - strcpy(stext, "dwm-"VERSION); - estext[0] = '\0'; - } else { - strcpy(rawstext, arg->v); - char *e = strchr(rawstext, statussep); - if (e) { - *e = '\0'; e++; - #if BAR_STATUSCMD_PATCH - strncpy(rawestext, e, sizeof(estext) - 1); - copyvalidchars(estext, rawestext); - #else - strncpy(estext, e, sizeof(estext) - 1); - #endif // BAR_STATUSCMD_PATCH - } else { - estext[0] = '\0'; - } - #if BAR_STATUSCMD_PATCH - copyvalidchars(stext, rawstext); - #else - strncpy(stext, rawstext, sizeof(stext) - 1); - #endif // BAR_STATUSCMD_PATCH - } - #elif BAR_STATUSCMD_PATCH - if (!gettextprop(root, XA_WM_NAME, rawstext, sizeof(rawstext))) - strcpy(stext, "dwm-"VERSION); - else - copyvalidchars(stext, rawstext); - #else - if (!gettextprop(root, XA_WM_NAME, stext, sizeof(stext))) - strcpy(stext, "dwm-"VERSION); - #endif // BAR_EXTRASTATUS_PATCH | BAR_STATUSCMD_PATCH - for (m = mons; m; m = m->next) - drawbar(m); -} \ No newline at end of file diff --git a/suckless/dwm/patch/ipc.h b/suckless/dwm/patch/ipc.h deleted file mode 100644 index a07a42f0..00000000 --- a/suckless/dwm/patch/ipc.h +++ /dev/null @@ -1,6 +0,0 @@ -#include - -static int handlexevent(struct epoll_event *ev); -static void setlayoutsafe(const Arg *arg); -static void setupepoll(void); -static void setstatus(const Arg *arg); \ No newline at end of file diff --git a/suckless/dwm/patch/ipc/IPCClient.c b/suckless/dwm/patch/ipc/IPCClient.c deleted file mode 100644 index 0d3eefb0..00000000 --- a/suckless/dwm/patch/ipc/IPCClient.c +++ /dev/null @@ -1,66 +0,0 @@ -#include "IPCClient.h" - -#include -#include - -#include "util.h" - -IPCClient * -ipc_client_new(int fd) -{ - IPCClient *c = (IPCClient *)malloc(sizeof(IPCClient)); - - if (c == NULL) return NULL; - - // Initialize struct - memset(&c->event, 0, sizeof(struct epoll_event)); - - c->buffer_size = 0; - c->buffer = NULL; - c->fd = fd; - c->event.data.fd = fd; - c->next = NULL; - c->prev = NULL; - c->subscriptions = 0; - - return c; -} - -void -ipc_list_add_client(IPCClientList *list, IPCClient *nc) -{ - DEBUG("Adding client with fd %d to list\n", nc->fd); - - if (*list == NULL) { - // List is empty, point list at first client - *list = nc; - } else { - IPCClient *c; - // Go to last client in list - for (c = *list; c && c->next; c = c->next) - ; - c->next = nc; - nc->prev = c; - } -} - -void -ipc_list_remove_client(IPCClientList *list, IPCClient *c) -{ - IPCClient *cprev = c->prev; - IPCClient *cnext = c->next; - - if (cprev != NULL) cprev->next = c->next; - if (cnext != NULL) cnext->prev = c->prev; - if (c == *list) *list = c->next; -} - -IPCClient * -ipc_list_get_client(IPCClientList list, int fd) -{ - for (IPCClient *c = list; c; c = c->next) { - if (c->fd == fd) return c; - } - - return NULL; -} diff --git a/suckless/dwm/patch/ipc/ipc.c b/suckless/dwm/patch/ipc/ipc.c deleted file mode 100644 index 0cc76a73..00000000 --- a/suckless/dwm/patch/ipc/ipc.c +++ /dev/null @@ -1,1201 +0,0 @@ -#include "ipc.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "util.h" -#include "yajl_dumps.h" - -static struct sockaddr_un sockaddr; -static struct epoll_event sock_epoll_event; -static IPCClientList ipc_clients = NULL; -static int epoll_fd = -1; -static int sock_fd = -1; -static IPCCommand *ipc_commands; -static unsigned int ipc_commands_len; -// Max size is 1 MB -static const uint32_t MAX_MESSAGE_SIZE = 1000000; -static const int IPC_SOCKET_BACKLOG = 5; - -/** - * Create IPC socket at specified path and return file descriptor to socket. - * This initializes the static variable sockaddr. - */ -static int -ipc_create_socket(const char *filename) -{ - char *normal_filename; - char *parent; - const size_t addr_size = sizeof(struct sockaddr_un); - const int sock_type = SOCK_STREAM | SOCK_NONBLOCK | SOCK_CLOEXEC; - - normalizepath(filename, &normal_filename); - - // In case socket file exists - unlink(normal_filename); - - // For portability clear the addr structure, since some implementations have - // nonstandard fields in the structure - memset(&sockaddr, 0, addr_size); - - parentdir(normal_filename, &parent); - // Create parent directories - mkdirp(parent); - free(parent); - - sockaddr.sun_family = AF_LOCAL; - strcpy(sockaddr.sun_path, normal_filename); - free(normal_filename); - - sock_fd = socket(AF_LOCAL, sock_type, 0); - if (sock_fd == -1) { - fputs("Failed to create socket\n", stderr); - return -1; - } - - DEBUG("Created socket at %s\n", sockaddr.sun_path); - - if (bind(sock_fd, (const struct sockaddr *)&sockaddr, addr_size) == -1) { - fputs("Failed to bind socket\n", stderr); - return -1; - } - - DEBUG("Socket binded\n"); - - if (listen(sock_fd, IPC_SOCKET_BACKLOG) < 0) { - fputs("Failed to listen for connections on socket\n", stderr); - return -1; - } - - DEBUG("Now listening for connections on socket\n"); - - return sock_fd; -} - -/** - * Internal function used to receive IPC messages from a given file descriptor. - * - * Returns -1 on error reading (could be EAGAIN or EINTR) - * Returns -2 if EOF before header could be read - * Returns -3 if invalid IPC header - * Returns -4 if message length exceeds MAX_MESSAGE_SIZE - */ -static int -ipc_recv_message(int fd, uint8_t *msg_type, uint32_t *reply_size, - uint8_t **reply) -{ - uint32_t read_bytes = 0; - const int32_t to_read = sizeof(dwm_ipc_header_t); - char header[to_read]; - char *walk = header; - - // Try to read header - while (read_bytes < to_read) { - const ssize_t n = read(fd, header + read_bytes, to_read - read_bytes); - - if (n == 0) { - if (read_bytes == 0) { - fprintf(stderr, "Unexpectedly reached EOF while reading header."); - fprintf(stderr, - "Read %" PRIu32 " bytes, expected %" PRIu32 " total bytes.\n", - read_bytes, to_read); - return -2; - } else { - fprintf(stderr, "Unexpectedly reached EOF while reading header."); - fprintf(stderr, - "Read %" PRIu32 " bytes, expected %" PRIu32 " total bytes.\n", - read_bytes, to_read); - return -3; - } - } else if (n == -1) { - // errno will still be set - return -1; - } - - read_bytes += n; - } - - // Check if magic string in header matches - if (memcmp(walk, IPC_MAGIC, IPC_MAGIC_LEN) != 0) { - fprintf(stderr, "Invalid magic string. Got '%.*s', expected '%s'\n", - IPC_MAGIC_LEN, walk, IPC_MAGIC); - return -3; - } - - walk += IPC_MAGIC_LEN; - - // Extract reply size - memcpy(reply_size, walk, sizeof(uint32_t)); - walk += sizeof(uint32_t); - - if (*reply_size > MAX_MESSAGE_SIZE) { - fprintf(stderr, "Message too long: %" PRIu32 " bytes. ", *reply_size); - fprintf(stderr, "Maximum message size is: %d\n", MAX_MESSAGE_SIZE); - return -4; - } - - // Extract message type - memcpy(msg_type, walk, sizeof(uint8_t)); - walk += sizeof(uint8_t); - - if (*reply_size > 0) - (*reply) = malloc(*reply_size); - else - return 0; - - read_bytes = 0; - while (read_bytes < *reply_size) { - const ssize_t n = read(fd, *reply + read_bytes, *reply_size - read_bytes); - - if (n == 0) { - fprintf(stderr, "Unexpectedly reached EOF while reading payload."); - fprintf(stderr, "Read %" PRIu32 " bytes, expected %" PRIu32 " bytes.\n", - read_bytes, *reply_size); - free(*reply); - return -2; - } else if (n == -1) { - // TODO: Should we return and wait for another epoll event? - // This would require saving the partial read in some way. - if (errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK) continue; - - free(*reply); - return -1; - } - - read_bytes += n; - } - - return 0; -} - -/** - * Internal function used to write a buffer to a file descriptor - * - * Returns number of bytes written if successful write - * Returns 0 if no bytes were written due to EAGAIN or EWOULDBLOCK - * Returns -1 on unknown error trying to write, errno will carry over from - * write() call - */ -static ssize_t -ipc_write_message(int fd, const void *buf, size_t count) -{ - size_t written = 0; - - while (written < count) { - const ssize_t n = write(fd, (uint8_t *)buf + written, count - written); - - if (n == -1) { - if (errno == EAGAIN || errno == EWOULDBLOCK) - return written; - else if (errno == EINTR) - continue; - else - return n; - } - - written += n; - DEBUG("Wrote %zu/%zu to client at fd %d\n", written, count, fd); - } - - return written; -} - -/** - * Initialization for generic event message. This is used to allocate the yajl - * handle, set yajl options, and in the future any other initialization that - * should occur for event messages. - */ -static void -ipc_event_init_message(yajl_gen *gen) -{ - *gen = yajl_gen_alloc(NULL); - yajl_gen_config(*gen, yajl_gen_beautify, 1); -} - -/** - * Prepares buffers of IPC subscribers of specified event using buffer from yajl - * handle. - */ -static void -ipc_event_prepare_send_message(yajl_gen gen, IPCEvent event) -{ - const unsigned char *buffer; - size_t len = 0; - - yajl_gen_get_buf(gen, &buffer, &len); - len++; // For null char - - for (IPCClient *c = ipc_clients; c; c = c->next) { - if (c->subscriptions & event) { - DEBUG("Sending selected client change event to fd %d\n", c->fd); - ipc_prepare_send_message(c, IPC_TYPE_EVENT, len, (char *)buffer); - } - } - - // Not documented, but this frees temp_buffer - yajl_gen_free(gen); -} - -/** - * Initialization for generic reply message. This is used to allocate the yajl - * handle, set yajl options, and in the future any other initialization that - * should occur for reply messages. - */ -static void -ipc_reply_init_message(yajl_gen *gen) -{ - *gen = yajl_gen_alloc(NULL); - yajl_gen_config(*gen, yajl_gen_beautify, 1); -} - -/** - * Prepares the IPC client's buffer with a message using the buffer of the yajl - * handle. - */ -static void -ipc_reply_prepare_send_message(yajl_gen gen, IPCClient *c, - IPCMessageType msg_type) -{ - const unsigned char *buffer; - size_t len = 0; - - yajl_gen_get_buf(gen, &buffer, &len); - len++; // For null char - - ipc_prepare_send_message(c, msg_type, len, (const char *)buffer); - - // Not documented, but this frees temp_buffer - yajl_gen_free(gen); -} - -/** - * Find the IPCCommand with the specified name - * - * Returns 0 if a command with the specified name was found - * Returns -1 if a command with the specified name could not be found - */ -static int -ipc_get_ipc_command(const char *name, IPCCommand *ipc_command) -{ - for (int i = 0; i < ipc_commands_len; i++) { - if (strcmp(ipc_commands[i].name, name) == 0) { - *ipc_command = ipc_commands[i]; - return 0; - } - } - - return -1; -} - -/** - * Parse a IPC_TYPE_RUN_COMMAND message from a client. This function extracts - * the arguments, argument count, argument types, and command name and returns - * the parsed information as an IPCParsedCommand. If this function returns - * successfully, the parsed_command must be freed using - * ipc_free_parsed_command_members. - * - * Returns 0 if the message was successfully parsed - * Returns -1 otherwise - */ -static int -ipc_parse_run_command(char *msg, IPCParsedCommand *parsed_command) -{ - char error_buffer[1000]; - yajl_val parent = yajl_tree_parse(msg, error_buffer, 1000); - - if (parent == NULL) { - fputs("Failed to parse command from client\n", stderr); - fprintf(stderr, "%s\n", error_buffer); - fprintf(stderr, "Tried to parse: %s\n", msg); - return -1; - } - - // Format: - // { - // "command": "" - // "args": [ "arg1", "arg2", ... ] - // } - const char *command_path[] = {"command", 0}; - yajl_val command_val = yajl_tree_get(parent, command_path, yajl_t_string); - - if (command_val == NULL) { - fputs("No command key found in client message\n", stderr); - yajl_tree_free(parent); - return -1; - } - - const char *command_name = YAJL_GET_STRING(command_val); - size_t command_name_len = strlen(command_name); - parsed_command->name = (char *)malloc((command_name_len + 1) * sizeof(char)); - strcpy(parsed_command->name, command_name); - - DEBUG("Received command: %s\n", parsed_command->name); - - const char *args_path[] = {"args", 0}; - yajl_val args_val = yajl_tree_get(parent, args_path, yajl_t_array); - - if (args_val == NULL) { - fputs("No args key found in client message\n", stderr); - yajl_tree_free(parent); - return -1; - } - - unsigned int *argc = &parsed_command->argc; - Arg **args = &parsed_command->args; - ArgType **arg_types = &parsed_command->arg_types; - - *argc = args_val->u.array.len; - - // If no arguments are specified, make a dummy argument to pass to the - // function. This is just the way dwm's void(Arg*) functions are setup. - if (*argc == 0) { - *args = (Arg *)malloc(sizeof(Arg)); - *arg_types = (ArgType *)malloc(sizeof(ArgType)); - (*arg_types)[0] = ARG_TYPE_NONE; - (*args)[0].f = 0; - (*argc)++; - } else if (*argc > 0) { - *args = (Arg *)calloc(*argc, sizeof(Arg)); - *arg_types = (ArgType *)malloc(*argc * sizeof(ArgType)); - - for (int i = 0; i < *argc; i++) { - yajl_val arg_val = args_val->u.array.values[i]; - - if (YAJL_IS_NUMBER(arg_val)) { - if (YAJL_IS_INTEGER(arg_val)) { - // Any values below 0 must be a signed int - if (YAJL_GET_INTEGER(arg_val) < 0) { - (*args)[i].i = YAJL_GET_INTEGER(arg_val); - (*arg_types)[i] = ARG_TYPE_SINT; - DEBUG("i=%ld\n", (*args)[i].i); - // Any values above 0 should be an unsigned int - } else if (YAJL_GET_INTEGER(arg_val) >= 0) { - (*args)[i].ui = YAJL_GET_INTEGER(arg_val); - (*arg_types)[i] = ARG_TYPE_UINT; - DEBUG("ui=%ld\n", (*args)[i].i); - } - // If the number is not an integer, it must be a float - } else { - (*args)[i].f = (float)YAJL_GET_DOUBLE(arg_val); - (*arg_types)[i] = ARG_TYPE_FLOAT; - DEBUG("f=%f\n", (*args)[i].f); - // If argument is not a number, it must be a string - } - } else if (YAJL_IS_STRING(arg_val)) { - char *arg_s = YAJL_GET_STRING(arg_val); - size_t arg_s_size = (strlen(arg_s) + 1) * sizeof(char); - (*args)[i].v = (char *)malloc(arg_s_size); - (*arg_types)[i] = ARG_TYPE_STR; - strcpy((char *)(*args)[i].v, arg_s); - } - } - } - - yajl_tree_free(parent); - - return 0; -} - -/** - * Free the members of a IPCParsedCommand struct - */ -static void -ipc_free_parsed_command_members(IPCParsedCommand *command) -{ - for (int i = 0; i < command->argc; i++) { - if (command->arg_types[i] == ARG_TYPE_STR) free((void *)command->args[i].v); - } - free(command->args); - free(command->arg_types); - free(command->name); -} - -/** - * Check if the given arguments are the correct length and type. Also do any - * casting to correct the types. - * - * Returns 0 if the arguments were the correct length and types - * Returns -1 if the argument count doesn't match - * Returns -2 if the argument types don't match - */ -static int -ipc_validate_run_command(IPCParsedCommand *parsed, const IPCCommand actual) -{ - if (actual.argc != parsed->argc) return -1; - - for (int i = 0; i < parsed->argc; i++) { - ArgType ptype = parsed->arg_types[i]; - ArgType atype = actual.arg_types[i]; - - if (ptype != atype) { - if (ptype == ARG_TYPE_UINT && atype == ARG_TYPE_PTR) - // If this argument is supposed to be a void pointer, cast it - parsed->args[i].v = (void *)parsed->args[i].ui; - else if (ptype == ARG_TYPE_UINT && atype == ARG_TYPE_SINT) - // If this argument is supposed to be a signed int, cast it - parsed->args[i].i = parsed->args[i].ui; - else - return -2; - } - } - - return 0; -} - -/** - * Convert event name to their IPCEvent equivalent enum value - * - * Returns 0 if a valid event name was given - * Returns -1 otherwise - */ -static int -ipc_event_stoi(const char *subscription, IPCEvent *event) -{ - if (strcmp(subscription, "tag_change_event") == 0) - *event = IPC_EVENT_TAG_CHANGE; - else if (strcmp(subscription, "client_focus_change_event") == 0) - *event = IPC_EVENT_CLIENT_FOCUS_CHANGE; - else if (strcmp(subscription, "layout_change_event") == 0) - *event = IPC_EVENT_LAYOUT_CHANGE; - else if (strcmp(subscription, "monitor_focus_change_event") == 0) - *event = IPC_EVENT_MONITOR_FOCUS_CHANGE; - else if (strcmp(subscription, "focused_title_change_event") == 0) - *event = IPC_EVENT_FOCUSED_TITLE_CHANGE; - else if (strcmp(subscription, "focused_state_change_event") == 0) - *event = IPC_EVENT_FOCUSED_STATE_CHANGE; - else - return -1; - return 0; -} - -/** - * Parse a IPC_TYPE_SUBSCRIBE message from a client. This function extracts the - * event name and the subscription action from the message. - * - * Returns 0 if message was successfully parsed - * Returns -1 otherwise - */ -static int -ipc_parse_subscribe(const char *msg, IPCSubscriptionAction *subscribe, - IPCEvent *event) -{ - char error_buffer[100]; - yajl_val parent = yajl_tree_parse((char *)msg, error_buffer, 100); - - if (parent == NULL) { - fputs("Failed to parse command from client\n", stderr); - fprintf(stderr, "%s\n", error_buffer); - return -1; - } - - // Format: - // { - // "event": "" - // "action": "" - // } - const char *event_path[] = {"event", 0}; - yajl_val event_val = yajl_tree_get(parent, event_path, yajl_t_string); - - if (event_val == NULL) { - fputs("No 'event' key found in client message\n", stderr); - return -1; - } - - const char *event_str = YAJL_GET_STRING(event_val); - DEBUG("Received event: %s\n", event_str); - - if (ipc_event_stoi(event_str, event) < 0) return -1; - - const char *action_path[] = {"action", 0}; - yajl_val action_val = yajl_tree_get(parent, action_path, yajl_t_string); - - if (action_val == NULL) { - fputs("No 'action' key found in client message\n", stderr); - return -1; - } - - const char *action = YAJL_GET_STRING(action_val); - - if (strcmp(action, "subscribe") == 0) - *subscribe = IPC_ACTION_SUBSCRIBE; - else if (strcmp(action, "unsubscribe") == 0) - *subscribe = IPC_ACTION_UNSUBSCRIBE; - else { - fputs("Invalid action specified for subscription\n", stderr); - return -1; - } - - yajl_tree_free(parent); - - return 0; -} - -/** - * Parse an IPC_TYPE_GET_DWM_CLIENT message from a client. This function - * extracts the window id from the message. - * - * Returns 0 if message was successfully parsed - * Returns -1 otherwise - */ -static int -ipc_parse_get_dwm_client(const char *msg, Window *win) -{ - char error_buffer[100]; - - yajl_val parent = yajl_tree_parse(msg, error_buffer, 100); - - if (parent == NULL) { - fputs("Failed to parse message from client\n", stderr); - fprintf(stderr, "%s\n", error_buffer); - return -1; - } - - // Format: - // { - // "client_window_id": - // } - const char *win_path[] = {"client_window_id", 0}; - yajl_val win_val = yajl_tree_get(parent, win_path, yajl_t_number); - - if (win_val == NULL) { - fputs("No client window id found in client message\n", stderr); - return -1; - } - - *win = YAJL_GET_INTEGER(win_val); - - yajl_tree_free(parent); - - return 0; -} - -/** - * Called when an IPC_TYPE_RUN_COMMAND message is received from a client. This - * function parses, executes the given command, and prepares a reply message to - * the client indicating success/failure. - * - * NOTE: There is currently no check for argument validity beyond the number of - * arguments given and types of arguments. There is also no way to check if the - * function succeeded based on dwm's void(const Arg*) function types. Pointer - * arguments can cause crashes if they are not validated in the function itself. - * - * Returns 0 if message was successfully parsed - * Returns -1 on failure parsing message - */ -static int -ipc_run_command(IPCClient *ipc_client, char *msg) -{ - IPCParsedCommand parsed_command; - IPCCommand ipc_command; - - // Initialize struct - memset(&parsed_command, 0, sizeof(IPCParsedCommand)); - - if (ipc_parse_run_command(msg, &parsed_command) < 0) { - ipc_prepare_reply_failure(ipc_client, IPC_TYPE_RUN_COMMAND, - "Failed to parse run command"); - return -1; - } - - if (ipc_get_ipc_command(parsed_command.name, &ipc_command) < 0) { - ipc_prepare_reply_failure(ipc_client, IPC_TYPE_RUN_COMMAND, - "Command %s not found", parsed_command.name); - ipc_free_parsed_command_members(&parsed_command); - return -1; - } - - int res = ipc_validate_run_command(&parsed_command, ipc_command); - if (res < 0) { - if (res == -1) - ipc_prepare_reply_failure(ipc_client, IPC_TYPE_RUN_COMMAND, - "%u arguments provided, %u expected", - parsed_command.argc, ipc_command.argc); - else if (res == -2) - ipc_prepare_reply_failure(ipc_client, IPC_TYPE_RUN_COMMAND, - "Type mismatch"); - ipc_free_parsed_command_members(&parsed_command); - return -1; - } - - if (parsed_command.argc == 1) - ipc_command.func.single_param(parsed_command.args); - else if (parsed_command.argc > 1) - ipc_command.func.array_param(parsed_command.args, parsed_command.argc); - - DEBUG("Called function for command %s\n", parsed_command.name); - - ipc_free_parsed_command_members(&parsed_command); - - ipc_prepare_reply_success(ipc_client, IPC_TYPE_RUN_COMMAND); - return 0; -} - -/** - * Called when an IPC_TYPE_GET_MONITORS message is received from a client. It - * prepares a reply with the properties of all of the monitors in JSON. - */ -static void -ipc_get_monitors(IPCClient *c, Monitor *mons, Monitor *selmon) -{ - yajl_gen gen; - ipc_reply_init_message(&gen); - dump_monitors(gen, mons, selmon); - - ipc_reply_prepare_send_message(gen, c, IPC_TYPE_GET_MONITORS); -} - -/** - * Called when an IPC_TYPE_GET_TAGS message is received from a client. It - * prepares a reply with info about all the tags in JSON. - */ -static void -ipc_get_tags(IPCClient *c, const int tags_len) -{ - yajl_gen gen; - ipc_reply_init_message(&gen); - - dump_tags(gen, tags_len); - - ipc_reply_prepare_send_message(gen, c, IPC_TYPE_GET_TAGS); -} - -/** - * Called when an IPC_TYPE_GET_LAYOUTS message is received from a client. It - * prepares a reply with a JSON array of available layouts - */ -static void -ipc_get_layouts(IPCClient *c, const Layout layouts[], const int layouts_len) -{ - yajl_gen gen; - ipc_reply_init_message(&gen); - - dump_layouts(gen, layouts, layouts_len); - - ipc_reply_prepare_send_message(gen, c, IPC_TYPE_GET_LAYOUTS); -} - -/** - * Called when an IPC_TYPE_GET_DWM_CLIENT message is received from a client. It - * prepares a JSON reply with the properties of the client with the specified - * window XID. - * - * Returns 0 if the message was successfully parsed and if the client with the - * specified window XID was found - * Returns -1 if the message could not be parsed - */ -static int -ipc_get_dwm_client(IPCClient *ipc_client, const char *msg, const Monitor *mons) -{ - Window win; - - if (ipc_parse_get_dwm_client(msg, &win) < 0) return -1; - - // Find client with specified window XID - for (const Monitor *m = mons; m; m = m->next) - for (Client *c = m->clients; c; c = c->next) - if (c->win == win) { - yajl_gen gen; - ipc_reply_init_message(&gen); - - dump_client(gen, c); - - ipc_reply_prepare_send_message(gen, ipc_client, - IPC_TYPE_GET_DWM_CLIENT); - - return 0; - } - - ipc_prepare_reply_failure(ipc_client, IPC_TYPE_GET_DWM_CLIENT, - "Client with window id %d not found", win); - return -1; -} - -/** - * Called when an IPC_TYPE_SUBSCRIBE message is received from a client. It - * subscribes/unsubscribes the client from the specified event and replies with - * the result. - * - * Returns 0 if the message was successfully parsed. - * Returns -1 if the message could not be parsed - */ -static int -ipc_subscribe(IPCClient *c, const char *msg) -{ - IPCSubscriptionAction action = IPC_ACTION_SUBSCRIBE; - IPCEvent event = 0; - - if (ipc_parse_subscribe(msg, &action, &event)) { - ipc_prepare_reply_failure(c, IPC_TYPE_SUBSCRIBE, "Event does not exist"); - return -1; - } - - if (action == IPC_ACTION_SUBSCRIBE) { - DEBUG("Subscribing client on fd %d to %d\n", c->fd, event); - c->subscriptions |= event; - } else if (action == IPC_ACTION_UNSUBSCRIBE) { - DEBUG("Unsubscribing client on fd %d to %d\n", c->fd, event); - c->subscriptions ^= event; - } else { - ipc_prepare_reply_failure(c, IPC_TYPE_SUBSCRIBE, - "Invalid subscription action"); - return -1; - } - - ipc_prepare_reply_success(c, IPC_TYPE_SUBSCRIBE); - return 0; -} - -int -ipc_init(const char *socket_path, const int p_epoll_fd, IPCCommand commands[], - const int commands_len) -{ - // Initialize struct to 0 - memset(&sock_epoll_event, 0, sizeof(sock_epoll_event)); - - int socket_fd = ipc_create_socket(socket_path); - if (socket_fd < 0) return -1; - - ipc_commands = commands; - ipc_commands_len = commands_len; - - epoll_fd = p_epoll_fd; - - // Wake up to incoming connection requests - sock_epoll_event.data.fd = socket_fd; - sock_epoll_event.events = EPOLLIN; - if (epoll_ctl(epoll_fd, EPOLL_CTL_ADD, socket_fd, &sock_epoll_event)) { - fputs("Failed to add sock file descriptor to epoll", stderr); - return -1; - } - - return socket_fd; -} - -void -ipc_cleanup() -{ - IPCClient *c = ipc_clients; - // Free clients and their buffers - while (c) { - ipc_drop_client(c); - c = ipc_clients; - } - - // Stop waking up for socket events - epoll_ctl(epoll_fd, EPOLL_CTL_DEL, sock_fd, &sock_epoll_event); - - // Uninitialize all static variables - epoll_fd = -1; - sock_fd = -1; - ipc_commands = NULL; - ipc_commands_len = 0; - memset(&sock_epoll_event, 0, sizeof(struct epoll_event)); - memset(&sockaddr, 0, sizeof(struct sockaddr_un)); - - // Delete socket - unlink(sockaddr.sun_path); - - shutdown(sock_fd, SHUT_RDWR); - close(sock_fd); -} - -int -ipc_get_sock_fd() -{ - return sock_fd; -} - -IPCClient * -ipc_get_client(int fd) -{ - return ipc_list_get_client(ipc_clients, fd); -} - -int -ipc_is_client_registered(int fd) -{ - return (ipc_get_client(fd) != NULL); -} - -int -ipc_accept_client() -{ - int fd = -1; - - struct sockaddr_un client_addr; - socklen_t len = 0; - - // For portability clear the addr structure, since some implementations - // have nonstandard fields in the structure - memset(&client_addr, 0, sizeof(struct sockaddr_un)); - - fd = accept(sock_fd, (struct sockaddr *)&client_addr, &len); - if (fd < 0 && errno != EINTR) { - fputs("Failed to accept IPC connection from client", stderr); - return -1; - } - - if (fcntl(fd, F_SETFD, FD_CLOEXEC) < 0) { - shutdown(fd, SHUT_RDWR); - close(fd); - fputs("Failed to set flags on new client fd", stderr); - } - - IPCClient *nc = ipc_client_new(fd); - if (nc == NULL) return -1; - - // Wake up to messages from this client - nc->event.data.fd = fd; - nc->event.events = EPOLLIN | EPOLLHUP; - epoll_ctl(epoll_fd, EPOLL_CTL_ADD, fd, &nc->event); - - ipc_list_add_client(&ipc_clients, nc); - - DEBUG("%s%d\n", "New client at fd: ", fd); - - return fd; -} - -int -ipc_drop_client(IPCClient *c) -{ - int fd = c->fd; - shutdown(fd, SHUT_RDWR); - int res = close(fd); - - if (res == 0) { - struct epoll_event ev; - - // Stop waking up to messages from this client - epoll_ctl(epoll_fd, EPOLL_CTL_DEL, fd, &ev); - ipc_list_remove_client(&ipc_clients, c); - - free(c->buffer); - free(c); - - DEBUG("Successfully removed client on fd %d\n", fd); - } else if (res < 0 && res != EINTR) { - fprintf(stderr, "Failed to close fd %d\n", fd); - } - - return res; -} - -int -ipc_read_client(IPCClient *c, IPCMessageType *msg_type, uint32_t *msg_size, - char **msg) -{ - int fd = c->fd; - int ret = - ipc_recv_message(fd, (uint8_t *)msg_type, msg_size, (uint8_t **)msg); - - if (ret < 0) { - // This will happen if these errors occur while reading header - if (ret == -1 && - (errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK)) - return -2; - - fprintf(stderr, "Error reading message: dropping client at fd %d\n", fd); - ipc_drop_client(c); - - return -1; - } - - // Make sure receive message is null terminated to avoid parsing issues - if (*msg_size > 0) { - size_t len = *msg_size; - nullterminate(msg, &len); - *msg_size = len; - } - - DEBUG("[fd %d] ", fd); - if (*msg_size > 0) - DEBUG("Received message: '%.*s' ", *msg_size, *msg); - else - DEBUG("Received empty message "); - DEBUG("Message type: %" PRIu8 " ", (uint8_t)*msg_type); - DEBUG("Message size: %" PRIu32 "\n", *msg_size); - - return 0; -} - -ssize_t -ipc_write_client(IPCClient *c) -{ - const ssize_t n = ipc_write_message(c->fd, c->buffer, c->buffer_size); - - if (n < 0) return n; - - // TODO: Deal with client timeouts - - if (n == c->buffer_size) { - c->buffer_size = 0; - free(c->buffer); - // No dangling pointers! - c->buffer = NULL; - // Stop waking up when client is ready to receive messages - if (c->event.events & EPOLLOUT) { - c->event.events -= EPOLLOUT; - epoll_ctl(epoll_fd, EPOLL_CTL_MOD, c->fd, &c->event); - } - return n; - } - - // Shift unwritten buffer to beginning of buffer and reallocate - c->buffer_size -= n; - memmove(c->buffer, c->buffer + n, c->buffer_size); - c->buffer = (char *)realloc(c->buffer, c->buffer_size); - - return n; -} - -void -ipc_prepare_send_message(IPCClient *c, const IPCMessageType msg_type, - const uint32_t msg_size, const char *msg) -{ - dwm_ipc_header_t header = { - .magic = IPC_MAGIC_ARR, .type = msg_type, .size = msg_size}; - - uint32_t header_size = sizeof(dwm_ipc_header_t); - uint32_t packet_size = header_size + msg_size; - - if (c->buffer == NULL) - c->buffer = (char *)malloc(c->buffer_size + packet_size); - else - c->buffer = (char *)realloc(c->buffer, c->buffer_size + packet_size); - - // Copy header to end of client buffer - memcpy(c->buffer + c->buffer_size, &header, header_size); - c->buffer_size += header_size; - - // Copy message to end of client buffer - memcpy(c->buffer + c->buffer_size, msg, msg_size); - c->buffer_size += msg_size; - - // Wake up when client is ready to receive messages - c->event.events |= EPOLLOUT; - epoll_ctl(epoll_fd, EPOLL_CTL_MOD, c->fd, &c->event); -} - -void -ipc_prepare_reply_failure(IPCClient *c, IPCMessageType msg_type, - const char *format, ...) -{ - yajl_gen gen; - va_list args; - - // Get output size - va_start(args, format); - size_t len = vsnprintf(NULL, 0, format, args); - va_end(args); - char *buffer = (char *)malloc((len + 1) * sizeof(char)); - - ipc_reply_init_message(&gen); - - va_start(args, format); - vsnprintf(buffer, len + 1, format, args); - va_end(args); - dump_error_message(gen, buffer); - - ipc_reply_prepare_send_message(gen, c, msg_type); - fprintf(stderr, "[fd %d] Error: %s\n", c->fd, buffer); - - free(buffer); -} - -void -ipc_prepare_reply_success(IPCClient *c, IPCMessageType msg_type) -{ - const char *success_msg = "{\"result\":\"success\"}"; - const size_t msg_len = strlen(success_msg) + 1; // +1 for null char - - ipc_prepare_send_message(c, msg_type, msg_len, success_msg); -} - -void -ipc_tag_change_event(int mon_num, TagState old_state, TagState new_state) -{ - yajl_gen gen; - ipc_event_init_message(&gen); - dump_tag_event(gen, mon_num, old_state, new_state); - ipc_event_prepare_send_message(gen, IPC_EVENT_TAG_CHANGE); -} - -void -ipc_client_focus_change_event(int mon_num, Client *old_client, - Client *new_client) -{ - yajl_gen gen; - ipc_event_init_message(&gen); - dump_client_focus_change_event(gen, old_client, new_client, mon_num); - ipc_event_prepare_send_message(gen, IPC_EVENT_CLIENT_FOCUS_CHANGE); -} - -void -ipc_layout_change_event(const int mon_num, const char *old_symbol, - const Layout *old_layout, const char *new_symbol, - const Layout *new_layout) -{ - yajl_gen gen; - ipc_event_init_message(&gen); - dump_layout_change_event(gen, mon_num, old_symbol, old_layout, new_symbol, - new_layout); - ipc_event_prepare_send_message(gen, IPC_EVENT_LAYOUT_CHANGE); -} - -void -ipc_monitor_focus_change_event(const int last_mon_num, const int new_mon_num) -{ - yajl_gen gen; - ipc_event_init_message(&gen); - dump_monitor_focus_change_event(gen, last_mon_num, new_mon_num); - ipc_event_prepare_send_message(gen, IPC_EVENT_MONITOR_FOCUS_CHANGE); -} - -void -ipc_focused_title_change_event(const int mon_num, const Window client_id, - const char *old_name, const char *new_name) -{ - yajl_gen gen; - ipc_event_init_message(&gen); - dump_focused_title_change_event(gen, mon_num, client_id, old_name, new_name); - ipc_event_prepare_send_message(gen, IPC_EVENT_FOCUSED_TITLE_CHANGE); -} - -void -ipc_focused_state_change_event(const int mon_num, const Window client_id, - const ClientState *old_state, - const ClientState *new_state) -{ - yajl_gen gen; - ipc_event_init_message(&gen); - dump_focused_state_change_event(gen, mon_num, client_id, old_state, - new_state); - ipc_event_prepare_send_message(gen, IPC_EVENT_FOCUSED_STATE_CHANGE); -} - -void -ipc_send_events(Monitor *mons, Monitor **lastselmon, Monitor *selmon) -{ - for (Monitor *m = mons; m; m = m->next) { - unsigned int urg = 0, occ = 0, tagset = 0; - - for (Client *c = m->clients; c; c = c->next) { - occ |= c->tags; - - if (c->isurgent) urg |= c->tags; - } - tagset = m->tagset[m->seltags]; - - TagState new_state = {.selected = tagset, .occupied = occ, .urgent = urg}; - - if (memcmp(&m->tagstate, &new_state, sizeof(TagState)) != 0) { - ipc_tag_change_event(m->num, m->tagstate, new_state); - m->tagstate = new_state; - } - - if (m->lastsel != m->sel) { - ipc_client_focus_change_event(m->num, m->lastsel, m->sel); - m->lastsel = m->sel; - } - - if (strcmp(m->ltsymbol, m->lastltsymbol) != 0 || - m->lastlt != m->lt[m->sellt]) { - ipc_layout_change_event(m->num, m->lastltsymbol, m->lastlt, m->ltsymbol, - m->lt[m->sellt]); - strcpy(m->lastltsymbol, m->ltsymbol); - m->lastlt = m->lt[m->sellt]; - } - - if (*lastselmon != selmon) { - if (*lastselmon != NULL) - ipc_monitor_focus_change_event((*lastselmon)->num, selmon->num); - *lastselmon = selmon; - } - - Client *sel = m->sel; - if (!sel) continue; - ClientState *o = &m->sel->prevstate; - ClientState n = {.oldstate = sel->oldstate, - .isfixed = sel->isfixed, - .isfloating = sel->isfloating, - .isfullscreen = sel->isfullscreen, - .isurgent = sel->isurgent, - .neverfocus = sel->neverfocus}; - if (memcmp(o, &n, sizeof(ClientState)) != 0) { - ipc_focused_state_change_event(m->num, m->sel->win, o, &n); - *o = n; - } - } -} - -int -ipc_handle_client_epoll_event(struct epoll_event *ev, Monitor *mons, - Monitor **lastselmon, Monitor *selmon, const int tags_len, - const Layout *layouts, const int layouts_len) -{ - int fd = ev->data.fd; - IPCClient *c = ipc_get_client(fd); - - if (ev->events & EPOLLHUP) { - DEBUG("EPOLLHUP received from client at fd %d\n", fd); - ipc_drop_client(c); - } else if (ev->events & EPOLLOUT) { - DEBUG("Sending message to client at fd %d...\n", fd); - if (c->buffer_size) ipc_write_client(c); - } else if (ev->events & EPOLLIN) { - IPCMessageType msg_type = 0; - uint32_t msg_size = 0; - char *msg = NULL; - - DEBUG("Received message from fd %d\n", fd); - if (ipc_read_client(c, &msg_type, &msg_size, &msg) < 0) return -1; - - if (msg_type == IPC_TYPE_GET_MONITORS) - ipc_get_monitors(c, mons, selmon); - else if (msg_type == IPC_TYPE_GET_TAGS) - ipc_get_tags(c, tags_len); - else if (msg_type == IPC_TYPE_GET_LAYOUTS) - ipc_get_layouts(c, layouts, layouts_len); - else if (msg_type == IPC_TYPE_RUN_COMMAND) { - if (ipc_run_command(c, msg) < 0) return -1; - ipc_send_events(mons, lastselmon, selmon); - } else if (msg_type == IPC_TYPE_GET_DWM_CLIENT) { - if (ipc_get_dwm_client(c, msg, mons) < 0) return -1; - } else if (msg_type == IPC_TYPE_SUBSCRIBE) { - if (ipc_subscribe(c, msg) < 0) return -1; - } else { - fprintf(stderr, "Invalid message type received from fd %d", fd); - ipc_prepare_reply_failure(c, msg_type, "Invalid message type: %d", - msg_type); - } - free(msg); - } else { - fprintf(stderr, "Epoll event returned %d from fd %d\n", ev->events, fd); - return -1; - } - - return 0; -} - -int -ipc_handle_socket_epoll_event(struct epoll_event *ev) -{ - if (!(ev->events & EPOLLIN)) return -1; - - // EPOLLIN means incoming client connection request - fputs("Received EPOLLIN event on socket\n", stderr); - int new_fd = ipc_accept_client(); - - return new_fd; -} diff --git a/suckless/dwm/patch/ipc/ipc.h b/suckless/dwm/patch/ipc/ipc.h deleted file mode 100644 index 29ec036a..00000000 --- a/suckless/dwm/patch/ipc/ipc.h +++ /dev/null @@ -1,319 +0,0 @@ -#ifndef IPC_H_ -#define IPC_H_ - -#include -#include -#include - -#include "IPCClient.h" - -// clang-format off -#define IPC_MAGIC "DWM-IPC" -#define IPC_MAGIC_ARR { 'D', 'W', 'M', '-', 'I', 'P', 'C'} -#define IPC_MAGIC_LEN 7 // Not including null char - -#define IPCCOMMAND(FUNC, ARGC, TYPES) \ - { #FUNC, {FUNC }, ARGC, (ArgType[ARGC])TYPES } -// clang-format on - -typedef enum IPCMessageType { - IPC_TYPE_RUN_COMMAND = 0, - IPC_TYPE_GET_MONITORS = 1, - IPC_TYPE_GET_TAGS = 2, - IPC_TYPE_GET_LAYOUTS = 3, - IPC_TYPE_GET_DWM_CLIENT = 4, - IPC_TYPE_SUBSCRIBE = 5, - IPC_TYPE_EVENT = 6 -} IPCMessageType; - -typedef enum IPCEvent { - IPC_EVENT_TAG_CHANGE = 1 << 0, - IPC_EVENT_CLIENT_FOCUS_CHANGE = 1 << 1, - IPC_EVENT_LAYOUT_CHANGE = 1 << 2, - IPC_EVENT_MONITOR_FOCUS_CHANGE = 1 << 3, - IPC_EVENT_FOCUSED_TITLE_CHANGE = 1 << 4, - IPC_EVENT_FOCUSED_STATE_CHANGE = 1 << 5 -} IPCEvent; - -typedef enum IPCSubscriptionAction { - IPC_ACTION_UNSUBSCRIBE = 0, - IPC_ACTION_SUBSCRIBE = 1 -} IPCSubscriptionAction; - -/** - * Every IPC packet starts with this structure - */ -typedef struct dwm_ipc_header { - uint8_t magic[IPC_MAGIC_LEN]; - uint32_t size; - uint8_t type; -} __attribute((packed)) dwm_ipc_header_t; - -typedef enum ArgType { - ARG_TYPE_NONE = 0, - ARG_TYPE_UINT = 1, - ARG_TYPE_SINT = 2, - ARG_TYPE_FLOAT = 3, - ARG_TYPE_PTR = 4, - ARG_TYPE_STR = 5 -} ArgType; - -/** - * An IPCCommand function can have either of these function signatures - */ -typedef union ArgFunction { - void (*single_param)(const Arg *); - void (*array_param)(const Arg *, int); -} ArgFunction; - -typedef struct IPCCommand { - char *name; - ArgFunction func; - unsigned int argc; - ArgType *arg_types; -} IPCCommand; - -typedef struct IPCParsedCommand { - char *name; - Arg *args; - ArgType *arg_types; - unsigned int argc; -} IPCParsedCommand; - -/** - * Initialize the IPC socket and the IPC module - * - * @param socket_path Path to create the socket at - * @param epoll_fd File descriptor for epoll - * @param commands Address of IPCCommands array defined in config.h - * @param commands_len Length of commands[] array - * - * @return int The file descriptor of the socket if it was successfully created, - * -1 otherwise - */ -int ipc_init(const char *socket_path, const int p_epoll_fd, - IPCCommand commands[], const int commands_len); - -/** - * Uninitialize the socket and module. Free allocated memory and restore static - * variables to their state before ipc_init - */ -void ipc_cleanup(); - -/** - * Get the file descriptor of the IPC socket - * - * @return int File descriptor of IPC socket, -1 if socket not created. - */ -int ipc_get_sock_fd(); - -/** - * Get address to IPCClient with specified file descriptor - * - * @param fd File descriptor of IPC Client - * - * @return Address to IPCClient with specified file descriptor, -1 otherwise - */ -IPCClient *ipc_get_client(int fd); - -/** - * Check if an IPC client exists with the specified file descriptor - * - * @param fd File descriptor - * - * @return int 1 if client exists, 0 otherwise - */ -int ipc_is_client_registered(int fd); - -/** - * Disconnect an IPCClient from the socket and remove the client from the list - * of known connected clients - * - * @param c Address of IPCClient - * - * @return 0 if the client's file descriptor was closed successfully, the - * result of executing close() on the file descriptor otherwise. - */ -int ipc_drop_client(IPCClient *c); - -/** - * Accept an IPC Client requesting to connect to the socket and add it to the - * list of clients - * - * @return File descriptor of new client, -1 on error - */ -int ipc_accept_client(); - -/** - * Read an incoming message from an accepted IPC client - * - * @param c Address of IPCClient - * @param msg_type Address to IPCMessageType variable which will be assigned - * the message type of the received message - * @param msg_size Address to uint32_t variable which will be assigned the size - * of the received message - * @param msg Address to char* variable which will be assigned the address of - * the received message. This must be freed using free(). - * - * @return 0 on success, -1 on error reading message, -2 if reading the message - * resulted in EAGAIN, EINTR, or EWOULDBLOCK. - */ -int ipc_read_client(IPCClient *c, IPCMessageType *msg_type, uint32_t *msg_size, - char **msg); - -/** - * Write any pending buffer of the client to the client's socket - * - * @param c Client whose buffer to write - * - * @return Number of bytes written >= 0, -1 otherwise. errno will still be set - * from the write operation. - */ -ssize_t ipc_write_client(IPCClient *c); - -/** - * Prepare a message in the specified client's buffer. - * - * @param c Client to prepare message for - * @param msg_type Type of message to prepare - * @param msg_size Size of the message in bytes. Should not exceed - * MAX_MESSAGE_SIZE - * @param msg Message to prepare (not including header). This pointer can be - * freed after the function invocation. - */ -void ipc_prepare_send_message(IPCClient *c, const IPCMessageType msg_type, - const uint32_t msg_size, const char *msg); - -/** - * Prepare an error message in the specified client's buffer - * - * @param c Client to prepare message for - * @param msg_type Type of message - * @param format Format string following vsprintf - * @param ... Arguments for format string - */ -void ipc_prepare_reply_failure(IPCClient *c, IPCMessageType msg_type, - const char *format, ...); - -/** - * Prepare a success message in the specified client's buffer - * - * @param c Client to prepare message for - * @param msg_type Type of message - */ -void ipc_prepare_reply_success(IPCClient *c, IPCMessageType msg_type); - -/** - * Send a tag_change_event to all subscribers. Should be called only when there - * has been a tag state change. - * - * @param mon_num The index of the monitor (Monitor.num property) - * @param old_state The old tag state - * @param new_state The new (now current) tag state - */ -void ipc_tag_change_event(const int mon_num, TagState old_state, - TagState new_state); - -/** - * Send a client_focus_change_event to all subscribers. Should be called only - * when the client focus changes. - * - * @param mon_num The index of the monitor (Monitor.num property) - * @param old_client The old DWM client selection (Monitor.oldsel) - * @param new_client The new (now current) DWM client selection - */ -void ipc_client_focus_change_event(const int mon_num, Client *old_client, - Client *new_client); - -/** - * Send a layout_change_event to all subscribers. Should be called only - * when there has been a layout change. - * - * @param mon_num The index of the monitor (Monitor.num property) - * @param old_symbol The old layout symbol - * @param old_layout Address to the old Layout - * @param new_symbol The new (now current) layout symbol - * @param new_layout Address to the new Layout - */ -void ipc_layout_change_event(const int mon_num, const char *old_symbol, - const Layout *old_layout, const char *new_symbol, - const Layout *new_layout); - -/** - * Send a monitor_focus_change_event to all subscribers. Should be called only - * when the monitor focus changes. - * - * @param last_mon_num The index of the previously selected monitor - * @param new_mon_num The index of the newly selected monitor - */ -void ipc_monitor_focus_change_event(const int last_mon_num, - const int new_mon_num); - -/** - * Send a focused_title_change_event to all subscribers. Should only be called - * if a selected client has a title change. - * - * @param mon_num Index of the client's monitor - * @param client_id Window XID of client - * @param old_name Old name of the client window - * @param new_name New name of the client window - */ -void ipc_focused_title_change_event(const int mon_num, const Window client_id, - const char *old_name, const char *new_name); - -/** - * Send a focused_state_change_event to all subscribers. Should only be called - * if a selected client has a state change. - * - * @param mon_num Index of the client's monitor - * @param client_id Window XID of client - * @param old_state Old state of the client - * @param new_state New state of the client - */ -void ipc_focused_state_change_event(const int mon_num, const Window client_id, - const ClientState *old_state, - const ClientState *new_state); -/** - * Check to see if an event has occured and call the *_change_event functions - * accordingly - * - * @param mons Address of Monitor pointing to start of linked list - * @param lastselmon Address of pointer to previously selected monitor - * @param selmon Address of selected Monitor - */ -void ipc_send_events(Monitor *mons, Monitor **lastselmon, Monitor *selmon); - -/** - * Handle an epoll event caused by a registered IPC client. Read, process, and - * handle any received messages from clients. Write pending buffer to client if - * the client is ready to receive messages. Drop clients that have sent an - * EPOLLHUP. - * - * @param ev Associated epoll event returned by epoll_wait - * @param mons Address of Monitor pointing to start of linked list - * @param selmon Address of selected Monitor - * @param lastselmon Address of pointer to previously selected monitor - * @param tags Array of tag names - * @param tags_len Length of tags array - * @param layouts Array of available layouts - * @param layouts_len Length of layouts array - * - * @return 0 if event was successfully handled, -1 on any error receiving - * or handling incoming messages or unhandled epoll event. - */ -int ipc_handle_client_epoll_event(struct epoll_event *ev, Monitor *mons, - Monitor **lastselmon, Monitor *selmon, const int tags_len, - const Layout *layouts, const int layouts_len); - -/** - * Handle an epoll event caused by the IPC socket. This function only handles an - * EPOLLIN event indicating a new client requesting to connect to the socket. - * - * @param ev Associated epoll event returned by epoll_wait - * - * @return 0, if the event was successfully handled, -1 if not an EPOLLIN event - * or if a new IPC client connection request could not be accepted. - */ -int ipc_handle_socket_epoll_event(struct epoll_event *ev); - -#endif /* IPC_H_ */ diff --git a/suckless/dwm/patch/ipc/util.c b/suckless/dwm/patch/ipc/util.c deleted file mode 100644 index fedfc93c..00000000 --- a/suckless/dwm/patch/ipc/util.c +++ /dev/null @@ -1,135 +0,0 @@ -#include -#include - -int -normalizepath(const char *path, char **normal) -{ - size_t len = strlen(path); - *normal = (char *)malloc((len + 1) * sizeof(char)); - const char *walk = path; - const char *match; - size_t newlen = 0; - - while ((match = strchr(walk, '/'))) { - // Copy everything between match and walk - strncpy(*normal + newlen, walk, match - walk); - newlen += match - walk; - walk += match - walk; - - // Skip all repeating slashes - while (*walk == '/') - walk++; - - // If not last character in path - if (walk != path + len) - (*normal)[newlen++] = '/'; - } - - (*normal)[newlen++] = '\0'; - - // Copy remaining path - strcat(*normal, walk); - newlen += strlen(walk); - - *normal = (char *)realloc(*normal, newlen * sizeof(char)); - - return 0; -} - -int -parentdir(const char *path, char **parent) -{ - char *normal; - char *walk; - - normalizepath(path, &normal); - - // Pointer to last '/' - if (!(walk = strrchr(normal, '/'))) { - free(normal); - return -1; - } - - // Get path up to last '/' - size_t len = walk - normal; - *parent = (char *)malloc((len + 1) * sizeof(char)); - - // Copy path up to last '/' - strncpy(*parent, normal, len); - // Add null char - (*parent)[len] = '\0'; - - free(normal); - - return 0; -} - -int -mkdirp(const char *path) -{ - char *normal; - char *walk; - size_t normallen; - - normalizepath(path, &normal); - normallen = strlen(normal); - walk = normal; - - while (walk < normal + normallen + 1) { - // Get length from walk to next / - size_t n = strcspn(walk, "/"); - - // Skip path / - if (n == 0) { - walk++; - continue; - } - - // Length of current path segment - size_t curpathlen = walk - normal + n; - char curpath[curpathlen + 1]; - struct stat s; - - // Copy path segment to stat - strncpy(curpath, normal, curpathlen); - strcpy(curpath + curpathlen, ""); - int res = stat(curpath, &s); - - if (res < 0) { - if (errno == ENOENT) { - DEBUG("Making directory %s\n", curpath); - if (mkdir(curpath, 0700) < 0) { - fprintf(stderr, "Failed to make directory %s\n", curpath); - perror(""); - free(normal); - return -1; - } - } else { - fprintf(stderr, "Error statting directory %s\n", curpath); - perror(""); - free(normal); - return -1; - } - } - - // Continue to next path segment - walk += n; - } - - free(normal); - - return 0; -} - -int -nullterminate(char **str, size_t *len) -{ - if ((*str)[*len - 1] == '\0') - return 0; - - (*len)++; - *str = (char*)realloc(*str, *len * sizeof(char)); - (*str)[*len - 1] = '\0'; - - return 0; -} diff --git a/suckless/dwm/patch/ipc/util.h b/suckless/dwm/patch/ipc/util.h deleted file mode 100644 index 8f8d35fd..00000000 --- a/suckless/dwm/patch/ipc/util.h +++ /dev/null @@ -1,4 +0,0 @@ -int normalizepath(const char *path, char **normal); -int mkdirp(const char *path); -int parentdir(const char *path, char **parent); -int nullterminate(char **str, size_t *len); \ No newline at end of file diff --git a/suckless/dwm/patch/ipc/yajl_dumps.c b/suckless/dwm/patch/ipc/yajl_dumps.c deleted file mode 100644 index d5d2a61d..00000000 --- a/suckless/dwm/patch/ipc/yajl_dumps.c +++ /dev/null @@ -1,351 +0,0 @@ -#include "yajl_dumps.h" - -#include - -int -dump_tag(yajl_gen gen, const char *name, const int tag_mask) -{ - // clang-format off - YMAP( - YSTR("bit_mask"); YINT(tag_mask); - YSTR("name"); YSTR(name); - ) - // clang-format on - - return 0; -} - -int -dump_tags(yajl_gen gen, int tags_len) -{ - // clang-format off - YARR( - for (int i = 0; i < tags_len; i++) - dump_tag(gen, tagicon(mons, i), 1 << i); - ) - // clang-format on - - return 0; -} - -int -dump_client(yajl_gen gen, Client *c) -{ - // clang-format off - YMAP( - YSTR("name"); YSTR(c->name); - YSTR("tags"); YINT(c->tags); - YSTR("window_id"); YINT(c->win); - YSTR("monitor_number"); YINT(c->mon->num); - - YSTR("geometry"); YMAP( - YSTR("current"); YMAP ( - YSTR("x"); YINT(c->x); - YSTR("y"); YINT(c->y); - YSTR("width"); YINT(c->w); - YSTR("height"); YINT(c->h); - ) - YSTR("old"); YMAP( - YSTR("x"); YINT(c->oldx); - YSTR("y"); YINT(c->oldy); - YSTR("width"); YINT(c->oldw); - YSTR("height"); YINT(c->oldh); - ) - ) - - YSTR("size_hints"); YMAP( - YSTR("base"); YMAP( - YSTR("width"); YINT(c->basew); - YSTR("height"); YINT(c->baseh); - ) - YSTR("step"); YMAP( - YSTR("width"); YINT(c->incw); - YSTR("height"); YINT(c->inch); - ) - YSTR("max"); YMAP( - YSTR("width"); YINT(c->maxw); - YSTR("height"); YINT(c->maxh); - ) - YSTR("min"); YMAP( - YSTR("width"); YINT(c->minw); - YSTR("height"); YINT(c->minh); - ) - YSTR("aspect_ratio"); YMAP( - YSTR("min"); YDOUBLE(c->mina); - YSTR("max"); YDOUBLE(c->maxa); - ) - ) - - YSTR("border_width"); YMAP( - YSTR("current"); YINT(c->bw); - YSTR("old"); YINT(c->oldbw); - ) - - YSTR("states"); YMAP( - YSTR("is_fixed"); YBOOL(c->isfixed); - YSTR("is_floating"); YBOOL(c->isfloating); - YSTR("is_urgent"); YBOOL(c->isurgent); - YSTR("never_focus"); YBOOL(c->neverfocus); - YSTR("old_state"); YBOOL(c->oldstate); - YSTR("is_fullscreen"); YBOOL(c->isfullscreen); - ) - ) - // clang-format on - - return 0; -} - -int -dump_monitor(yajl_gen gen, Monitor *mon, int is_selected) -{ - // clang-format off - YMAP( - YSTR("master_factor"); YDOUBLE(mon->mfact); - YSTR("num_master"); YINT(mon->nmaster); - YSTR("num"); YINT(mon->num); - YSTR("is_selected"); YBOOL(is_selected); - - YSTR("monitor_geometry"); YMAP( - YSTR("x"); YINT(mon->mx); - YSTR("y"); YINT(mon->my); - YSTR("width"); YINT(mon->mw); - YSTR("height"); YINT(mon->mh); - ) - - YSTR("window_geometry"); YMAP( - YSTR("x"); YINT(mon->wx); - YSTR("y"); YINT(mon->wy); - YSTR("width"); YINT(mon->ww); - YSTR("height"); YINT(mon->wh); - ) - - YSTR("tagset"); YMAP( - YSTR("current"); YINT(mon->tagset[mon->seltags]); - YSTR("old"); YINT(mon->tagset[mon->seltags ^ 1]); - ) - - YSTR("tag_state"); dump_tag_state(gen, mon->tagstate); - - YSTR("clients"); YMAP( - YSTR("selected"); YINT(mon->sel ? mon->sel->win : 0); - YSTR("stack"); YARR( - for (Client* c = mon->stack; c; c = c->snext) - YINT(c->win); - ) - YSTR("all"); YARR( - for (Client* c = mon->clients; c; c = c->next) - YINT(c->win); - ) - ) - - YSTR("layout"); YMAP( - YSTR("symbol"); YMAP( - YSTR("current"); YSTR(mon->ltsymbol); - YSTR("old"); YSTR(mon->lastltsymbol); - ) - YSTR("address"); YMAP( - YSTR("current"); YINT((uintptr_t)mon->lt[mon->sellt]); - YSTR("old"); YINT((uintptr_t)mon->lt[mon->sellt ^ 1]); - ) - ) - - YSTR("bar"); YMAP( - YSTR("y"); YINT(mon->bar->by); - YSTR("is_shown"); YBOOL(mon->showbar); - YSTR("is_top"); YBOOL(mon->bar->topbar); - YSTR("window_id"); YINT(mon->bar->win); - ) - ) - // clang-format on - - return 0; -} - -int -dump_monitors(yajl_gen gen, Monitor *mons, Monitor *selmon) -{ - // clang-format off - YARR( - for (Monitor *mon = mons; mon; mon = mon->next) { - if (mon == selmon) - dump_monitor(gen, mon, 1); - else - dump_monitor(gen, mon, 0); - } - ) - // clang-format on - - return 0; -} - -int -dump_layouts(yajl_gen gen, const Layout layouts[], const int layouts_len) -{ - // clang-format off - YARR( - for (int i = 0; i < layouts_len; i++) { - YMAP( - // Check for a NULL pointer. The cycle layouts patch adds an entry at - // the end of the layouts array with a NULL pointer for the symbol - YSTR("symbol"); YSTR((layouts[i].symbol ? layouts[i].symbol : "")); - YSTR("address"); YINT((uintptr_t)(layouts + i)); - ) - } - ) - // clang-format on - - return 0; -} - -int -dump_tag_state(yajl_gen gen, TagState state) -{ - // clang-format off - YMAP( - YSTR("selected"); YINT(state.selected); - YSTR("occupied"); YINT(state.occupied); - YSTR("urgent"); YINT(state.urgent); - ) - // clang-format on - - return 0; -} - -int -dump_tag_event(yajl_gen gen, int mon_num, TagState old_state, - TagState new_state) -{ - // clang-format off - YMAP( - YSTR("tag_change_event"); YMAP( - YSTR("monitor_number"); YINT(mon_num); - YSTR("old_state"); dump_tag_state(gen, old_state); - YSTR("new_state"); dump_tag_state(gen, new_state); - ) - ) - // clang-format on - - return 0; -} - -int -dump_client_focus_change_event(yajl_gen gen, Client *old_client, - Client *new_client, int mon_num) -{ - // clang-format off - YMAP( - YSTR("client_focus_change_event"); YMAP( - YSTR("monitor_number"); YINT(mon_num); - YSTR("old_win_id"); old_client == NULL ? YNULL() : YINT(old_client->win); - YSTR("new_win_id"); new_client == NULL ? YNULL() : YINT(new_client->win); - ) - ) - // clang-format on - - return 0; -} - -int -dump_layout_change_event(yajl_gen gen, const int mon_num, - const char *old_symbol, const Layout *old_layout, - const char *new_symbol, const Layout *new_layout) -{ - // clang-format off - YMAP( - YSTR("layout_change_event"); YMAP( - YSTR("monitor_number"); YINT(mon_num); - YSTR("old_symbol"); YSTR(old_symbol); - YSTR("old_address"); YINT((uintptr_t)old_layout); - YSTR("new_symbol"); YSTR(new_symbol); - YSTR("new_address"); YINT((uintptr_t)new_layout); - ) - ) - // clang-format on - - return 0; -} - -int -dump_monitor_focus_change_event(yajl_gen gen, const int last_mon_num, - const int new_mon_num) -{ - // clang-format off - YMAP( - YSTR("monitor_focus_change_event"); YMAP( - YSTR("old_monitor_number"); YINT(last_mon_num); - YSTR("new_monitor_number"); YINT(new_mon_num); - ) - ) - // clang-format on - - return 0; -} - -int -dump_focused_title_change_event(yajl_gen gen, const int mon_num, - const Window client_id, const char *old_name, - const char *new_name) -{ - // clang-format off - YMAP( - YSTR("focused_title_change_event"); YMAP( - YSTR("monitor_number"); YINT(mon_num); - YSTR("client_window_id"); YINT(client_id); - YSTR("old_name"); YSTR(old_name); - YSTR("new_name"); YSTR(new_name); - ) - ) - // clang-format on - - return 0; -} - -int -dump_client_state(yajl_gen gen, const ClientState *state) -{ - // clang-format off - YMAP( - YSTR("old_state"); YBOOL(state->oldstate); - YSTR("is_fixed"); YBOOL(state->isfixed); - YSTR("is_floating"); YBOOL(state->isfloating); - YSTR("is_fullscreen"); YBOOL(state->isfullscreen); - YSTR("is_urgent"); YBOOL(state->isurgent); - YSTR("never_focus"); YBOOL(state->neverfocus); - ) - // clang-format on - - return 0; -} - -int -dump_focused_state_change_event(yajl_gen gen, const int mon_num, - const Window client_id, - const ClientState *old_state, - const ClientState *new_state) -{ - // clang-format off - YMAP( - YSTR("focused_state_change_event"); YMAP( - YSTR("monitor_number"); YINT(mon_num); - YSTR("client_window_id"); YINT(client_id); - YSTR("old_state"); dump_client_state(gen, old_state); - YSTR("new_state"); dump_client_state(gen, new_state); - ) - ) - // clang-format on - - return 0; -} - -int -dump_error_message(yajl_gen gen, const char *reason) -{ - // clang-format off - YMAP( - YSTR("result"); YSTR("error"); - YSTR("reason"); YSTR(reason); - ) - // clang-format on - - return 0; -} diff --git a/suckless/dwm/patch/keymodes.c b/suckless/dwm/patch/keymodes.c deleted file mode 100644 index 45af3c5e..00000000 --- a/suckless/dwm/patch/keymodes.c +++ /dev/null @@ -1,143 +0,0 @@ -/* function implementations */ -void -clearcmd(const Arg *arg) -{ - unsigned int i; - - for (i = 0; i < LENGTH(cmdkeysym); i++) { - cmdkeysym[i] = 0; - cmdmod[i] = 0; - } -} - -void -grabkeys(void) -{ - if (keymode == INSERTMODE) { - grabdefkeys(); - } else if (keymode == COMMANDMODE) { - XUngrabKey(dpy, AnyKey, AnyModifier, root); - XGrabKey(dpy, AnyKey, AnyModifier, root, - True, GrabModeAsync, GrabModeAsync); - } -} - -int -isprotodel(Client *c) -{ - int n; - Atom *protocols; - int ret = 0; - - if (XGetWMProtocols(dpy, c->win, &protocols, &n)) { - while (!ret && n--) - ret = protocols[n] == wmatom[WMDelete]; - XFree(protocols); - } - return ret; -} - - -void -keypress(XEvent *e) -{ - unsigned int i, j; - Arg a = {0}; - Bool ismatch = False, maybematch = False; - KeySym keysym; - XKeyEvent *ev; - - if (keymode == INSERTMODE) - keydefpress(e); - else if (keymode == COMMANDMODE) { - ev = &e->xkey; - keysym = XKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0); - if (keysym < XK_Shift_L || keysym > XK_Hyper_R) { - for (i = 0; i < LENGTH(cmdkeys); i++) - if (keysym == cmdkeys[i].keysym - && CLEANMASK(cmdkeys[i].mod) == CLEANMASK(ev->state) - && cmdkeys[i].func) { - cmdkeys[i].func(&(cmdkeys[i].arg)); - ismatch = True; - break; - } - if (!ismatch) { - for (j = 0; j < LENGTH(cmdkeysym); j++) - if (cmdkeysym[j] == 0) { - cmdkeysym[j] = keysym; - cmdmod[j] = ev->state; - break; - } - for (i = 0; i < LENGTH(commands); i++) { - for (j = 0; j < LENGTH(cmdkeysym); j++) { - if (cmdkeysym[j] == commands[i].keysym[j] - && CLEANMASK(cmdmod[j]) == CLEANMASK(commands[i].mod[j])) - ismatch = True; - else if (cmdkeysym[j] == 0 - && cmdmod[j] == 0) { - ismatch = False; - maybematch = True; - break; - } else { - ismatch = False; - break; - } - } - if (ismatch) { - if (commands[i].func) - commands[i].func(&(commands[i].arg)); - clearcmd(&a); - break; - } - - } - if (!maybematch) - clearcmd(&a); - } - } - } -} - -void -onlyclient(const Arg *arg) -{ - Client *c; - XEvent ev; - - if (!selmon->sel) - return; - for (c = selmon->clients; c; c = c->next) { - if (c != selmon->sel && ISVISIBLE(c)) { - if (isprotodel(c)) { - ev.type = ClientMessage; - ev.xclient.window = c->win; - ev.xclient.message_type = wmatom[WMProtocols]; - ev.xclient.format = 32; - ev.xclient.data.l[0] = wmatom[WMDelete]; - ev.xclient.data.l[1] = CurrentTime; - XSendEvent(dpy, c->win, False, NoEventMask, &ev); - } - else { - XGrabServer(dpy); - XSetErrorHandler(xerrordummy); - XSetCloseDownMode(dpy, DestroyAll); - XKillClient(dpy, c->win); - XSync(dpy, False); - XSetErrorHandler(xerror); - XUngrabServer(dpy); - } - } - } -} - -void -setkeymode(const Arg *arg) -{ - Arg a = {0}; - - if (!arg) - return; - keymode = arg->ui; - clearcmd(&a); - grabkeys(); -} \ No newline at end of file diff --git a/suckless/dwm/patch/keymodes.h b/suckless/dwm/patch/keymodes.h deleted file mode 100644 index 3a131637..00000000 --- a/suckless/dwm/patch/keymodes.h +++ /dev/null @@ -1,21 +0,0 @@ -#define COMMANDMODE 1 -#define INSERTMODE 2 - -typedef struct { - unsigned int mod[4]; - KeySym keysym[4]; - void (*func)(const Arg *); - const Arg arg; -} Command; - -static void clearcmd(const Arg *arg); -static void grabkeys(void); -static int isprotodel(Client *c); -static void keypress(XEvent *e); -static void onlyclient(const Arg *arg); -static void setkeymode(const Arg *arg); - -/* variables */ -static unsigned int cmdmod[4]; -static unsigned int keymode = INSERTMODE; -static KeySym cmdkeysym[4]; \ No newline at end of file diff --git a/suckless/dwm/patch/killunsel.c b/suckless/dwm/patch/killunsel.c deleted file mode 100644 index 774847b8..00000000 --- a/suckless/dwm/patch/killunsel.c +++ /dev/null @@ -1,27 +0,0 @@ -void -killunsel(const Arg *arg) -{ - Client *i = NULL; - - if (!selmon->sel) - return; - - for (i = selmon->clients; i; i = i->next) { - if (ISVISIBLE(i) && i != selmon->sel) { - #if BAR_SYSTRAY_PATCH - if (!sendevent(i->win, wmatom[WMDelete], NoEventMask, wmatom[WMDelete], CurrentTime, 0, 0, 0)) - #else - if (!sendevent(i, wmatom[WMDelete])) - #endif // BAR_SYSTRAY_PATCH - { - XGrabServer(dpy); - XSetErrorHandler(xerrordummy); - XSetCloseDownMode(dpy, DestroyAll); - XKillClient(dpy, i->win); - XSync(dpy, False); - XSetErrorHandler(xerror); - XUngrabServer(dpy); - } - } - } -} \ No newline at end of file diff --git a/suckless/dwm/patch/killunsel.h b/suckless/dwm/patch/killunsel.h deleted file mode 100644 index 4f38a6e4..00000000 --- a/suckless/dwm/patch/killunsel.h +++ /dev/null @@ -1 +0,0 @@ -static void killunsel(const Arg *arg); \ No newline at end of file diff --git a/suckless/dwm/patch/layout_bstack.c b/suckless/dwm/patch/layout_bstack.c deleted file mode 100644 index be066476..00000000 --- a/suckless/dwm/patch/layout_bstack.c +++ /dev/null @@ -1,74 +0,0 @@ -static void -bstack(Monitor *m) -{ - unsigned int i, n; - int mx = 0, my = 0, mh = 0, mw = 0; - int sx = 0, sy = 0, sh = 0, sw = 0; - float mfacts, sfacts; - int mrest, srest; - Client *c; - - #if VANITYGAPS_PATCH - int oh, ov, ih, iv; - getgaps(m, &oh, &ov, &ih, &iv, &n); - #else - for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); - #endif // VANITYGAPS_PATCH - - if (n == 0) - return; - - #if VANITYGAPS_PATCH - sx = mx = m->wx + ov; - sy = my = m->wy + oh; - sh = mh = m->wh - 2*oh; - mw = m->ww - 2*ov - iv * (MIN(n, m->nmaster) - 1); - sw = m->ww - 2*ov - iv * (n - m->nmaster - 1); - - if (m->nmaster && n > m->nmaster) { - sh = (mh - ih) * (1 - m->mfact); - mh = (mh - ih) * m->mfact; - sx = mx; - sy = my + mh + ih; - } - #else - sx = mx = m->wx; - sy = my = m->wy; - sh = mh = m->wh; - sw = mw = m->ww; - - if (m->nmaster && n > m->nmaster) { - sh = mh * (1 - m->mfact); - mh = mh * m->mfact; - sy = my + mh; - } - #endif // VANITYGAPS_PATCH - - getfacts(m, mw, sw, &mfacts, &sfacts, &mrest, &srest); - - for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) { - if (i < m->nmaster) { - #if CFACTS_PATCH - resize(c, mx, my, (mw / mfacts) * c->cfact + (i < mrest ? 1 : 0) - (2*c->bw), mh - (2*c->bw), 0); - #else - resize(c, mx, my, (mw / mfacts) + (i < mrest ? 1 : 0) - (2*c->bw), mh - (2*c->bw), 0); - #endif // CFACTS_PATCH - #if VANITYGAPS_PATCH - mx += WIDTH(c) + iv; - #else - mx += WIDTH(c); - #endif - } else { - #if CFACTS_PATCH - resize(c, sx, sy, (sw / sfacts) * c->cfact + ((i - m->nmaster) < srest ? 1 : 0) - (2*c->bw), sh - (2*c->bw), 0); - #else - resize(c, sx, sy, (sw / sfacts) + ((i - m->nmaster) < srest ? 1 : 0) - (2*c->bw), sh - (2*c->bw), 0); - #endif // CFACTS_PATCH - #if VANITYGAPS_PATCH - sx += WIDTH(c) + iv; - #else - sx += WIDTH(c); - #endif - } - } -} \ No newline at end of file diff --git a/suckless/dwm/patch/layout_bstack.h b/suckless/dwm/patch/layout_bstack.h deleted file mode 100644 index 56c99ffe..00000000 --- a/suckless/dwm/patch/layout_bstack.h +++ /dev/null @@ -1 +0,0 @@ -static void bstack(Monitor *m); \ No newline at end of file diff --git a/suckless/dwm/patch/layout_bstackhoriz.c b/suckless/dwm/patch/layout_bstackhoriz.c deleted file mode 100644 index 0f9042f1..00000000 --- a/suckless/dwm/patch/layout_bstackhoriz.c +++ /dev/null @@ -1,76 +0,0 @@ -static void -bstackhoriz(Monitor *m) -{ - unsigned int i, n; - int mx = 0, my = 0, mh = 0, mw = 0; - int sx = 0, sy = 0, sh = 0, sw = 0; - float mfacts, sfacts; - int mrest, srest; - Client *c; - - #if VANITYGAPS_PATCH - int oh, ov, ih, iv; - getgaps(m, &oh, &ov, &ih, &iv, &n); - #else - for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); - #endif // VANITYGAPS_PATCH - - if (n == 0) - return; - - #if VANITYGAPS_PATCH - sx = mx = m->wx + ov; - sy = my = m->wy + oh; - mh = m->wh - 2*oh; - sh = m->wh - 2*oh - ih * (n - m->nmaster - 1); - mw = m->ww - 2*ov - iv * (MIN(n, m->nmaster) - 1); - sw = m->ww - 2*ov; - - if (m->nmaster && n > m->nmaster) { - sh = (mh - ih) * (1 - m->mfact); - mh = (mh - ih) * m->mfact; - sy = my + mh + ih; - sh = m->wh - mh - 2*oh - ih * (n - m->nmaster); - } - #else - sx = mx = m->wx; - sy = my = m->wy; - sh = mh = m->wh; - sw = mw = m->ww; - - if (m->nmaster && n > m->nmaster) { - sh = mh * (1 - m->mfact); - mh = mh * m->mfact; - sy = my + mh; - sh = m->wh - mh; - } - #endif // VANITYGAPS_PATCH - - getfacts(m, mw, sh, &mfacts, &sfacts, &mrest, &srest); - - for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) { - if (i < m->nmaster) { - #if CFACTS_PATCH - resize(c, mx, my, (mw / mfacts) * c->cfact + (i < mrest ? 1 : 0) - (2*c->bw), mh - (2*c->bw), 0); - #else - resize(c, mx, my, (mw / mfacts) + (i < mrest ? 1 : 0) - (2*c->bw), mh - (2*c->bw), 0); - #endif // CFACTS_PATCH - #if VANITYGAPS_PATCH - mx += WIDTH(c) + iv; - #else - mx += WIDTH(c); - #endif - } else { - #if CFACTS_PATCH - resize(c, sx, sy, sw - (2*c->bw), (sh / sfacts) * c->cfact + ((i - m->nmaster) < srest ? 1 : 0) - (2*c->bw), 0); - #else - resize(c, sx, sy, sw - (2*c->bw), (sh / sfacts) + ((i - m->nmaster) < srest ? 1 : 0) - (2*c->bw), 0); - #endif // CFACTS_PATCH - #if VANITYGAPS_PATCH - sy += HEIGHT(c) + ih; - #else - sy += HEIGHT(c); - #endif - } - } -} \ No newline at end of file diff --git a/suckless/dwm/patch/layout_bstackhoriz.h b/suckless/dwm/patch/layout_bstackhoriz.h deleted file mode 100644 index 8dd0ebd2..00000000 --- a/suckless/dwm/patch/layout_bstackhoriz.h +++ /dev/null @@ -1 +0,0 @@ -static void bstackhoriz(Monitor *m); \ No newline at end of file diff --git a/suckless/dwm/patch/layout_centeredfloatingmaster.c b/suckless/dwm/patch/layout_centeredfloatingmaster.c index 756b41f4..8b708c2d 100644 --- a/suckless/dwm/patch/layout_centeredfloatingmaster.c +++ b/suckless/dwm/patch/layout_centeredfloatingmaster.c @@ -8,18 +8,13 @@ centeredfloatingmaster(Monitor *m) int sx = 0, sy = 0, sh = 0, sw = 0; Client *c; - #if VANITYGAPS_PATCH float mivf = 1.0; // master inner vertical gap factor int oh, ov, ih, iv; getgaps(m, &oh, &ov, &ih, &iv, &n); - #else - for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); - #endif // VANITYGAPS_PATCH if (n == 0) return; - #if VANITYGAPS_PATCH sx = mx = m->wx + ov; sy = my = m->wy + oh; sh = mh = m->wh - 2*oh; @@ -43,52 +38,17 @@ centeredfloatingmaster(Monitor *m) sy = m->wy + oh; sh = m->wh - 2*oh; } - #else - sx = mx = m->wx; - sy = my = m->wy; - sh = mh = m->wh; - sw = mw = m->ww; - - if (m->nmaster && n > m->nmaster) { - /* go mfact box in the center if more than nmaster clients */ - if (m->ww > m->wh) { - mw = m->ww * m->mfact; - mh = m->wh * 0.9; - } else { - mw = m->ww * 0.9; - mh = m->wh * m->mfact; - } - mx = m->wx + (m->ww - mw) / 2; - my = m->wy + (m->wh - mh) / 2; - } - #endif // VANITYGAPS_PATCH getfacts(m, mw, sw, &mfacts, &sfacts, &mrest, &srest); for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) if (i < m->nmaster) { /* nmaster clients are stacked horizontally, in the center of the screen */ - #if CFACTS_PATCH - resize(c, mx, my, (mw / mfacts) * c->cfact + (i < mrest ? 1 : 0) - (2*c->bw), mh - (2*c->bw), 0); - #else resize(c, mx, my, (mw / mfacts) + (i < mrest ? 1 : 0) - (2*c->bw), mh - (2*c->bw), 0); - #endif // CFACTS_PATCH - #if VANITYGAPS_PATCH mx += WIDTH(c) + iv*mivf; - #else - mx += WIDTH(c); - #endif } else { /* stack clients are stacked horizontally */ - #if CFACTS_PATCH - resize(c, sx, sy, (sw / sfacts) * c->cfact + ((i - m->nmaster) < srest ? 1 : 0) - (2*c->bw), sh - (2*c->bw), 0); - #else resize(c, sx, sy, (sw / sfacts) + ((i - m->nmaster) < srest ? 1 : 0) - (2*c->bw), sh - (2*c->bw), 0); - #endif // CFACTS_PATCH - #if VANITYGAPS_PATCH sx += WIDTH(c) + iv; - #else - sx += WIDTH(c); - #endif } } diff --git a/suckless/dwm/patch/layout_centeredfloatingmaster.h b/suckless/dwm/patch/layout_centeredfloatingmaster.h index e4147b3b..a9253e9f 100644 --- a/suckless/dwm/patch/layout_centeredfloatingmaster.h +++ b/suckless/dwm/patch/layout_centeredfloatingmaster.h @@ -1 +1 @@ -static void centeredfloatingmaster(Monitor *m); \ No newline at end of file +static void centeredfloatingmaster(Monitor *m); diff --git a/suckless/dwm/patch/layout_centeredmaster.c b/suckless/dwm/patch/layout_centeredmaster.c index a72eb070..3060b878 100644 --- a/suckless/dwm/patch/layout_centeredmaster.c +++ b/suckless/dwm/patch/layout_centeredmaster.c @@ -10,18 +10,13 @@ centeredmaster(Monitor *m) int mrest = 0, lrest = 0, rrest = 0; Client *c; - #if VANITYGAPS_PATCH int oh, ov, ih, iv; getgaps(m, &oh, &ov, &ih, &iv, &n); - #else - for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); - #endif // VANITYGAPS_PATCH if (n == 0) return; /* initialize areas */ - #if VANITYGAPS_PATCH mx = m->wx + ov; my = m->wy + oh; mh = m->wh - 2*oh - ih * ((!m->nmaster ? n : MIN(n, m->nmaster)) - 1); @@ -47,53 +42,8 @@ centeredmaster(Monitor *m) rx = mx + mw + iv; ry = m->wy + oh; } - #else - mx = m->wx; - my = m->wy; - mh = m->wh; - mw = m->ww; - lh = m->wh; - rh = m->wh; - - if (m->nmaster && n > m->nmaster) { - /* go mfact box in the center if more than nmaster clients */ - if (n - m->nmaster > 1) { - /* ||<-S->|<---M--->|<-S->|| */ - mw = m->ww * m->mfact; - lw = (m->ww - mw) / 2; - mx += lw; - } else { - /* ||<---M--->|<-S->|| */ - mw = mw * m->mfact; - lw = m->ww - mw; - } - rw = lw; - lx = m->wx; - ly = m->wy; - rx = mx + mw; - ry = m->wy; - } - #endif // VANITYGAPS_PATCH /* calculate facts */ - #if CFACTS_PATCH - for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++) { - if (!m->nmaster || n < m->nmaster) - mfacts += c->cfact; // total factor of master area - else if ((n - m->nmaster) % 2) - lfacts += c->cfact; // total factor of left hand stack area - else - rfacts += c->cfact; // total factor of right hand stack area - } - - for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++) - if (!m->nmaster || n < m->nmaster) - mtotal += mh / mfacts; - else if ((n - m->nmaster) % 2) - ltotal += lh * (c->cfact / lfacts); - else - rtotal += rh * (c->cfact / rfacts); - #else for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++) { if (!m->nmaster || n < m->nmaster) mfacts += 1; @@ -110,7 +60,6 @@ centeredmaster(Monitor *m) ltotal += lh / lfacts; else rtotal += rh / rfacts; - #endif // CFACTS_PATCH mrest = mh - mtotal; lrest = lh - ltotal; @@ -119,41 +68,17 @@ centeredmaster(Monitor *m) for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) { if (!m->nmaster || i < m->nmaster) { /* nmaster clients are stacked vertically, in the center of the screen */ - #if CFACTS_PATCH - resize(c, mx, my, mw - (2*c->bw), (mh / mfacts) * c->cfact + (i < mrest ? 1 : 0) - (2*c->bw), 0); - #else resize(c, mx, my, mw - (2*c->bw), (mh / mfacts) + (i < mrest ? 1 : 0) - (2*c->bw), 0); - #endif // CFACTS_PATCH - #if VANITYGAPS_PATCH my += HEIGHT(c) + ih; - #else - my += HEIGHT(c); - #endif } else { /* stack clients are stacked vertically */ if ((i - m->nmaster) % 2 ) { - #if CFACTS_PATCH - resize(c, lx, ly, lw - (2*c->bw), (lh / lfacts) * c->cfact + ((i - 2*m->nmaster) < 2*lrest ? 1 : 0) - (2*c->bw), 0); - #else resize(c, lx, ly, lw - (2*c->bw), (lh / lfacts) + ((i - 2*m->nmaster) < 2*lrest ? 1 : 0) - (2*c->bw), 0); - #endif // CFACTS_PATCH - #if VANITYGAPS_PATCH ly += HEIGHT(c) + ih; - #else - ly += HEIGHT(c); - #endif } else { - #if CFACTS_PATCH - resize(c, rx, ry, rw - (2*c->bw), (rh / rfacts) * c->cfact + ((i - 2*m->nmaster) < 2*rrest ? 1 : 0) - (2*c->bw), 0); - #else resize(c, rx, ry, rw - (2*c->bw), (rh / rfacts) + ((i - 2*m->nmaster) < 2*rrest ? 1 : 0) - (2*c->bw), 0); - #endif // CFACTS_PATCH - #if VANITYGAPS_PATCH ry += HEIGHT(c) + ih; - #else - ry += HEIGHT(c); - #endif } } } -} \ No newline at end of file +} diff --git a/suckless/dwm/patch/layout_centeredmaster.h b/suckless/dwm/patch/layout_centeredmaster.h index b0472127..1c0ec2a5 100644 --- a/suckless/dwm/patch/layout_centeredmaster.h +++ b/suckless/dwm/patch/layout_centeredmaster.h @@ -1 +1 @@ -static void centeredmaster(Monitor *m); \ No newline at end of file +static void centeredmaster(Monitor *m); diff --git a/suckless/dwm/patch/layout_columns.c b/suckless/dwm/patch/layout_columns.c deleted file mode 100644 index bcdaa110..00000000 --- a/suckless/dwm/patch/layout_columns.c +++ /dev/null @@ -1,73 +0,0 @@ -static void -col(Monitor *m) -{ - unsigned int i, n; - int mx = 0, my = 0, mh = 0, mw = 0; - int sx = 0, sy = 0, sh = 0, sw = 0; - float mfacts, sfacts; - int mrest, srest; - Client *c; - - #if VANITYGAPS_PATCH - int oh, ov, ih, iv; - getgaps(m, &oh, &ov, &ih, &iv, &n); - #else - for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); - #endif // VANITYGAPS_PATCH - - if (n == 0) - return; - - #if VANITYGAPS_PATCH - sx = mx = m->wx + ov; - sy = my = m->wy + oh; - mh = m->wh - 2*oh; - sh = m->wh - 2*oh - ih * (n - m->nmaster - 1); - mw = m->ww - 2*ov - iv * (MIN(n, m->nmaster) - 1); - sw = m->ww - 2*ov; - - if (m->nmaster && n > m->nmaster) { - sw = (mw - iv) * (1 - m->mfact); - mw = (mw - iv) * m->mfact; - sx = mx + mw + iv * m->nmaster; - } - #else - sx = mx = m->wx; - sy = my = m->wy; - sh = mh = m->wh; - sw = mw = m->ww; - - if (m->nmaster && n > m->nmaster) { - sw = mw * (1 - m->mfact); - mw = mw * m->mfact; - sx = mx + mw; - } - #endif // VANITYGAPS_PATCH - - getfacts(m, mw, sh, &mfacts, &sfacts, &mrest, &srest); - - for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) - if (i < m->nmaster) { - #if CFACTS_PATCH - resize(c, mx, my, (mw / mfacts) * c->cfact + (i < mrest ? 1 : 0) - (2*c->bw), mh - (2*c->bw), 0); - #else - resize(c, mx, my, (mw / mfacts) + (i < mrest ? 1 : 0) - (2*c->bw), mh - (2*c->bw), 0); - #endif // CFACTS_PATCH - #if VANITYGAPS_PATCH - mx += WIDTH(c) + iv; - #else - mx += WIDTH(c); - #endif - } else { - #if CFACTS_PATCH - resize(c, sx, sy, sw - (2*c->bw), (sh / sfacts) * c->cfact + ((i - m->nmaster) < srest ? 1 : 0) - (2*c->bw), 0); - #else - resize(c, sx, sy, sw - (2*c->bw), (sh / sfacts) + ((i - m->nmaster) < srest ? 1 : 0) - (2*c->bw), 0); - #endif // CFACTS_PATCH - #if VANITYGAPS_PATCH - sy += HEIGHT(c) + ih; - #else - sy += HEIGHT(c); - #endif - } -} \ No newline at end of file diff --git a/suckless/dwm/patch/layout_columns.h b/suckless/dwm/patch/layout_columns.h deleted file mode 100644 index 8f64a094..00000000 --- a/suckless/dwm/patch/layout_columns.h +++ /dev/null @@ -1 +0,0 @@ -static void col(Monitor *); \ No newline at end of file diff --git a/suckless/dwm/patch/layout_deck.c b/suckless/dwm/patch/layout_deck.c index 6f2027d1..8b3f91fd 100644 --- a/suckless/dwm/patch/layout_deck.c +++ b/suckless/dwm/patch/layout_deck.c @@ -8,17 +8,12 @@ deck(Monitor *m) int mrest, srest; Client *c; - #if VANITYGAPS_PATCH int oh, ov, ih, iv; getgaps(m, &oh, &ov, &ih, &iv, &n); - #else - for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); - #endif // VANITYGAPS_PATCH if (n == 0) return; - #if VANITYGAPS_PATCH sx = mx = m->wx + ov; sy = my = m->wy + oh; sh = mh = m->wh - 2*oh - ih * (MIN(n, m->nmaster) - 1); @@ -30,18 +25,6 @@ deck(Monitor *m) sx = mx + mw + iv; sh = m->wh - 2*oh; } - #else - sx = mx = m->wx; - sy = my = m->wy; - sh = mh = m->wh; - sw = mw = m->ww; - - if (m->nmaster && n > m->nmaster) { - sw = mw * (1 - m->mfact); - mw = mw * m->mfact; - sx = mx + mw; - } - #endif // VANITYGAPS_PATCH getfacts(m, mh, sh, &mfacts, &sfacts, &mrest, &srest); @@ -50,17 +33,9 @@ deck(Monitor *m) for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) if (i < m->nmaster) { - #if CFACTS_PATCH - resize(c, mx, my, mw - (2*c->bw), (mh / mfacts) * c->cfact + (i < mrest ? 1 : 0) - (2*c->bw), 0); - #else resize(c, mx, my, mw - (2*c->bw), (mh / mfacts) + (i < mrest ? 1 : 0) - (2*c->bw), 0); - #endif // CFACTS_PATCH - #if VANITYGAPS_PATCH my += HEIGHT(c) + ih; - #else - my += HEIGHT(c); - #endif } else { resize(c, sx, sy, sw - (2*c->bw), sh - (2*c->bw), 0); } -} \ No newline at end of file +} diff --git a/suckless/dwm/patch/layout_deck.h b/suckless/dwm/patch/layout_deck.h index abedeb2a..9c09ed97 100644 --- a/suckless/dwm/patch/layout_deck.h +++ b/suckless/dwm/patch/layout_deck.h @@ -1 +1 @@ -static void deck(Monitor *m); \ No newline at end of file +static void deck(Monitor *m); diff --git a/suckless/dwm/patch/layout_facts.c b/suckless/dwm/patch/layout_facts.c index e5beb4b6..aa45f1a6 100644 --- a/suckless/dwm/patch/layout_facts.c +++ b/suckless/dwm/patch/layout_facts.c @@ -1,30 +1,3 @@ -#if CFACTS_PATCH -void -getfacts(Monitor *m, int msize, int ssize, float *mf, float *sf, int *mr, int *sr) -{ - unsigned int n; - float mfacts = 0, sfacts = 0; - int mtotal = 0, stotal = 0; - Client *c; - - for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++) - if (n < m->nmaster) - mfacts += c->cfact; - else - sfacts += c->cfact; - - for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++) - if (n < m->nmaster) - mtotal += msize * (c->cfact / mfacts); - else - stotal += ssize * (c->cfact / sfacts); - - *mf = mfacts; // total factor of master area - *sf = sfacts; // total factor of stack area - *mr = msize - mtotal; // the remainder (rest) of pixels after a cfacts master split - *sr = ssize - stotal; // the remainder (rest) of pixels after a cfacts stack split -} -#else void getfacts(Monitor *m, int msize, int ssize, float *mf, float *sf, int *mr, int *sr) { @@ -48,4 +21,3 @@ getfacts(Monitor *m, int msize, int ssize, float *mf, float *sf, int *mr, int *s *mr = msize - mtotal; // the remainder (rest) of pixels after an even master split *sr = ssize - stotal; // the remainder (rest) of pixels after an even stack split } -#endif // CFACTS_PATCH diff --git a/suckless/dwm/patch/layout_fibonacci.c b/suckless/dwm/patch/layout_fibonacci.c index 87a1bdf3..c43911da 100644 --- a/suckless/dwm/patch/layout_fibonacci.c +++ b/suckless/dwm/patch/layout_fibonacci.c @@ -1,4 +1,3 @@ -#if VANITYGAPS_PATCH void fibonacci(Monitor *m, int s) { @@ -85,106 +84,15 @@ fibonacci(Monitor *m, int s) resize(c, nx, ny, nw - (2*c->bw), nh - (2*c->bw), False); } } -#else -void -fibonacci(Monitor *m, int s) -{ - unsigned int i, n; - int nx, ny, nw, nh; - int nv, hrest = 0, wrest = 0, r = 1; - Client *c; - - for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); - if (n == 0) - return; - - nx = m->wx; - ny = m->wy; - nw = m->ww; - nh = m->wh; - - for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next)) { - if (r) { - if ((i % 2 && nh / 2 <= (bh + 2*c->bw)) - || (!(i % 2) && nw / 2 <= (bh + 2*c->bw))) { - r = 0; - } - if (r && i < n - 1) { - if (i % 2) { - nv = nh / 2; - hrest = nh - 2*nv; - nh = nv; - } else { - nv = nw / 2; - wrest = nw - 2*nv; - nw = nv; - } - - if ((i % 4) == 2 && !s) - nx += nw; - else if ((i % 4) == 3 && !s) - ny += nh; - } - - if ((i % 4) == 0) { - if (s) { - ny += nh; - nh += hrest; - } - else { - nh -= hrest; - ny -= nh; - } - } - else if ((i % 4) == 1) { - nx += nw; - nw += wrest; - } - else if ((i % 4) == 2) { - ny += nh; - nh += hrest; - if (i < n - 1) - nw += wrest; - } - else if ((i % 4) == 3) { - if (s) { - nx += nw; - nw -= wrest; - } else { - nw -= wrest; - nx -= nw; - nh += hrest; - } - } - if (i == 0) { - if (n != 1) { - nw = m->ww - m->ww * (1 - m->mfact); - wrest = 0; - } - ny = m->wy; - } - else if (i == 1) - nw = m->ww - nw; - i++; - } - - resize(c, nx, ny, nw - (2*c->bw), nh - (2*c->bw), False); - } -} -#endif -#if FIBONACCI_DWINDLE_LAYOUT static void dwindle(Monitor *m) { fibonacci(m, 1); } -#endif -#if FIBONACCI_SPIRAL_LAYOUT static void spiral(Monitor *m) { fibonacci(m, 0); } -#endif diff --git a/suckless/dwm/patch/layout_fibonacci.h b/suckless/dwm/patch/layout_fibonacci.h index a15eb76c..8a5ca96a 100644 --- a/suckless/dwm/patch/layout_fibonacci.h +++ b/suckless/dwm/patch/layout_fibonacci.h @@ -1,7 +1,3 @@ -#if FIBONACCI_DWINDLE_LAYOUT static void dwindle(Monitor *m); -#endif // FIBONACCI_DWINDLE_LAYOUT static void fibonacci(Monitor *m, int s); -#if FIBONACCI_SPIRAL_LAYOUT static void spiral(Monitor *m); -#endif // FIBONACCI_SPIRAL_LAYOUT \ No newline at end of file diff --git a/suckless/dwm/patch/layout_flextile-deluxe.c b/suckless/dwm/patch/layout_flextile-deluxe.c deleted file mode 100644 index 3f5cc27c..00000000 --- a/suckless/dwm/patch/layout_flextile-deluxe.c +++ /dev/null @@ -1,890 +0,0 @@ -typedef struct { - void (*arrange)(Monitor *, int, int, int, int, int, int, int); -} LayoutArranger; - -typedef struct { - void (*arrange)(Monitor *, int, int, int, int, int, int, int, int, int); -} TileArranger; - -static const LayoutArranger flexlayouts[] = { - { layout_no_split }, - { layout_split_vertical }, - { layout_split_horizontal }, - { layout_split_centered_vertical }, - { layout_split_centered_horizontal }, - { layout_split_vertical_dual_stack }, - { layout_split_horizontal_dual_stack }, - { layout_floating_master }, - { layout_split_vertical_fixed }, - { layout_split_horizontal_fixed }, - { layout_split_centered_vertical_fixed }, - { layout_split_centered_horizontal_fixed }, - { layout_split_vertical_dual_stack_fixed }, - { layout_split_horizontal_dual_stack_fixed }, - { layout_floating_master_fixed }, -}; - -static const TileArranger flextiles[] = { - { arrange_top_to_bottom }, - { arrange_left_to_right }, - { arrange_monocle }, - { arrange_gapplessgrid }, - { arrange_gapplessgrid_alt1 }, - { arrange_gapplessgrid_alt2 }, - { arrange_gridmode }, - { arrange_horizgrid }, - { arrange_dwindle }, - { arrange_spiral }, - { arrange_tatami }, -}; - -static void -getfactsforrange(Monitor *m, int an, int ai, int size, int *rest, float *fact) -{ - int i; - float facts; - Client *c; - int total = 0; - - facts = 0; - for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) - if (i >= ai && i < (ai + an)) - #if CFACTS_PATCH - facts += c->cfact; - #else - facts += 1; - #endif // CFACTS_PATCH - - for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) - if (i >= ai && i < (ai + an)) - #if CFACTS_PATCH - total += size * (c->cfact / facts); - #else - total += size / facts; - #endif // CFACTS_PATCH - - *rest = size - total; - *fact = facts; -} - -#if IPC_PATCH || DWMC_PATCH -static void -setlayoutaxisex(const Arg *arg) -{ - int axis, arr; - - axis = arg->i & 0x3; // lower two bytes indicates layout, master or stack1-2 - arr = ((arg->i & 0xFC) >> 2); // remaining six upper bytes indicate arrangement - - if ((axis == 0 && abs(arr) > LAYOUT_LAST) - || (axis > 0 && (arr > AXIS_LAST || arr < 0))) - arr = 0; - - selmon->ltaxis[axis] = arr; - #if PERTAG_PATCH - selmon->pertag->ltaxis[selmon->pertag->curtag][axis] = selmon->ltaxis[axis]; - #endif // PERTAG_PATCH - arrange(selmon); -} -#endif // IPC_PATCH | DWMC_PATCH - -static void -layout_no_split(Monitor *m, int x, int y, int h, int w, int ih, int iv, int n) -{ - (&flextiles[m->ltaxis[m->nmaster >= n ? MASTER : STACK]])->arrange(m, x, y, h, w, ih, iv, n, n, 0); -} - -static void -layout_split_vertical(Monitor *m, int x, int y, int h, int w, int ih, int iv, int n) -{ - /* Split master into master + stack if we have enough clients */ - if (m->nmaster && n > m->nmaster) { - layout_split_vertical_fixed(m, x, y, h, w, ih, iv, n); - } else { - layout_no_split(m, x, y, h, w, ih, iv, n); - } -} - -static void -layout_split_vertical_fixed(Monitor *m, int x, int y, int h, int w, int ih, int iv, int n) -{ - int sw, sx; - - sw = (w - iv) * (1 - m->mfact); - w = (w - iv) * m->mfact; - if (m->ltaxis[LAYOUT] < 0) { // mirror - sx = x; - x += sw + iv; - } else { - sx = x + w + iv; - } - - (&flextiles[m->ltaxis[MASTER]])->arrange(m, x, y, h, w, ih, iv, n, m->nmaster, 0); - (&flextiles[m->ltaxis[STACK]])->arrange(m, sx, y, h, sw, ih, iv, n, n - m->nmaster, m->nmaster); -} - -static void -layout_split_vertical_dual_stack(Monitor *m, int x, int y, int h, int w, int ih, int iv, int n) -{ - /* Split master into master + stack if we have enough clients */ - if (!m->nmaster || n <= m->nmaster) { - layout_no_split(m, x, y, h, w, ih, iv, n); - } else if (n <= m->nmaster + (m->nstack ? m->nstack : 1)) { - layout_split_vertical(m, x, y, h, w, ih, iv, n); - } else { - layout_split_vertical_dual_stack_fixed(m, x, y, h, w, ih, iv, n); - } -} - -static void -layout_split_vertical_dual_stack_fixed(Monitor *m, int x, int y, int h, int w, int ih, int iv, int n) -{ - int sh, sw, sx, oy, sc; - - if (m->nstack) - sc = m->nstack; - else - sc = (n - m->nmaster) / 2 + ((n - m->nmaster) % 2 > 0 ? 1 : 0); - - sw = (w - iv) * (1 - m->mfact); - sh = (h - ih) / 2; - w = (w - iv) * m->mfact; - oy = y + sh + ih; - if (m->ltaxis[LAYOUT] < 0) { // mirror - sx = x; - x += sw + iv; - } else { - sx = x + w + iv; - } - - (&flextiles[m->ltaxis[MASTER]])->arrange(m, x, y, h, w, ih, iv, n, m->nmaster, 0); - (&flextiles[m->ltaxis[STACK]])->arrange(m, sx, y, sh, sw, ih, iv, n, sc, m->nmaster); - (&flextiles[m->ltaxis[STACK2]])->arrange(m, sx, oy, sh, sw, ih, iv, n, n - m->nmaster - sc, m->nmaster + sc); -} - -static void -layout_split_horizontal(Monitor *m, int x, int y, int h, int w, int ih, int iv, int n) -{ - /* Split master into master + stack if we have enough clients */ - if (m->nmaster && n > m->nmaster) { - layout_split_horizontal_fixed(m, x, y, h, w, ih, iv, n); - } else { - layout_no_split(m, x, y, h, w, ih, iv, n); - } -} - -static void -layout_split_horizontal_fixed(Monitor *m, int x, int y, int h, int w, int ih, int iv, int n) -{ - int sh, sy; - - sh = (h - ih) * (1 - m->mfact); - h = (h - ih) * m->mfact; - if (m->ltaxis[LAYOUT] < 0) { // mirror - sy = y; - y += sh + ih; - } else { - sy = y + h + ih; - } - - (&flextiles[m->ltaxis[MASTER]])->arrange(m, x, y, h, w, ih, iv, n, m->nmaster, 0); - (&flextiles[m->ltaxis[STACK]])->arrange(m, x, sy, sh, w, ih, iv, n, n - m->nmaster, m->nmaster); -} - -static void -layout_split_horizontal_dual_stack(Monitor *m, int x, int y, int h, int w, int ih, int iv, int n) -{ - /* Split master into master + stack if we have enough clients */ - if (!m->nmaster || n <= m->nmaster) { - layout_no_split(m, x, y, h, w, ih, iv, n); - } else if (n <= m->nmaster + (m->nstack ? m->nstack : 1)) { - layout_split_horizontal(m, x, y, h, w, ih, iv, n); - } else { - layout_split_horizontal_dual_stack_fixed(m, x, y, h, w, ih, iv, n); - } -} - -static void -layout_split_horizontal_dual_stack_fixed(Monitor *m, int x, int y, int h, int w, int ih, int iv, int n) -{ - int sh, sy, ox, sc; - - if (m->nstack) - sc = m->nstack; - else - sc = (n - m->nmaster) / 2 + ((n - m->nmaster) % 2 > 0 ? 1 : 0); - - sh = (h - ih) * (1 - m->mfact); - h = (h - ih) * m->mfact; - sw = (w - iv) / 2; - ox = x + sw + iv; - if (m->ltaxis[LAYOUT] < 0) { // mirror - sy = y; - y += sh + ih; - } else { - sy = y + h + ih; - } - - (&flextiles[m->ltaxis[MASTER]])->arrange(m, x, y, h, w, ih, iv, n, m->nmaster, 0); - (&flextiles[m->ltaxis[STACK]])->arrange(m, x, sy, sh, sw, ih, iv, n, sc, m->nmaster); - (&flextiles[m->ltaxis[STACK2]])->arrange(m, ox, sy, sh, sw, ih, iv, n, n - m->nmaster - sc, m->nmaster + sc); -} - -static void -layout_split_centered_vertical(Monitor *m, int x, int y, int h, int w, int ih, int iv, int n) -{ - /* Split master into master + stack if we have enough clients */ - if (!m->nmaster || n <= m->nmaster) { - layout_no_split(m, x, y, h, w, ih, iv, n); - } else if (n <= m->nmaster + (m->nstack ? m->nstack : 1)) { - layout_split_vertical(m, x, y, h, w, ih, iv, n); - } else { - layout_split_centered_vertical_fixed(m, x, y, h, w, ih, iv, n); - } -} - -static void -layout_split_centered_vertical_fixed(Monitor *m, int x, int y, int h, int w, int ih, int iv, int n) -{ - int sw, sx, ox, sc; - - if (m->nstack) - sc = m->nstack; - else - sc = (n - m->nmaster) / 2 + ((n - m->nmaster) % 2 > 0 ? 1 : 0); - - sw = (w - 2*iv) * (1 - m->mfact) / 2; - w = (w - 2*iv) * m->mfact; - if (m->ltaxis[LAYOUT] < 0) { // mirror - sx = x; - x += sw + iv; - ox = x + w + iv; - } else { - ox = x; - x += sw + iv; - sx = x + w + iv; - } - - (&flextiles[m->ltaxis[MASTER]])->arrange(m, x, y, h, w, ih, iv, n, m->nmaster, 0); - (&flextiles[m->ltaxis[STACK]])->arrange(m, sx, y, h, sw, ih, iv, n, sc, m->nmaster); - (&flextiles[m->ltaxis[STACK2]])->arrange(m, ox, y, h, sw, ih, iv, n, n - m->nmaster - sc, m->nmaster + sc); -} - -static void -layout_split_centered_horizontal(Monitor *m, int x, int y, int h, int w, int ih, int iv, int n) -{ - /* Split master into master + stack if we have enough clients */ - if (!m->nmaster || n <= m->nmaster) { - layout_no_split(m, x, y, h, w, ih, iv, n); - } else if (n <= m->nmaster + (m->nstack ? m->nstack : 1)) { - layout_split_horizontal(m, x, y, h, w, ih, iv, n); - } else { - layout_split_centered_horizontal_fixed(m, x, y, h, w, ih, iv, n); - } -} - -static void -layout_split_centered_horizontal_fixed(Monitor *m, int x, int y, int h, int w, int ih, int iv, int n) -{ - int sh, sy, oy, sc; - - if (m->nstack) - sc = m->nstack; - else - sc = (n - m->nmaster) / 2 + ((n - m->nmaster) % 2 > 0 ? 1 : 0); - - sh = (h - 2*ih) * (1 - m->mfact) / 2; - h = (h - 2*ih) * m->mfact; - if (m->ltaxis[LAYOUT] < 0) { // mirror - sy = y; - y += sh + ih; - oy = y + h + ih; - } else { - oy = y; - y += sh + ih; - sy = y + h + ih; - } - - (&flextiles[m->ltaxis[MASTER]])->arrange(m, x, y, h, w, ih, iv, n, m->nmaster, 0); - (&flextiles[m->ltaxis[STACK]])->arrange(m, x, sy, sh, w, ih, iv, n, sc, m->nmaster); - (&flextiles[m->ltaxis[STACK2]])->arrange(m, x, oy, sh, w, ih, iv, n, n - m->nmaster - sc, m->nmaster + sc); -} - -static void -layout_floating_master(Monitor *m, int x, int y, int h, int w, int ih, int iv, int n) -{ - /* Split master into master + stack if we have enough clients */ - if (!m->nmaster || n <= m->nmaster) { - layout_no_split(m, x, y, h, w, ih, iv, n); - } else { - layout_floating_master_fixed(m, x, y, h, w, ih, iv, n); - } -} - -static void -layout_floating_master_fixed(Monitor *m, int x, int y, int h, int w, int ih, int iv, int n) -{ - int mh, mw; - - /* Draw stack area first */ - (&flextiles[m->ltaxis[STACK]])->arrange(m, x, y, h, w, ih, iv, n, n - m->nmaster, m->nmaster); - - if (w > h) { - mw = w * m->mfact; - mh = h * 0.9; - } else { - mw = w * 0.9; - mh = h * m->mfact; - } - x = x + (w - mw) / 2; - y = y + (h - mh) / 2; - - (&flextiles[m->ltaxis[MASTER]])->arrange(m, x, y, mh, mw, ih, iv, n, m->nmaster, 0); -} - -static void -arrange_left_to_right(Monitor *m, int x, int y, int h, int w, int ih, int iv, int n, int an, int ai) -{ - int i, rest; - float facts, fact = 1; - Client *c; - - if (ai + an > n) - an = n - ai; - - w -= iv * (an - 1); - getfactsforrange(m, an, ai, w, &rest, &facts); - for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) { - if (i >= ai && i < (ai + an)) { - #if CFACTS_PATCH - fact = c->cfact; - #endif // CFACTS_PATCH - resize(c, x, y, w * (fact / facts) + ((i - ai) < rest ? 1 : 0) - (2*c->bw), h - (2*c->bw), 0); - x += WIDTH(c) + iv; - } - } -} - -static void -arrange_top_to_bottom(Monitor *m, int x, int y, int h, int w, int ih, int iv, int n, int an, int ai) -{ - int i, rest; - float facts, fact = 1; - Client *c; - - if (ai + an > n) - an = n - ai; - - h -= ih * (an - 1); - getfactsforrange(m, an, ai, h, &rest, &facts); - for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) { - if (i >= ai && i < (ai + an)) { - #if CFACTS_PATCH - fact = c->cfact; - #endif // CFACTS_PATCH - resize(c, x, y, w - (2*c->bw), h * (fact / facts) + ((i - ai) < rest ? 1 : 0) - (2*c->bw), 0); - y += HEIGHT(c) + ih; - } - } -} - -static void -arrange_monocle(Monitor *m, int x, int y, int h, int w, int ih, int iv, int n, int an, int ai) -{ - int i; - Client *c; - - for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) - if (i >= ai && i < (ai + an)) - resize(c, x, y, w - (2*c->bw), h - (2*c->bw), 0); -} - -static void -arrange_gridmode(Monitor *m, int x, int y, int h, int w, int ih, int iv, int n, int an, int ai) -{ - int i, cols, rows, ch, cw, cx, cy, cc, cr, chrest, cwrest; // counters - Client *c; - - /* grid dimensions */ - for (rows = 0; rows <= an/2; rows++) - if (rows*rows >= an) - break; - cols = (rows && (rows - 1) * rows >= an) ? rows - 1 : rows; - - /* window geoms (cell height/width) */ - ch = (h - ih * (rows - 1)) / (rows ? rows : 1); - cw = (w - iv * (cols - 1)) / (cols ? cols : 1); - chrest = h - ih * (rows - 1) - ch * rows; - cwrest = w - iv * (cols - 1) - cw * cols; - for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) { - if (i >= ai && i < (ai + an)) { - cc = ((i - ai) / rows); // client column number - cr = ((i - ai) % rows); // client row number - cx = x + cc * (cw + iv) + MIN(cc, cwrest); - cy = y + cr * (ch + ih) + MIN(cr, chrest); - resize(c, cx, cy, cw + (cc < cwrest ? 1 : 0) - 2*c->bw, ch + (cr < chrest ? 1 : 0) - 2*c->bw, False); - } - } -} - -static void -arrange_horizgrid(Monitor *m, int x, int y, int h, int w, int ih, int iv, int n, int an, int ai) -{ - int ntop, nbottom, rh, rest; - - /* Exception when there is only one client; don't split into two rows */ - if (an == 1) { - arrange_monocle(m, x, y, h, w, ih, iv, n, an, ai); - return; - } - - ntop = an / 2; - nbottom = an - ntop; - rh = (h - ih) / 2; - rest = h - ih - rh * 2; - arrange_left_to_right(m, x, y, rh + rest, w, ih, iv, n, ntop, ai); - arrange_left_to_right(m, x, y + rh + ih + rest, rh, w, ih, iv, n, nbottom, ai + ntop); -} - -static void -arrange_gapplessgrid(Monitor *m, int x, int y, int h, int w, int ih, int iv, int n, int an, int ai) -{ - int i, cols, rows, ch, cw, cn, rn, cc, rrest, crest; // counters - Client *c; - - /* grid dimensions */ - for (cols = 1; cols <= an/2; cols++) - if (cols*cols >= an) - break; - if (an == 5) /* set layout against the general calculation: not 1:2:2, but 2:3 */ - cols = 2; - rows = an/cols; - cn = rn = cc = 0; // reset column no, row no, client count - - ch = (h - ih * (rows - 1)) / rows; - rrest = (h - ih * (rows - 1)) - ch * rows; - cw = (w - iv * (cols - 1)) / cols; - crest = (w - iv * (cols - 1)) - cw * cols; - - for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) { - if (i >= ai && i < (ai + an)) { - if (cc/rows + 1 > cols - an%cols) { - rows = an/cols + 1; - ch = (h - ih * (rows - 1)) / rows; - rrest = (h - ih * (rows - 1)) - ch * rows; - } - resize(c, - x, - y + rn*(ch + ih) + MIN(rn, rrest), - cw + (cn < crest ? 1 : 0) - 2*c->bw, - ch + (rn < rrest ? 1 : 0) - 2*c->bw, - 0); - rn++; - cc++; - if (rn >= rows) { - rn = 0; - x += cw + ih + (cn < crest ? 1 : 0); - cn++; - } - } - } -} - -/* This version of gappless grid fills rows first */ -static void -arrange_gapplessgrid_alt1(Monitor *m, int x, int y, int h, int w, int ih, int iv, int n, int an, int ai) -{ - int i, cols, rows, rest, ch; - - /* grid dimensions */ - for (cols = 1; cols <= an/2; cols++) - if (cols*cols >= an) - break; - rows = (cols && (cols - 1) * cols >= an) ? cols - 1 : cols; - ch = (h - ih * (rows - 1)) / (rows ? rows : 1); - rest = (h - ih * (rows - 1)) - ch * rows; - - for (i = 0; i < rows; i++) { - arrange_left_to_right(m, x, y, ch + (i < rest ? 1 : 0), w, ih, iv, n, MIN(cols, an - i*cols), ai + i*cols); - y += ch + (i < rest ? 1 : 0) + ih; - } -} - -/* This version of gappless grid fills columns first */ -static void -arrange_gapplessgrid_alt2(Monitor *m, int x, int y, int h, int w, int ih, int iv, int n, int an, int ai) -{ - int i, cols, rows, rest, cw; - - /* grid dimensions */ - for (rows = 0; rows <= an/2; rows++) - if (rows*rows >= an) - break; - cols = (rows && (rows - 1) * rows >= an) ? rows - 1 : rows; - cw = (w - iv * (cols - 1)) / (cols ? cols : 1); - rest = (w - iv * (cols - 1)) - cw * cols; - - for (i = 0; i < cols; i++) { - arrange_top_to_bottom(m, x, y, h, cw + (i < rest ? 1 : 0), ih, iv, n, MIN(rows, an - i*rows), ai + i*rows); - x += cw + (i < rest ? 1 : 0) + iv; - } -} - -static void -arrange_fibonacci(Monitor *m, int x, int y, int h, int w, int ih, int iv, int n, int an, int ai, int s) -{ - int i, j, nv, hrest = 0, wrest = 0, nx = x, ny = y, nw = w, nh = h, r = 1; - Client *c; - - for (i = 0, j = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), j++) { - if (j >= ai && j < (ai + an)) { - if (r) { - if ((i % 2 && ((nh - ih) / 2) <= (bh + 2*c->bw)) || (!(i % 2) && ((nw - iv) / 2) <= (bh + 2*c->bw))) { - r = 0; - } - if (r && i < an - 1) { - if (i % 2) { - nv = (nh - ih) / 2; - hrest = nh - 2*nv - ih; - nh = nv; - } else { - nv = (nw - iv) / 2; - wrest = nw - 2*nv - iv; - nw = nv; - } - - if ((i % 4) == 2 && !s) - nx += nw + iv; - else if ((i % 4) == 3 && !s) - ny += nh + ih; - } - if ((i % 4) == 0) { - if (s) { - ny += nh + ih; - nh += hrest; - } else { - nh -= hrest; - ny -= nh + ih; - } - } else if ((i % 4) == 1) { - nx += nw + iv; - nw += wrest; - } else if ((i % 4) == 2) { - ny += nh + ih; - nh += hrest; - if (i < n - 1) - nw += wrest; - } else if ((i % 4) == 3) { - if (s) { - nx += nw + iv; - nw -= wrest; - } else { - nw -= wrest; - nx -= nw + iv; - nh += hrest; - } - } - if (i == 0) { - if (an != 1) { - nw = (w - iv) - (w - iv) * (1 - m->mfact); - wrest = 0; - } - ny = y; - } else if (i == 1) - nw = w - nw - iv; - i++; - } - - resize(c, nx, ny, nw - 2 * c->bw, nh - 2*c->bw, False); - } - } -} - -static void -arrange_dwindle(Monitor *m, int x, int y, int h, int w, int ih, int iv, int n, int an, int ai) -{ - arrange_fibonacci(m, x, y, h, w, ih, iv, n, an, ai, 1); -} - -static void -arrange_spiral(Monitor *m, int x, int y, int h, int w, int ih, int iv, int n, int an, int ai) -{ - arrange_fibonacci(m, x, y, h, w, ih, iv, n, an, ai, 0); -} - -static void -arrange_tatami(Monitor *m, int x, int y, int h, int w, int ih, int iv, int n, int an, int ai) -{ - unsigned int i, j, nx, ny, nw, nh, tnx, tny, tnw, tnh, nhrest, hrest, wrest, areas, mats, cats; - Client *c; - - nx = x; - ny = y; - nw = w; - nh = h; - - mats = an / 5; - cats = an % 5; - hrest = 0; - wrest = 0; - - areas = mats + (cats > 0); - nh = (h - ih * (areas - 1)) / areas; - nhrest = (h - ih * (areas - 1)) % areas; - - for (i = 0, j = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), j++) { - if (j >= ai && j < (ai + an)) { - - tnw = nw; - tnx = nx; - tnh = nh; - tny = ny; - - if (j < ai + cats) { - /* Arrange cats (all excess clients that can't be tiled as mats). Cats sleep on mats. */ - - switch (cats) { - case 1: // fill - break; - case 2: // up and down - if ((i % 5) == 0) //up - tnh = (nh - ih) / 2 + (nh - ih) % 2; - else if ((i % 5) == 1) { //down - tny += (nh - ih) / 2 + (nh - ih) % 2 + ih; - tnh = (nh - ih) / 2; - } - break; - case 3: //bottom, up-left and up-right - if ((i % 5) == 0) { // up-left - tnw = (nw - iv) / 2 + (nw - iv) % 2; - tnh = (nh - ih) * 2 / 3 + (nh - ih) * 2 % 3; - } else if ((i % 5) == 1) { // up-right - tnx += (nw - iv) / 2 + (nw - iv) % 2 + iv; - tnw = (nw - iv) / 2; - tnh = (nh - ih) * 2 / 3 + (nh - ih) * 2 % 3; - } else if ((i % 5) == 2) { //bottom - tnh = (nh - ih) / 3; - tny += (nh - ih) * 2 / 3 + (nh - ih) * 2 % 3 + ih; - } - break; - case 4: // bottom, left, right and top - if ((i % 5) == 0) { //top - hrest = (nh - 2 * ih) % 4; - tnh = (nh - 2 * ih) / 4 + (hrest ? 1 : 0); - } else if ((i % 5) == 1) { // left - tnw = (nw - iv) / 2 + (nw - iv) % 2; - tny += (nh - 2 * ih) / 4 + (hrest ? 1 : 0) + ih; - tnh = (nh - 2 * ih) * 2 / 4 + (hrest > 1 ? 1 : 0); - } else if ((i % 5) == 2) { // right - tnx += (nw - iv) / 2 + (nw - iv) % 2 + iv; - tnw = (nw - iv) / 2; - tny += (nh - 2 * ih) / 4 + (hrest ? 1 : 0) + ih; - tnh = (nh - 2 * ih) * 2 / 4 + (hrest > 1 ? 1 : 0); - } else if ((i % 5) == 3) { // bottom - tny += (nh - 2 * ih) / 4 + (hrest ? 1 : 0) + (nh - 2 * ih) * 2 / 4 + (hrest > 1 ? 1 : 0) + 2 * ih; - tnh = (nh - 2 * ih) / 4 + (hrest > 2 ? 1 : 0); - } - break; - } - - } else { - /* Arrange mats. One mat is a collection of five clients arranged tatami style */ - - if (((i - cats) % 5) == 0) { - if ((cats > 0) || ((i - cats) >= 5)) { - tny = ny = ny + nh + (nhrest > 0 ? 1 : 0) + ih; - --nhrest; - } - } - - switch ((i - cats) % 5) { - case 0: // top-left-vert - wrest = (nw - 2 * iv) % 3; - hrest = (nh - 2 * ih) % 3; - tnw = (nw - 2 * iv) / 3 + (wrest ? 1 : 0); - tnh = (nh - 2 * ih) * 2 / 3 + hrest + iv; - break; - case 1: // top-right-hor - tnx += (nw - 2 * iv) / 3 + (wrest ? 1 : 0) + iv; - tnw = (nw - 2 * iv) * 2 / 3 + (wrest > 1 ? 1 : 0) + iv; - tnh = (nh - 2 * ih) / 3 + (hrest ? 1 : 0); - break; - case 2: // center - tnx += (nw - 2 * iv) / 3 + (wrest ? 1 : 0) + iv; - tnw = (nw - 2 * iv) / 3 + (wrest > 1 ? 1 : 0); - tny += (nh - 2 * ih) / 3 + (hrest ? 1 : 0) + ih; - tnh = (nh - 2 * ih) / 3 + (hrest > 1 ? 1 : 0); - break; - case 3: // bottom-right-vert - tnx += (nw - 2 * iv) * 2 / 3 + wrest + 2 * iv; - tnw = (nw - 2 * iv) / 3; - tny += (nh - 2 * ih) / 3 + (hrest ? 1 : 0) + ih; - tnh = (nh - 2 * ih) * 2 / 3 + hrest + iv; - break; - case 4: // (oldest) bottom-left-hor - tnw = (nw - 2 * iv) * 2 / 3 + wrest + iv; - tny += (nh - 2 * ih) * 2 / 3 + hrest + 2 * iv; - tnh = (nh - 2 * ih) / 3; - break; - } - - } - - resize(c, tnx, tny, tnw - 2 * c->bw, tnh - 2 * c->bw, False); - ++i; - } - } -} - -static void -flextile(Monitor *m) -{ - unsigned int n; - int oh = 0, ov = 0, ih = 0, iv = 0; // gaps outer/inner horizontal/vertical - - #if VANITYGAPS_PATCH - getgaps(m, &oh, &ov, &ih, &iv, &n); - #else - Client *c; - for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); - #endif // VANITYGAPS_PATCH - - if (m->lt[m->sellt]->preset.layout != m->ltaxis[LAYOUT] || - m->lt[m->sellt]->preset.masteraxis != m->ltaxis[MASTER] || - m->lt[m->sellt]->preset.stack1axis != m->ltaxis[STACK] || - m->lt[m->sellt]->preset.stack2axis != m->ltaxis[STACK2]) - setflexsymbols(m, n); - else if (m->lt[m->sellt]->preset.symbolfunc != NULL) - m->lt[m->sellt]->preset.symbolfunc(m, n); - - if (n == 0) - return; - - #if VANITYGAPS_PATCH && !VANITYGAPS_MONOCLE_PATCH - /* No outer gap if full screen monocle */ - if (abs(m->ltaxis[MASTER]) == MONOCLE && (abs(m->ltaxis[LAYOUT]) == NO_SPLIT || n <= m->nmaster)) { - oh = 0; - ov = 0; - } - #endif // VANITYGAPS_PATCH && !VANITYGAPS_MONOCLE_PATCH - - (&flexlayouts[abs(m->ltaxis[LAYOUT])])->arrange(m, m->wx + ov, m->wy + oh, m->wh - 2*oh, m->ww - 2*ov, ih, iv, n); - return; -} - -static void -setflexsymbols(Monitor *m, unsigned int n) -{ - int l; - char sym1, sym2, sym3; - Client *c; - - if (n == 0) - for (c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); - - l = abs(m->ltaxis[LAYOUT]); - if (m->ltaxis[MASTER] == MONOCLE && (l == NO_SPLIT || !m->nmaster || n <= m->nmaster)) { - monoclesymbols(m, n); - return; - } - - if (m->ltaxis[STACK] == MONOCLE && (l == SPLIT_VERTICAL || l == SPLIT_HORIZONTAL_FIXED)) { - decksymbols(m, n); - return; - } - - /* Layout symbols */ - if (l == NO_SPLIT || !m->nmaster) { - sym1 = sym2 = sym3 = (int)tilesymb[m->ltaxis[MASTER]]; - } else { - sym2 = layoutsymb[l]; - if (m->ltaxis[LAYOUT] < 0) { - sym1 = tilesymb[m->ltaxis[STACK]]; - sym3 = tilesymb[m->ltaxis[MASTER]]; - } else { - sym1 = tilesymb[m->ltaxis[MASTER]]; - sym3 = tilesymb[m->ltaxis[STACK]]; - } - } - - snprintf(m->ltsymbol, sizeof m->ltsymbol, "%c%c%c", sym1, sym2, sym3); -} - -static void -monoclesymbols(Monitor *m, unsigned int n) -{ - if (n > 0) - snprintf(m->ltsymbol, sizeof m->ltsymbol, "[%d]", n); - else - snprintf(m->ltsymbol, sizeof m->ltsymbol, "[M]"); -} - -static void -decksymbols(Monitor *m, unsigned int n) -{ - if (n > m->nmaster) - snprintf(m->ltsymbol, sizeof m->ltsymbol, "[]%d", n); - else - snprintf(m->ltsymbol, sizeof m->ltsymbol, "[D]"); -} - -/* Mirror layout axis for flextile */ -void -mirrorlayout(const Arg *arg) -{ - if (!selmon->lt[selmon->sellt]->arrange) - return; - selmon->ltaxis[LAYOUT] *= -1; - #if PERTAG_PATCH - selmon->pertag->ltaxis[selmon->pertag->curtag][0] = selmon->ltaxis[LAYOUT]; - #endif // PERTAG_PATCH - arrange(selmon); -} - -/* Rotate layout axis for flextile */ -void -rotatelayoutaxis(const Arg *arg) -{ - int incr = (arg->i > 0 ? 1 : -1); - int axis = abs(arg->i) - 1; - - if (!selmon->lt[selmon->sellt]->arrange) - return; - if (axis == LAYOUT) { - if (selmon->ltaxis[LAYOUT] >= 0) { - selmon->ltaxis[LAYOUT] += incr; - if (selmon->ltaxis[LAYOUT] >= LAYOUT_LAST) - selmon->ltaxis[LAYOUT] = 0; - else if (selmon->ltaxis[LAYOUT] < 0) - selmon->ltaxis[LAYOUT] = LAYOUT_LAST - 1; - } else { - selmon->ltaxis[LAYOUT] -= incr; - if (selmon->ltaxis[LAYOUT] <= -LAYOUT_LAST) - selmon->ltaxis[LAYOUT] = 0; - else if (selmon->ltaxis[LAYOUT] > 0) - selmon->ltaxis[LAYOUT] = -LAYOUT_LAST + 1; - } - } else { - selmon->ltaxis[axis] += incr; - if (selmon->ltaxis[axis] >= AXIS_LAST) - selmon->ltaxis[axis] = 0; - else if (selmon->ltaxis[axis] < 0) - selmon->ltaxis[axis] = AXIS_LAST - 1; - } - #if PERTAG_PATCH - selmon->pertag->ltaxis[selmon->pertag->curtag][axis] = selmon->ltaxis[axis]; - #endif // PERTAG_PATCH - arrange(selmon); - setflexsymbols(selmon, 0); -} - -void -incnstack(const Arg *arg) -{ - #if PERTAG_PATCH - selmon->nstack = selmon->pertag->nstacks[selmon->pertag->curtag] = MAX(selmon->nstack + arg->i, 0); - #else - selmon->nstack = MAX(selmon->nstack + arg->i, 0); - #endif // PERTAG_PATCH - arrange(selmon); -} diff --git a/suckless/dwm/patch/layout_flextile-deluxe.h b/suckless/dwm/patch/layout_flextile-deluxe.h deleted file mode 100644 index 9ec7324c..00000000 --- a/suckless/dwm/patch/layout_flextile-deluxe.h +++ /dev/null @@ -1,120 +0,0 @@ -static void flextile(Monitor *m); -static void getfactsforrange(Monitor *m, int an, int ai, int size, int *rest, float *fact); -static void mirrorlayout(const Arg *arg); -static void rotatelayoutaxis(const Arg *arg); -#if IPC_PATCH || DWMC_PATCH -static void setlayoutaxisex(const Arg *arg); -#endif // IPC_PATCH | DWMC_PATCH -static void incnstack(const Arg *arg); - -/* Symbol handlers */ -static void setflexsymbols(Monitor *m, unsigned int n); -static void monoclesymbols(Monitor *m, unsigned int n); -static void decksymbols(Monitor *m, unsigned int n); - -/* Layout split */ -static void layout_no_split(Monitor *m, int x, int y, int h, int w, int ih, int iv, int n); -static void layout_split_vertical(Monitor *m, int x, int y, int h, int w, int ih, int iv, int n); -static void layout_split_horizontal(Monitor *m, int x, int y, int h, int w, int ih, int iv, int n); -static void layout_split_vertical_dual_stack(Monitor *m, int x, int y, int h, int w, int ih, int iv, int n); -static void layout_split_horizontal_dual_stack(Monitor *m, int x, int y, int h, int w, int ih, int iv, int n); -static void layout_split_centered_vertical(Monitor *m, int x, int y, int h, int w, int ih, int iv, int n); -static void layout_split_centered_horizontal(Monitor *m, int x, int y, int h, int w, int ih, int iv, int n); -static void layout_floating_master(Monitor *m, int x, int y, int h, int w, int ih, int iv, int n); -static void layout_split_vertical_fixed(Monitor *m, int x, int y, int h, int w, int ih, int iv, int n); -static void layout_split_horizontal_fixed(Monitor *m, int x, int y, int h, int w, int ih, int iv, int n); -static void layout_split_vertical_dual_stack_fixed(Monitor *m, int x, int y, int h, int w, int ih, int iv, int n); -static void layout_split_horizontal_dual_stack_fixed(Monitor *m, int x, int y, int h, int w, int ih, int iv, int n); -static void layout_split_centered_vertical_fixed(Monitor *m, int x, int y, int h, int w, int ih, int iv, int n); -static void layout_split_centered_horizontal_fixed(Monitor *m, int x, int y, int h, int w, int ih, int iv, int n); -static void layout_floating_master_fixed(Monitor *m, int x, int y, int h, int w, int ih, int iv, int n); - -/* Layout tile arrangements */ -static void arrange_left_to_right(Monitor *m, int ax, int ay, int ah, int aw, int ih, int iv, int n, int an, int ai); -static void arrange_top_to_bottom(Monitor *m, int ax, int ay, int ah, int aw, int ih, int iv, int n, int an, int ai); -static void arrange_monocle(Monitor *m, int ax, int ay, int ah, int aw, int ih, int iv, int n, int an, int ai); -static void arrange_gapplessgrid(Monitor *m, int ax, int ay, int ah, int aw, int ih, int iv, int n, int an, int ai); -static void arrange_gapplessgrid_alt1(Monitor *m, int ax, int ay, int ah, int aw, int ih, int iv, int n, int an, int ai); -static void arrange_gapplessgrid_alt2(Monitor *m, int ax, int ay, int ah, int aw, int ih, int iv, int n, int an, int ai); -static void arrange_gridmode(Monitor *m, int ax, int ay, int ah, int aw, int ih, int iv, int n, int an, int ai); -static void arrange_horizgrid(Monitor *m, int ax, int ay, int ah, int aw, int ih, int iv, int n, int an, int ai); -static void arrange_dwindle(Monitor *m, int ax, int ay, int ah, int aw, int ih, int iv, int n, int an, int ai); -static void arrange_spiral(Monitor *m, int ax, int ay, int ah, int aw, int ih, int iv, int n, int an, int ai); -static void arrange_tatami(Monitor *m, int ax, int ay, int ah, int aw, int ih, int iv, int n, int an, int ai); - -/* Named flextile constants */ -enum { - LAYOUT, // controls overall layout arrangement / split - MASTER, // indicates the tile arrangement for the master area - STACK, // indicates the tile arrangement for the stack area - STACK2, // indicates the tile arrangement for the secondary stack area - LTAXIS_LAST, -}; - -/* Layout arrangements */ -enum { - NO_SPLIT, - SPLIT_VERTICAL, // master stack vertical split - SPLIT_HORIZONTAL, // master stack horizontal split - SPLIT_CENTERED_VERTICAL, // centered master vertical split - SPLIT_CENTERED_HORIZONTAL, // centered master horizontal split - SPLIT_VERTICAL_DUAL_STACK, // master stack vertical split with dual stack - SPLIT_HORIZONTAL_DUAL_STACK, // master stack vertical split with dual stack - FLOATING_MASTER, // (fake) floating master - SPLIT_VERTICAL_FIXED, // master stack vertical fixed split - SPLIT_HORIZONTAL_FIXED, // master stack horizontal fixed split - SPLIT_CENTERED_VERTICAL_FIXED, // centered master vertical fixed split - SPLIT_CENTERED_HORIZONTAL_FIXED, // centered master horizontal fixed split - SPLIT_VERTICAL_DUAL_STACK_FIXED, // master stack vertical split with fixed dual stack - SPLIT_HORIZONTAL_DUAL_STACK_FIXED, // master stack vertical split with fixed dual stack - FLOATING_MASTER_FIXED, // (fake) fixed floating master - LAYOUT_LAST, -}; - -static char layoutsymb[] = { - 32, // " ", - 124, // "|", - 61, // "=", - 94, // "^", - 126, // "~", - 58, // ":", - 59, // ";", - 43, // "+", - 124, // "¦", - 61, // "=", - 94, // "^", - 126, // "~", - 58, // ":", - 59, // ";", - 43, // "+", -}; - -/* Tile arrangements */ -enum { - TOP_TO_BOTTOM, // clients are arranged vertically - LEFT_TO_RIGHT, // clients are arranged horizontally - MONOCLE, // clients are arranged in deck / monocle mode - GAPPLESSGRID, // clients are arranged in a gappless grid (original formula) - GAPPLESSGRID_ALT1, // clients are arranged in a gappless grid (alt. 1, fills rows first) - GAPPLESSGRID_ALT2, // clients are arranged in a gappless grid (alt. 2, fills columns first) - GRIDMODE, // clients are arranged in a grid - HORIZGRID, // clients are arranged in a horizontal grid - DWINDLE, // clients are arranged in fibonacci dwindle mode - SPIRAL, // clients are arranged in fibonacci spiral mode - TATAMI, // clients are arranged as tatami mats - AXIS_LAST, -}; - -static char tilesymb[] = { - 61, // "=", - 124, // "|", - 68, // "D", - 71, // "G", - 49, // "1", - 50, // "2" - 35, // "#", - 126, // "~", - 92, // "\\", - 64, // "@", - 84, // "T", -}; diff --git a/suckless/dwm/patch/layout_gapplessgrid.c b/suckless/dwm/patch/layout_gapplessgrid.c deleted file mode 100644 index 0330181e..00000000 --- a/suckless/dwm/patch/layout_gapplessgrid.c +++ /dev/null @@ -1,98 +0,0 @@ -#if VANITYGAPS_PATCH -void -gaplessgrid(Monitor *m) -{ - unsigned int i, n; - int x, y, cols, rows, ch, cw, cn, rn, rrest, crest; // counters - int oh, ov, ih, iv; - Client *c; - - getgaps(m, &oh, &ov, &ih, &iv, &n); - if (n == 0) - return; - - /* grid dimensions */ - for (cols = 0; cols <= n/2; cols++) - if (cols*cols >= n) - break; - if (n == 5) /* set layout against the general calculation: not 1:2:2, but 2:3 */ - cols = 2; - rows = n/cols; - cn = rn = 0; // reset column no, row no, client count - - ch = (m->wh - 2*oh - ih * (rows - 1)) / rows; - cw = (m->ww - 2*ov - iv * (cols - 1)) / cols; - rrest = (m->wh - 2*oh - ih * (rows - 1)) - ch * rows; - crest = (m->ww - 2*ov - iv * (cols - 1)) - cw * cols; - x = m->wx + ov; - y = m->wy + oh; - - for (i = 0, c = nexttiled(m->clients); c; i++, c = nexttiled(c->next)) { - if (i/rows + 1 > cols - n%cols) { - rows = n/cols + 1; - ch = (m->wh - 2*oh - ih * (rows - 1)) / rows; - rrest = (m->wh - 2*oh - ih * (rows - 1)) - ch * rows; - } - resize(c, - x, - y + rn*(ch + ih) + MIN(rn, rrest), - cw + (cn < crest ? 1 : 0) - 2*c->bw, - ch + (rn < rrest ? 1 : 0) - 2*c->bw, - 0); - rn++; - if (rn >= rows) { - rn = 0; - x += cw + ih + (cn < crest ? 1 : 0); - cn++; - } - } -} -#else -void -gaplessgrid(Monitor *m) -{ - unsigned int i, n; - int x, y, cols, rows, ch, cw, cn, rn, rrest, crest; // counters - Client *c; - - for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); - if (n == 0) - return; - - /* grid dimensions */ - for (cols = 0; cols <= n/2; cols++) - if (cols*cols >= n) - break; - if (n == 5) /* set layout against the general calculation: not 1:2:2, but 2:3 */ - cols = 2; - rows = n/cols; - cn = rn = 0; // reset column no, row no, client count - - ch = m->wh / rows; - cw = m->ww / cols; - rrest = m->wh - ch * rows; - crest = m->ww - cw * cols; - x = m->wx; - y = m->wy; - - for (i = 0, c = nexttiled(m->clients); c; i++, c = nexttiled(c->next)) { - if (i/rows + 1 > cols - n%cols) { - rows = n/cols + 1; - ch = m->wh / rows; - rrest = m->wh - ch * rows; - } - resize(c, - x, - y + rn*ch + MIN(rn, rrest), - cw + (cn < crest ? 1 : 0) - 2*c->bw, - ch + (rn < rrest ? 1 : 0) - 2*c->bw, - 0); - rn++; - if (rn >= rows) { - rn = 0; - x += cw + (cn < crest ? 1 : 0); - cn++; - } - } -} -#endif diff --git a/suckless/dwm/patch/layout_gapplessgrid.h b/suckless/dwm/patch/layout_gapplessgrid.h deleted file mode 100644 index 28a7b5d4..00000000 --- a/suckless/dwm/patch/layout_gapplessgrid.h +++ /dev/null @@ -1 +0,0 @@ -static void gaplessgrid(Monitor *m); \ No newline at end of file diff --git a/suckless/dwm/patch/layout_grid.c b/suckless/dwm/patch/layout_grid.c index df198963..8e93e364 100644 --- a/suckless/dwm/patch/layout_grid.c +++ b/suckless/dwm/patch/layout_grid.c @@ -1,4 +1,3 @@ -#if VANITYGAPS_PATCH void grid(Monitor *m) { @@ -28,33 +27,3 @@ grid(Monitor *m) resize(c, cx, cy, cw + (cc < cwrest ? 1 : 0) - 2*c->bw, ch + (cr < chrest ? 1 : 0) - 2*c->bw, False); } } -#else -void -grid(Monitor *m) -{ - unsigned int i, n; - int cx, cy, cw, ch, cc, cr, chrest, cwrest, cols, rows; - Client *c; - - for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); - - /* grid dimensions */ - for (rows = 0; rows <= n/2; rows++) - if (rows*rows >= n) - break; - cols = (rows && (rows - 1) * rows >= n) ? rows - 1 : rows; - - /* window geoms (cell height/width) */ - ch = m->wh / (rows ? rows : 1); - cw = m->ww / (cols ? cols : 1); - chrest = m->wh - ch * rows; - cwrest = m->ww - cw * cols; - for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) { - cc = i / rows; - cr = i % rows; - cx = m->wx + cc * cw + MIN(cc, cwrest); - cy = m->wy + cr * ch + MIN(cr, chrest); - resize(c, cx, cy, cw + (cc < cwrest ? 1 : 0) - 2*c->bw, ch + (cr < chrest ? 1 : 0) - 2*c->bw, False); - } -} -#endif \ No newline at end of file diff --git a/suckless/dwm/patch/layout_grid.h b/suckless/dwm/patch/layout_grid.h index 81149ce5..e3455d25 100644 --- a/suckless/dwm/patch/layout_grid.h +++ b/suckless/dwm/patch/layout_grid.h @@ -1 +1 @@ -static void grid(Monitor *m); \ No newline at end of file +static void grid(Monitor *m); diff --git a/suckless/dwm/patch/layout_horizgrid.c b/suckless/dwm/patch/layout_horizgrid.c deleted file mode 100644 index 48f66abe..00000000 --- a/suckless/dwm/patch/layout_horizgrid.c +++ /dev/null @@ -1,103 +0,0 @@ -void -horizgrid(Monitor *m) { - Client *c; - unsigned int n, i; - int mx = 0, my = 0, mh = 0, mw = 0; - int sx = 0, sy = 0, sh = 0, sw = 0; - int ntop; - float mfacts = 0, sfacts = 0; - int mrest, srest, mtotal = 0, stotal = 0; - - #if VANITYGAPS_PATCH - int oh, ov, ih, iv; - getgaps(m, &oh, &ov, &ih, &iv, &n); - #else - for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); - #endif // VANITYGAPS_PATCH - if (n == 0) - return; - - if (n <= 2) - ntop = n; - else { - ntop = n / 2; - } - - #if VANITYGAPS_PATCH - sx = mx = m->wx + ov; - sy = my = m->wy + oh; - sh = mh = m->wh - 2*oh; - sw = mw = m->ww - 2*ov; - - if (n > ntop) { - sh = (mh - ih) / 2; - mh = mh - ih - sh; - sy = my + mh + ih; - mw = m->ww - 2*ov - iv * (ntop - 1); - sw = m->ww - 2*ov - iv * (n - ntop - 1); - } - #else - sx = mx = m->wx; - sy = my = m->wy; - sh = mh = m->wh; - sw = mw = m->ww; - - if (n > ntop) { - sh = mh / 2; - mh = mh - sh; - sy = my + mh; - } - #endif // VANITYGAPS_PATCH - - /* calculate facts */ - #if CFACTS_PATCH - for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) - if (i < ntop) - mfacts += c->cfact; - else - sfacts += c->cfact; - - for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) - if (i < ntop) - mtotal += mh * (c->cfact / mfacts); - else - stotal += sw * (c->cfact / sfacts); - #else - mfacts = ntop; - sfacts = n - ntop; - - for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) - if (i < ntop) - mtotal += mh / mfacts; - else - stotal += sw / sfacts; - #endif // CFACTS_PATCH - - mrest = mh - mtotal; - srest = sw - stotal; - - for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) - if (i < ntop) { - #if CFACTS_PATCH - resize(c, mx, my, mw * (c->cfact / mfacts) + (i < mrest ? 1 : 0) - (2*c->bw), mh - (2*c->bw), 0); - #else - resize(c, mx, my, mw / mfacts + (i < mrest ? 1 : 0) - (2*c->bw), mh - (2*c->bw), 0); - #endif // CFACTS_PATCH - #if VANITYGAPS_PATCH - mx += WIDTH(c) + iv; - #else - mx += WIDTH(c); - #endif // VANITYGAPS_PATCH - } else { - #if CFACTS_PATCH - resize(c, sx, sy, sw * (c->cfact / sfacts) + ((i - ntop) < srest ? 1 : 0) - (2*c->bw), sh - (2*c->bw), 0); - #else - resize(c, sx, sy, sw / sfacts + ((i - ntop) < srest ? 1 : 0) - (2*c->bw), sh - (2*c->bw), 0); - #endif // CFACTS_PATCH - #if VANITYGAPS_PATCH - sx += WIDTH(c) + iv; - #else - sx += WIDTH(c); - #endif // VANITYGAPS_PATCH - } -} \ No newline at end of file diff --git a/suckless/dwm/patch/layout_horizgrid.h b/suckless/dwm/patch/layout_horizgrid.h deleted file mode 100644 index 71a57fbb..00000000 --- a/suckless/dwm/patch/layout_horizgrid.h +++ /dev/null @@ -1 +0,0 @@ -static void horizgrid(Monitor *m); \ No newline at end of file diff --git a/suckless/dwm/patch/layout_monocle.c b/suckless/dwm/patch/layout_monocle.c index 1533aa97..72421b3a 100644 --- a/suckless/dwm/patch/layout_monocle.c +++ b/suckless/dwm/patch/layout_monocle.c @@ -1,4 +1,3 @@ -#if VANITYGAPS_PATCH && VANITYGAPS_MONOCLE_PATCH void monocle(Monitor *m) { @@ -8,30 +7,8 @@ monocle(Monitor *m) getgaps(m, &oh, &ov, &ih, &iv, &n); - #if !MONOCLESYMBOL_PATCH if (n > 0) /* override layout symbol */ snprintf(m->ltsymbol, sizeof m->ltsymbol, "[%d]", n); - #endif // MONOCLESYMBOL_PATCH for (c = nexttiled(m->clients); c; c = nexttiled(c->next)) resize(c, m->wx + ov, m->wy + oh, m->ww - 2 * c->bw - 2 * ov, m->wh - 2 * c->bw - 2 * oh, 0); } -#else -void -monocle(Monitor *m) -{ - #if !MONOCLESYMBOL_PATCH - unsigned int n = 0; - #endif // MONOCLESYMBOL_PATCH - Client *c; - - #if !MONOCLESYMBOL_PATCH - 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); - #endif // MONOCLESYMBOL_PATCH - 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); -} -#endif // VANITYGAPS_PATCH \ No newline at end of file diff --git a/suckless/dwm/patch/layout_monocle.h b/suckless/dwm/patch/layout_monocle.h index d3df9604..d835b5ff 100644 --- a/suckless/dwm/patch/layout_monocle.h +++ b/suckless/dwm/patch/layout_monocle.h @@ -1 +1 @@ -static void monocle(Monitor *m); \ No newline at end of file +static void monocle(Monitor *m); diff --git a/suckless/dwm/patch/layout_nrowgrid.c b/suckless/dwm/patch/layout_nrowgrid.c deleted file mode 100644 index 5709d806..00000000 --- a/suckless/dwm/patch/layout_nrowgrid.c +++ /dev/null @@ -1,103 +0,0 @@ -#if VANITYGAPS_PATCH -void -nrowgrid(Monitor *m) -{ - unsigned int n = 0, i = 0, ri = 0, ci = 0; /* counters */ - int oh, ov, ih, iv; /* vanitygap settings */ - unsigned int cx, cy, cw, ch; /* client geometry */ - unsigned int uw = 0, uh = 0, uc = 0; /* utilization trackers */ - unsigned int cols, rows = m->nmaster + 1; - Client *c; - - /* count clients */ - getgaps(m, &oh, &ov, &ih, &iv, &n); - - /* nothing to do here */ - if (n == 0) - return; - - /* force 2 clients to always split vertically */ - if (FORCE_VSPLIT && n == 2) - rows = 1; - - /* never allow empty rows */ - if (n < rows) - rows = n; - - /* define first row */ - cols = n / rows; - uc = cols; - cy = m->wy + oh; - ch = (m->wh - 2*oh - ih*(rows - 1)) / rows; - uh = ch; - - for (c = nexttiled(m->clients); c; c = nexttiled(c->next), i++, ci++) { - if (ci == cols) { - uw = 0; - ci = 0; - ri++; - - /* next row */ - cols = (n - uc) / (rows - ri); - uc += cols; - cy = m->wy + oh + uh + ih; - uh += ch + ih; - } - - cx = m->wx + ov + uw; - cw = (m->ww - 2*ov - uw) / (cols - ci); - uw += cw + iv; - - resize(c, cx, cy, cw - (2*c->bw), ch - (2*c->bw), 0); - } -} -#else -void -nrowgrid(Monitor *m) -{ - unsigned int n = 0, i = 0, ri = 0, ci = 0; /* counters */ - unsigned int cx, cy, cw, ch; /* client geometry */ - unsigned int uw = 0, uh = 0, uc = 0; /* utilization trackers */ - unsigned int cols, rows = m->nmaster + 1; - Client *c; - - for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); - if (n == 0) - return; - - /* force 2 clients to always split vertically */ - if (FORCE_VSPLIT && n == 2) - rows = 1; - - /* never allow empty rows */ - if (n < rows) - rows = n; - - /* define first row */ - cols = n / rows; - uc = cols; - cy = m->wy; - ch = m->wh / rows; - uh = ch; - - for (c = nexttiled(m->clients); c; c = nexttiled(c->next), i++, ci++) { - if (ci == cols) { - uw = 0; - ci = 0; - ri++; - - /* next row */ - cols = (n - uc) / (rows - ri); - uc += cols; - cy = m->wy + uh; - uh += ch; - } - - cx = m->wx + uw; - cw = (m->ww - uw) / (cols - ci); - uw += cw; - - resize(c, cx, cy, cw - (2*c->bw), ch - (2*c->bw), 0); - } -} -#endif \ No newline at end of file diff --git a/suckless/dwm/patch/layout_nrowgrid.h b/suckless/dwm/patch/layout_nrowgrid.h deleted file mode 100644 index de71a504..00000000 --- a/suckless/dwm/patch/layout_nrowgrid.h +++ /dev/null @@ -1 +0,0 @@ -static void nrowgrid(Monitor *m); \ No newline at end of file diff --git a/suckless/dwm/patch/layout_tile.c b/suckless/dwm/patch/layout_tile.c index fa0b90a4..f02a7729 100644 --- a/suckless/dwm/patch/layout_tile.c +++ b/suckless/dwm/patch/layout_tile.c @@ -9,17 +9,12 @@ tile(Monitor *m) Client *c; - #if VANITYGAPS_PATCH int oh, ov, ih, iv; getgaps(m, &oh, &ov, &ih, &iv, &n); - #else - for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); - #endif // VANITYGAPS_PATCH if (n == 0) return; - #if VANITYGAPS_PATCH sx = mx = m->wx + ov; sy = my = m->wy + oh; mh = m->wh - 2*oh - ih * (MIN(n, m->nmaster) - 1); @@ -31,43 +26,15 @@ tile(Monitor *m) mw = (mw - iv) * m->mfact; sx = mx + mw + iv; } - #else - sx = mx = m->wx; - sy = my = m->wy; - sh = mh = m->wh; - sw = mw = m->ww; - - if (m->nmaster && n > m->nmaster) { - sw = mw * (1 - m->mfact); - mw = mw * m->mfact; - sx = mx + mw; - } - #endif // VANITYGAPS_PATCH getfacts(m, mh, sh, &mfacts, &sfacts, &mrest, &srest); for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) if (i < m->nmaster) { - #if CFACTS_PATCH - resize(c, mx, my, mw - (2*c->bw), (mh / mfacts) * c->cfact + (i < mrest ? 1 : 0) - (2*c->bw), 0); - #else resize(c, mx, my, mw - (2*c->bw), (mh / mfacts) + (i < mrest ? 1 : 0) - (2*c->bw), 0); - #endif // CFACTS_PATCH - #if VANITYGAPS_PATCH my += HEIGHT(c) + ih; - #else - my += HEIGHT(c); - #endif } else { - #if CFACTS_PATCH - resize(c, sx, sy, sw - (2*c->bw), (sh / sfacts) * c->cfact + ((i - m->nmaster) < srest ? 1 : 0) - (2*c->bw), 0); - #else resize(c, sx, sy, sw - (2*c->bw), (sh / sfacts) + ((i - m->nmaster) < srest ? 1 : 0) - (2*c->bw), 0); - #endif // CFACTS_PATCH - #if VANITYGAPS_PATCH sy += HEIGHT(c) + ih; - #else - sy += HEIGHT(c); - #endif } -} \ No newline at end of file +} diff --git a/suckless/dwm/patch/layout_tile.h b/suckless/dwm/patch/layout_tile.h index 8730e132..d24397ed 100644 --- a/suckless/dwm/patch/layout_tile.h +++ b/suckless/dwm/patch/layout_tile.h @@ -1 +1 @@ -static void tile(Monitor *); \ No newline at end of file +static void tile(Monitor *); diff --git a/suckless/dwm/patch/maximize.c b/suckless/dwm/patch/maximize.c deleted file mode 100644 index 53336eba..00000000 --- a/suckless/dwm/patch/maximize.c +++ /dev/null @@ -1,69 +0,0 @@ -void -maximize(int x, int y, int w, int h) -{ - XEvent ev; - - if (!selmon->sel || selmon->sel->isfixed) - return; - XRaiseWindow(dpy, selmon->sel->win); - if (!selmon->sel->ismax) { - if (!selmon->lt[selmon->sellt]->arrange || selmon->sel->isfloating) - selmon->sel->wasfloating = True; - else { - togglefloating(NULL); - selmon->sel->wasfloating = False; - } - selmon->sel->oldx = selmon->sel->x; - selmon->sel->oldy = selmon->sel->y; - selmon->sel->oldw = selmon->sel->w; - selmon->sel->oldh = selmon->sel->h; - resize(selmon->sel, x, y, w, h, True); - selmon->sel->ismax = True; - } - else { - resize(selmon->sel, selmon->sel->oldx, selmon->sel->oldy, selmon->sel->oldw, selmon->sel->oldh, True); - if (!selmon->sel->wasfloating) - togglefloating(NULL); - selmon->sel->ismax = False; - } - drawbar(selmon); - while (XCheckMaskEvent(dpy, EnterWindowMask, &ev)); -} - -#if SETBORDERPX_PATCH -void -togglemax(const Arg *arg) -{ - maximize(selmon->wx, selmon->wy, selmon->ww - 2 * selmon->borderpx, selmon->wh - 2 * selmon->borderpx); -} - -void -toggleverticalmax(const Arg *arg) -{ - maximize(selmon->sel->x, selmon->wy, selmon->sel->w, selmon->wh - 2 * selmon->borderpx); -} - -void -togglehorizontalmax(const Arg *arg) -{ - maximize(selmon->wx, selmon->sel->y, selmon->ww - 2 * selmon->borderpx, selmon->sel->h); -} -#else -void -togglemax(const Arg *arg) -{ - maximize(selmon->wx, selmon->wy, selmon->ww - 2 * borderpx, selmon->wh - 2 * borderpx); -} - -void -toggleverticalmax(const Arg *arg) -{ - maximize(selmon->sel->x, selmon->wy, selmon->sel->w, selmon->wh - 2 * borderpx); -} - -void -togglehorizontalmax(const Arg *arg) -{ - maximize(selmon->wx, selmon->sel->y, selmon->ww - 2 * borderpx, selmon->sel->h); -} -#endif // SETBORDERPX_PATCH \ No newline at end of file diff --git a/suckless/dwm/patch/maximize.h b/suckless/dwm/patch/maximize.h deleted file mode 100644 index e06a3ffe..00000000 --- a/suckless/dwm/patch/maximize.h +++ /dev/null @@ -1,4 +0,0 @@ -static void maximize(int x, int y, int w, int h); -static void togglemax(const Arg *arg); -static void toggleverticalmax(const Arg *arg); -static void togglehorizontalmax(const Arg *arg); \ No newline at end of file diff --git a/suckless/dwm/patch/moveplace.c b/suckless/dwm/patch/moveplace.c deleted file mode 100644 index cfd17a47..00000000 --- a/suckless/dwm/patch/moveplace.c +++ /dev/null @@ -1,29 +0,0 @@ -void -moveplace(const Arg *arg) -{ - Client *c; - int nh, nw, nx, ny; - c = selmon->sel; - if (!c || (arg->ui >= 9)) - return; - if (selmon->lt[selmon->sellt]->arrange && !c->isfloating) - togglefloating(NULL); - nh = (selmon->wh / 3) - (c->bw * 2); - nw = (selmon->ww / 3) - (c->bw * 2); - nx = (arg->ui % 3) -1; - ny = (arg->ui / 3) -1; - if (nx < 0) - nx = selmon->wx; - else if (nx > 0) - nx = selmon->wx + selmon->ww - nw - c->bw*2; - else - nx = selmon->wx + selmon->ww/2 - nw/2 - c->bw; - if (ny <0) - ny = selmon->wy; - else if (ny > 0) - ny = selmon->wy + selmon->wh - nh - c->bw*2; - else - ny = selmon->wy + selmon->wh/2 - nh/2 - c->bw; - resize(c, nx, ny, nw, nh, True); - XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, nw/2, nh/2); -} \ No newline at end of file diff --git a/suckless/dwm/patch/moveplace.h b/suckless/dwm/patch/moveplace.h deleted file mode 100644 index f921b8e3..00000000 --- a/suckless/dwm/patch/moveplace.h +++ /dev/null @@ -1,3 +0,0 @@ -enum { WIN_NW, WIN_N, WIN_NE, WIN_W, WIN_C, WIN_E, WIN_SW, WIN_S, WIN_SE }; - -static void moveplace(const Arg *arg); \ No newline at end of file diff --git a/suckless/dwm/patch/moveresize.c b/suckless/dwm/patch/moveresize.c deleted file mode 100644 index 35f0a2f0..00000000 --- a/suckless/dwm/patch/moveresize.c +++ /dev/null @@ -1,64 +0,0 @@ -void -moveresize(const Arg *arg) { - /* only floating windows can be moved */ - Client *c; - c = selmon->sel; - int x, y, w, h, nx, ny, nw, nh, ox, oy, ow, oh; - char xAbs, yAbs, wAbs, hAbs; - int msx, msy, dx, dy, nmx, nmy; - unsigned int dui; - Window dummy; - - if (!c || !arg) - return; - if (selmon->lt[selmon->sellt]->arrange && !c->isfloating) - return; - if (sscanf((char *)arg->v, "%d%c %d%c %d%c %d%c", &x, &xAbs, &y, &yAbs, &w, &wAbs, &h, &hAbs) != 8) - return; - - /* compute new window position; prevent window from be positioned outside the current monitor */ - nw = c->w + w; - if (wAbs == 'W') - nw = w < selmon->mw - 2 * c->bw ? w : selmon->mw - 2 * c->bw; - - nh = c->h + h; - if (hAbs == 'H') - nh = h < selmon->mh - 2 * c->bw ? h : selmon->mh - 2 * c->bw; - - nx = c->x + x; - if (xAbs == 'X') { - if (x < selmon->mx) - nx = selmon->mx; - else if (x > selmon->mx + selmon->mw) - nx = selmon->mx + selmon->mw - nw - 2 * c->bw; - else - nx = x; - } - - ny = c->y + y; - if (yAbs == 'Y') { - if (y < selmon->my) - ny = selmon->my; - else if (y > selmon->my + selmon->mh) - ny = selmon->my + selmon->mh - nh - 2 * c->bw; - else - ny = y; - } - - ox = c->x; - oy = c->y; - ow = c->w; - oh = c->h; - - XRaiseWindow(dpy, c->win); - Bool xqp = XQueryPointer(dpy, root, &dummy, &dummy, &msx, &msy, &dx, &dy, &dui); - resize(c, nx, ny, nw, nh, True); - - /* move cursor along with the window to avoid problems caused by the sloppy focus */ - if (xqp && ox <= msx && (ox + ow) >= msx && oy <= msy && (oy + oh) >= msy) - { - nmx = c->x - ox + c->w - ow; - nmy = c->y - oy + c->h - oh; - XWarpPointer(dpy, None, None, 0, 0, 0, 0, nmx, nmy); - } -} \ No newline at end of file diff --git a/suckless/dwm/patch/moveresize.h b/suckless/dwm/patch/moveresize.h deleted file mode 100644 index 5d963ff8..00000000 --- a/suckless/dwm/patch/moveresize.h +++ /dev/null @@ -1 +0,0 @@ -static void moveresize(const Arg *arg); \ No newline at end of file diff --git a/suckless/dwm/patch/movestack.c b/suckless/dwm/patch/movestack.c index ab97b18c..243c19c4 100644 --- a/suckless/dwm/patch/movestack.c +++ b/suckless/dwm/patch/movestack.c @@ -47,4 +47,4 @@ movestack(const Arg *arg) arrange(selmon); } -} \ No newline at end of file +} diff --git a/suckless/dwm/patch/movestack.h b/suckless/dwm/patch/movestack.h index 19ac5d8a..4797f31a 100644 --- a/suckless/dwm/patch/movestack.h +++ b/suckless/dwm/patch/movestack.h @@ -1 +1 @@ -static void movestack(const Arg *arg); \ No newline at end of file +static void movestack(const Arg *arg); diff --git a/suckless/dwm/patch/mpdcontrol.c b/suckless/dwm/patch/mpdcontrol.c deleted file mode 100644 index c7ff7862..00000000 --- a/suckless/dwm/patch/mpdcontrol.c +++ /dev/null @@ -1,144 +0,0 @@ -#include -#include -#include -#include - -#include - -#define MPDHOST "localhost" -#define MPDPORT 6600 - -struct mpd_connection *get_conn() -{ - struct mpd_connection *conn; - - conn = mpd_connection_new(MPDHOST, MPDPORT, 1000); - - if (mpd_connection_get_error(conn) != MPD_ERROR_SUCCESS) { - fprintf(stderr, "Could not connect to mpd: %s\n", mpd_connection_get_error_message(conn)); - - mpd_connection_free(conn); - return NULL; - } - - return conn; -} - -void mpdchange(const Arg *direction) -{ - struct mpd_connection *conn; - - conn = get_conn(); - - if (conn == NULL) { - return; - } - - if (direction->i > 0) { - mpd_run_next(conn); - } - else { - mpd_run_previous(conn); - } - - mpd_connection_free(conn); -} - -char *get_regerror(int errcode, regex_t *compiled) -{ - size_t length = regerror(errcode, compiled, NULL, 0); - char *buffer = malloc(length); - (void) regerror(errcode, compiled, buffer, length); - - return buffer; -} - -void mpdcontrol() -{ - struct mpd_connection *conn; - struct mpd_status *status; - struct mpd_song *song; - enum mpd_state state; - - const char *filename; - - regex_t expr; - - conn = get_conn(); - - if (conn == NULL) { - return; - } - - status = mpd_run_status(conn); - - if (status == NULL) { - fprintf(stderr, "Could not get mpd status: %s\n", mpd_status_get_error(status)); - - mpd_status_free(status); - mpd_connection_free(conn); - return; - } - - state = mpd_status_get_state(status); - - if (state == MPD_STATE_STOP || state == MPD_STATE_PAUSE) { - mpd_run_play(conn); - mpd_status_free(status); - mpd_connection_free(conn); - } - else if (state != MPD_STATE_UNKNOWN) { //playing some music - song = mpd_run_current_song(conn); - - if (song == NULL){ - fprintf(stderr, "Error fetching current song!\n"); - - mpd_song_free(song); - mpd_status_free(status); - mpd_connection_free(conn); - return; - } - - filename = mpd_song_get_uri(song); - - int errcode = regcomp(&expr, "^[[:alnum:]]+://", REG_EXTENDED|REG_NOSUB); - if (errcode != 0) { - char *err = get_regerror(errcode, &expr); - fprintf(stderr, "Could not compile regexp: %s\n", err); - - mpd_song_free(song); - mpd_status_free(status); - mpd_connection_free(conn); - free(err); - regfree(&expr); - return; - } - - int matchcode = regexec(&expr, filename, 0, NULL, 0); - - if (matchcode == 0) { - if (strstr(filename, "file://") == filename) { //match just at the start of the filename - //this means that mpd is playing a file outside the music_dir, - //but on disk, so we can safely pause - mpd_run_toggle_pause(conn); - } - else { - mpd_run_stop(conn); - } - } - else if (matchcode == REG_NOMATCH) { - mpd_run_toggle_pause(conn); - } - else { - char *err = get_regerror(matchcode, &expr); - fprintf(stderr, "Error while matching regexp: %s\n", err); - - free(err); - } - - regfree(&expr); - mpd_song_free(song); - mpd_status_free(status); - mpd_connection_free(conn); - } -} \ No newline at end of file diff --git a/suckless/dwm/patch/mpdcontrol.h b/suckless/dwm/patch/mpdcontrol.h deleted file mode 100644 index b8825d4f..00000000 --- a/suckless/dwm/patch/mpdcontrol.h +++ /dev/null @@ -1,2 +0,0 @@ -static void mpdchange(const Arg *direction); -static void mpdcontrol(); \ No newline at end of file diff --git a/suckless/dwm/patch/nomodbuttons.c b/suckless/dwm/patch/nomodbuttons.c deleted file mode 100644 index c4e082ec..00000000 --- a/suckless/dwm/patch/nomodbuttons.c +++ /dev/null @@ -1,7 +0,0 @@ -void -togglenomodbuttons(const Arg *arg) -{ - nomodbuttons = !nomodbuttons; - if (selmon->sel) - grabbuttons(selmon->sel, 1); -} \ No newline at end of file diff --git a/suckless/dwm/patch/nomodbuttons.h b/suckless/dwm/patch/nomodbuttons.h deleted file mode 100644 index 4e6c572b..00000000 --- a/suckless/dwm/patch/nomodbuttons.h +++ /dev/null @@ -1 +0,0 @@ -static void togglenomodbuttons(const Arg *arg); \ No newline at end of file diff --git a/suckless/dwm/patch/pertag.c b/suckless/dwm/patch/pertag.c index 3ca7ab2a..9c98cdc3 100644 --- a/suckless/dwm/patch/pertag.c +++ b/suckless/dwm/patch/pertag.c @@ -1,27 +1,10 @@ struct Pertag { unsigned int curtag, prevtag; /* current and previous tag */ int nmasters[NUMTAGS + 1]; /* number of windows in master area */ - #if FLEXTILE_DELUXE_LAYOUT - int nstacks[NUMTAGS + 1]; /* number of windows in primary stack area */ - int ltaxis[NUMTAGS + 1][LTAXIS_LAST]; - const Layout *ltidxs[NUMTAGS + 1][3]; /* matrix of tags and layouts indexes */ - #else const Layout *ltidxs[NUMTAGS + 1][2]; /* matrix of tags and layouts indexes */ - #endif // FLEXTILE_DELUXE_LAYOUT float mfacts[NUMTAGS + 1]; /* mfacts per tag */ unsigned int sellts[NUMTAGS + 1]; /* selected layouts */ - #if PERTAGBAR_PATCH - int showbars[NUMTAGS + 1]; /* display bar for the current tag */ - #endif // PERTAGBAR_PATCH - #if SWAPFOCUS_PATCH - Client *prevclient[NUMTAGS + 1]; - #endif // SWAPFOCUS_PATCH - #if ZOOMSWAP_PATCH - Client *prevzooms[NUMTAGS + 1]; /* store zoom information */ - #endif // ZOOMSWAP_PATCH - #if VANITYGAPS_PATCH int enablegaps[NUMTAGS + 1]; - #endif // VANITYGAPS_PATCH }; void @@ -32,11 +15,7 @@ pertagview(const Arg *arg) if (arg->ui & TAGMASK) { selmon->pertag->prevtag = selmon->pertag->curtag; selmon->tagset[selmon->seltags] = arg->ui & TAGMASK; - #if SCRATCHPADS_PATCH if (arg->ui == ~SPTAGMASK) - #else - if (arg->ui == ~0) - #endif // SCRATCHPADS_PATCH selmon->pertag->curtag = 0; else { for (i = 0; !(arg->ui & 1 << i); i++) ; @@ -48,22 +27,9 @@ pertagview(const Arg *arg) selmon->pertag->curtag = tmptag; } selmon->nmaster = selmon->pertag->nmasters[selmon->pertag->curtag]; - #if FLEXTILE_DELUXE_LAYOUT - selmon->nstack = selmon->pertag->nstacks[selmon->pertag->curtag]; - #endif // FLEXTILE_DELUXE_LAYOUT selmon->mfact = selmon->pertag->mfacts[selmon->pertag->curtag]; selmon->sellt = selmon->pertag->sellts[selmon->pertag->curtag]; selmon->lt[selmon->sellt] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt]; selmon->lt[selmon->sellt^1] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt^1]; - #if FLEXTILE_DELUXE_LAYOUT - selmon->ltaxis[LAYOUT] = selmon->pertag->ltaxis[selmon->pertag->curtag][LAYOUT]; - selmon->ltaxis[MASTER] = selmon->pertag->ltaxis[selmon->pertag->curtag][MASTER]; - selmon->ltaxis[STACK] = selmon->pertag->ltaxis[selmon->pertag->curtag][STACK]; - selmon->ltaxis[STACK2] = selmon->pertag->ltaxis[selmon->pertag->curtag][STACK2]; - #endif // FLEXTILE_DELUXE_LAYOUT - #if PERTAGBAR_PATCH - if (selmon->showbar != selmon->pertag->showbars[selmon->pertag->curtag]) - togglebar(NULL); - #endif // PERTAGBAR_PATCH -} \ No newline at end of file +} diff --git a/suckless/dwm/patch/pertag.h b/suckless/dwm/patch/pertag.h index ac5288d3..73b53618 100644 --- a/suckless/dwm/patch/pertag.h +++ b/suckless/dwm/patch/pertag.h @@ -1 +1 @@ -static void pertagview(const Arg *arg); \ No newline at end of file +static void pertagview(const Arg *arg); diff --git a/suckless/dwm/patch/placemouse.c b/suckless/dwm/patch/placemouse.c deleted file mode 100644 index 4f8fcc3f..00000000 --- a/suckless/dwm/patch/placemouse.c +++ /dev/null @@ -1,151 +0,0 @@ -void -moveorplace(const Arg *arg) { - if ((!selmon->lt[selmon->sellt]->arrange || selmon->sel->isfloating)) - movemouse(arg); - else - placemouse(arg); -} - -void -placemouse(const Arg *arg) -{ - int x, y, px, py, ocx, ocy, nx = -9999, ny = -9999, freemove = 0; - Client *c, *r = NULL, *at, *prevr; - Monitor *m; - XEvent ev; - XWindowAttributes wa; - Time lasttime = 0; - int attachmode, prevattachmode; - attachmode = prevattachmode = -1; - - if (!(c = selmon->sel) || !c->mon->lt[c->mon->sellt]->arrange) /* no support for placemouse when floating layout is used */ - return; - if (c->isfullscreen) /* no support placing fullscreen windows by mouse */ - return; - restack(selmon); - prevr = c; - if (XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync, - None, cursor[CurMove]->cursor, CurrentTime) != GrabSuccess) - return; - - c->isfloating = 0; - c->beingmoved = 1; - - XGetWindowAttributes(dpy, c->win, &wa); - ocx = wa.x; - ocy = wa.y; - - if (arg->i == 2) // warp cursor to client center - XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, WIDTH(c) / 2, HEIGHT(c) / 2); - - if (!getrootptr(&x, &y)) - return; - - do { - XMaskEvent(dpy, MOUSEMASK|ExposureMask|SubstructureRedirectMask, &ev); - switch (ev.type) { - case ConfigureRequest: - case Expose: - case MapRequest: - handler[ev.type](&ev); - break; - case MotionNotify: - if ((ev.xmotion.time - lasttime) <= (1000 / 60)) - continue; - lasttime = ev.xmotion.time; - - nx = ocx + (ev.xmotion.x - x); - ny = ocy + (ev.xmotion.y - y); - - if (!freemove && (abs(nx - ocx) > snap || abs(ny - ocy) > snap)) - freemove = 1; - - if (freemove) - XMoveWindow(dpy, c->win, nx, ny); - - if ((m = recttomon(ev.xmotion.x, ev.xmotion.y, 1, 1)) && m != selmon) - selmon = m; - - if (arg->i == 1) { // tiled position is relative to the client window center point - px = nx + wa.width / 2; - py = ny + wa.height / 2; - } else { // tiled position is relative to the mouse cursor - px = ev.xmotion.x; - py = ev.xmotion.y; - } - - r = recttoclient(px, py, 1, 1); - - if (!r || r == c) - break; - - if ((((float)(r->y + r->h - py) / r->h) > ((float)(r->x + r->w - px) / r->w) - && (abs(r->y - py) < r->h / 2)) || (abs(r->x - px) < r->w / 2)) - attachmode = 1; // above - else - attachmode = 0; // below - - if ((r && r != prevr) || (attachmode != prevattachmode)) { - detachstack(c); - detach(c); - if (c->mon != r->mon) - arrangemon(c->mon); - - c->mon = r->mon; - r->mon->sel = r; - - if (attachmode) { - if (r == r->mon->clients) - attach(c); - else { - for (at = r->mon->clients; at->next != r; at = at->next); - c->next = at->next; - at->next = c; - } - } else { - c->next = r->next; - r->next = c; - } - - attachstack(c); - arrangemon(r->mon); - prevr = r; - prevattachmode = attachmode; - } - break; - } - } while (ev.type != ButtonRelease); - XUngrabPointer(dpy, CurrentTime); - - if ((m = recttomon(ev.xmotion.x, ev.xmotion.y, 1, 1)) && m != c->mon) { - detach(c); - detachstack(c); - arrangemon(c->mon); - c->mon = m; - attach(c); - attachstack(c); - selmon = m; - } - - focus(c); - c->beingmoved = 0; - - if (nx != -9999) - resize(c, nx, ny, c->w, c->h, 0); - arrangemon(c->mon); -} - -Client * -recttoclient(int x, int y, int w, int h) -{ - Client *c, *r = NULL; - int a, area = 0; - - for (c = nexttiled(selmon->clients); c; c = nexttiled(c->next)) { - if ((a = INTERSECTC(x, y, w, h, c)) > area) { - area = a; - r = c; - } - } - return r; -} \ No newline at end of file diff --git a/suckless/dwm/patch/placemouse.h b/suckless/dwm/patch/placemouse.h deleted file mode 100644 index 8687ae37..00000000 --- a/suckless/dwm/patch/placemouse.h +++ /dev/null @@ -1,6 +0,0 @@ -#define INTERSECTC(x,y,w,h,z) (MAX(0, MIN((x)+(w),(z)->x+(z)->w) - MAX((x),(z)->x)) \ - * MAX(0, MIN((y)+(h),(z)->y+(z)->h) - MAX((y),(z)->y))) - -static void moveorplace(const Arg *arg); -static void placemouse(const Arg *arg); -static Client *recttoclient(int x, int y, int w, int h); diff --git a/suckless/dwm/patch/push.c b/suckless/dwm/patch/push.c deleted file mode 100644 index ae359289..00000000 --- a/suckless/dwm/patch/push.c +++ /dev/null @@ -1,71 +0,0 @@ -static Client * -nextc(Client *c, float f) -{ - if (!f) - return nexttiled(c); - - for (; c && !ISVISIBLE(c); c = c->next); - return c; -} - -static Client * -prevc(Client *c, float f) -{ - Client *p, *r; - - for (p = selmon->clients, r = NULL; c && p && p != c; p = p->next) - if ((f || !p->isfloating) && ISVISIBLE(p)) - r = p; - return r; -} - -static void -pushup(const Arg *arg) -{ - Client *sel = selmon->sel; - Client *c; - - if (!sel || (sel->isfloating && !arg->f)) - return; - if ((c = prevc(sel, arg->f))) { - /* attach before c */ - detach(sel); - sel->next = c; - if (selmon->clients == c) - selmon->clients = sel; - else { - for (c = selmon->clients; c->next != sel->next; c = c->next); - c->next = sel; - } - } else { - /* move to the end */ - for (c = sel; c->next; c = c->next); - detach(sel); - sel->next = NULL; - c->next = sel; - } - focus(sel); - arrange(selmon); -} - -static void -pushdown(const Arg *arg) -{ - Client *sel = selmon->sel; - Client *c; - - if (!sel || (sel->isfloating && !arg->f)) - return; - if ((c = nextc(sel->next, arg->f))) { - /* attach after c */ - detach(sel); - sel->next = c->next; - c->next = sel; - } else { - /* move to the front */ - detach(sel); - attach(sel); - } - focus(sel); - arrange(selmon); -} \ No newline at end of file diff --git a/suckless/dwm/patch/push.h b/suckless/dwm/patch/push.h deleted file mode 100644 index 9cad8b38..00000000 --- a/suckless/dwm/patch/push.h +++ /dev/null @@ -1,4 +0,0 @@ -static Client * nextc(Client *c, float f); -static Client * prevc(Client *c, float f); -static void pushup(const Arg *arg); -static void pushdown(const Arg *arg); \ No newline at end of file diff --git a/suckless/dwm/patch/push_no_master.c b/suckless/dwm/patch/push_no_master.c deleted file mode 100644 index 5ff9326b..00000000 --- a/suckless/dwm/patch/push_no_master.c +++ /dev/null @@ -1,43 +0,0 @@ -Client * -prevt(Client *c) -{ - Client *p, *r; - - for (p = selmon->clients, r = NULL; p && p != c; p = p->next) - if (!p->isfloating && ISVISIBLE(p)) - r = p; - return r; -} - -void -pushup(const Arg *arg) -{ - Client *sel = selmon->sel, *c; - - if (!sel || sel->isfloating) - return; - if ((c = prevt(sel)) && c != nexttiled(selmon->clients)) { - detach(sel); - sel->next = c; - for (c = selmon->clients; c->next != sel->next; c = c->next); - c->next = sel; - } - focus(sel); - arrange(selmon); -} - -void -pushdown(const Arg *arg) -{ - Client *sel = selmon->sel, *c; - - if (!sel || sel->isfloating || sel == nexttiled(selmon->clients)) - return; - if ((c = nexttiled(sel->next))) { - detach(sel); - sel->next = c->next; - c->next = sel; - } - focus(sel); - arrange(selmon); -} \ No newline at end of file diff --git a/suckless/dwm/patch/push_no_master.h b/suckless/dwm/patch/push_no_master.h deleted file mode 100644 index 7ea061dc..00000000 --- a/suckless/dwm/patch/push_no_master.h +++ /dev/null @@ -1,3 +0,0 @@ -Client * prevt(Client *c); -static void pushup(const Arg *arg); -static void pushdown(const Arg *arg); \ No newline at end of file diff --git a/suckless/dwm/patch/reorganizetags.c b/suckless/dwm/patch/reorganizetags.c deleted file mode 100644 index da27ecd8..00000000 --- a/suckless/dwm/patch/reorganizetags.c +++ /dev/null @@ -1,27 +0,0 @@ -void -reorganizetags(const Arg *arg) -{ - Client *c; - unsigned int occ, unocc, i; - unsigned int tagdest[NUMTAGS]; - - occ = 0; - for (c = selmon->clients; c; c = c->next) - occ |= (1 << (ffs(c->tags)-1)); - unocc = 0; - for (i = 0; i < NUMTAGS; ++i) { - while (unocc < i && (occ & (1 << unocc))) - unocc++; - if (occ & (1 << i)) { - tagdest[i] = unocc; - occ &= ~(1 << i); - occ |= 1 << unocc; - } - } - - for (c = selmon->clients; c; c = c->next) - c->tags = 1 << tagdest[ffs(c->tags)-1]; - if (selmon->sel) - selmon->tagset[selmon->seltags] = selmon->sel->tags; - arrange(selmon); -} \ No newline at end of file diff --git a/suckless/dwm/patch/reorganizetags.h b/suckless/dwm/patch/reorganizetags.h deleted file mode 100644 index 27c0cea3..00000000 --- a/suckless/dwm/patch/reorganizetags.h +++ /dev/null @@ -1 +0,0 @@ -static void reorganizetags(const Arg *arg); \ No newline at end of file diff --git a/suckless/dwm/patch/restartsig.c b/suckless/dwm/patch/restartsig.c deleted file mode 100644 index 0bef576a..00000000 --- a/suckless/dwm/patch/restartsig.c +++ /dev/null @@ -1,15 +0,0 @@ -static int restart = 0; - -void -sighup(int unused) -{ - Arg a = {.i = 1}; - quit(&a); -} - -void -sigterm(int unused) -{ - Arg a = {.i = 0}; - quit(&a); -} \ No newline at end of file diff --git a/suckless/dwm/patch/restartsig.h b/suckless/dwm/patch/restartsig.h deleted file mode 100644 index 5a08c393..00000000 --- a/suckless/dwm/patch/restartsig.h +++ /dev/null @@ -1,2 +0,0 @@ -static void sighup(int unused); -static void sigterm(int unused); \ No newline at end of file diff --git a/suckless/dwm/patch/riodraw.c b/suckless/dwm/patch/riodraw.c deleted file mode 100644 index b80328fd..00000000 --- a/suckless/dwm/patch/riodraw.c +++ /dev/null @@ -1,103 +0,0 @@ -/* drag out an area using slop and resize the selected window to it. */ -int -riodraw(Client *c, const char slopstyle[]) -{ - int i; - char str[100]; - char strout[100]; - char tmpstring[30] = {0}; - char slopcmd[100] = "slop -f x%xx%yx%wx%hx "; - int firstchar = 0; - int counter = 0; - - strcat(slopcmd, slopstyle); - FILE *fp = popen(slopcmd, "r"); - - while (fgets(str, 100, fp) != NULL) - strcat(strout, str); - - pclose(fp); - - if (strlen(strout) < 6) - return 0; - - for (i = 0; i < strlen(strout); i++){ - if (!firstchar) { - if (strout[i] == 'x') - firstchar = 1; - continue; - } - - if (strout[i] != 'x') - tmpstring[strlen(tmpstring)] = strout[i]; - else { - riodimensions[counter] = atoi(tmpstring); - counter++; - memset(tmpstring,0,strlen(tmpstring)); - } - } - - if (riodimensions[0] <= -40 || riodimensions[1] <= -40 || riodimensions[2] <= 50 || riodimensions[3] <= 50) { - riodimensions[3] = -1; - return 0; - } - - if (c) { - rioposition(c, riodimensions[0], riodimensions[1], riodimensions[2], riodimensions[3]); - return 0; - } - - return 1; -} - -void -rioposition(Client *c, int x, int y, int w, int h) -{ - Monitor *m; - if ((m = recttomon(x, y, w, h)) && m != c->mon) { - detach(c); - detachstack(c); - c->mon = m; - c->tags = m->tagset[m->seltags]; - attach(c); - attachstack(c); - selmon = m; - focus(c); - } - - c->isfloating = 1; - if (riodraw_borders) - resizeclient(c, x, y, w - (c->bw * 2), h - (c->bw * 2)); - else - resizeclient(c, x - c->bw, y - c->bw, w, h); - drawbar(c->mon); - arrange(c->mon); - - riodimensions[3] = -1; - riopid = 0; -} - -/* drag out an area using slop and resize the selected window to it */ -void -rioresize(const Arg *arg) -{ - Client *c = (arg && arg->v ? (Client*)arg->v : selmon->sel); - if (c) - riodraw(c, slopresizestyle); -} - -/* Spawn a new window and drag out an area using slop to position it while the window is - * initialising in the background. */ -void -riospawn(const Arg *arg) -{ - riopid = spawncmd(arg); - riodraw(NULL, slopspawnstyle); -} - -void -riospawnsync(const Arg *arg) -{ - if (riodraw(NULL, slopspawnstyle)) - riopid = spawncmd(arg); -} \ No newline at end of file diff --git a/suckless/dwm/patch/riodraw.h b/suckless/dwm/patch/riodraw.h deleted file mode 100644 index 91788049..00000000 --- a/suckless/dwm/patch/riodraw.h +++ /dev/null @@ -1,5 +0,0 @@ -static int riodraw(Client *c, const char slopstyle[]); -static void rioposition(Client *c, int x, int y, int w, int h); -static void rioresize(const Arg *arg); -static void riospawn(const Arg *arg); -static void riospawnsync(const Arg *arg); diff --git a/suckless/dwm/patch/rotatestack.c b/suckless/dwm/patch/rotatestack.c deleted file mode 100644 index d2f7d508..00000000 --- a/suckless/dwm/patch/rotatestack.c +++ /dev/null @@ -1,52 +0,0 @@ -void -enqueue(Client *c) -{ - Client *l; - for (l = c->mon->clients; l && l->next; l = l->next); - if (l) { - l->next = c; - c->next = NULL; - } -} - -void -enqueuestack(Client *c) -{ - Client *l; - for (l = c->mon->stack; l && l->snext; l = l->snext); - if (l) { - l->snext = c; - c->snext = NULL; - } -} - -void -rotatestack(const Arg *arg) -{ - Client *c = NULL, *f; - - if (!selmon->sel) - return; - f = selmon->sel; - if (arg->i > 0) { - for (c = nexttiled(selmon->clients); c && nexttiled(c->next); c = nexttiled(c->next)); - if (c){ - detach(c); - attach(c); - detachstack(c); - attachstack(c); - } - } else { - if ((c = nexttiled(selmon->clients))){ - detach(c); - enqueue(c); - detachstack(c); - enqueuestack(c); - } - } - if (c){ - arrange(selmon); - focus(f); - restack(selmon); - } -} \ No newline at end of file diff --git a/suckless/dwm/patch/rotatestack.h b/suckless/dwm/patch/rotatestack.h deleted file mode 100644 index c0661fa0..00000000 --- a/suckless/dwm/patch/rotatestack.h +++ /dev/null @@ -1,3 +0,0 @@ -static void enqueue(Client *c); -static void enqueuestack(Client *c); -static void rotatestack(const Arg *arg); \ No newline at end of file diff --git a/suckless/dwm/patch/roundedcorners.c b/suckless/dwm/patch/roundedcorners.c deleted file mode 100644 index 56c54c84..00000000 --- a/suckless/dwm/patch/roundedcorners.c +++ /dev/null @@ -1,50 +0,0 @@ -#include - -void drawroundedcorners(Client *c) -{ - if (corner_radius <= 0 || !c || c->isfullscreen) - return; - - Window win; - win = c->win; - if (!win) - return; - - XWindowAttributes win_attr; - if (!XGetWindowAttributes(dpy, win, &win_attr)) - return; - - int dia = 2 * corner_radius; - int w = c->w; - int h = c->h; - if (w < dia || h < dia) - return; - - Pixmap mask; - mask = XCreatePixmap(dpy, win, w, h, 1); - if (!mask) - return; - - XGCValues xgcv; - GC shape_gc; - shape_gc = XCreateGC(dpy, mask, 0, &xgcv); - - if (!shape_gc) { - XFreePixmap(dpy, mask); - free(shape_gc); - return; - } - - XSetForeground(dpy, shape_gc, 0); - XFillRectangle(dpy, mask, shape_gc, 0, 0, w, h); - XSetForeground(dpy, shape_gc, 1); - XFillArc(dpy, mask, shape_gc, 0, 0, dia, dia, 0, 23040); - XFillArc(dpy, mask, shape_gc, w-dia-1, 0, dia, dia, 0, 23040); - XFillArc(dpy, mask, shape_gc, 0, h-dia-1, dia, dia, 0, 23040); - XFillArc(dpy, mask, shape_gc, w-dia-1, h-dia-1, dia, dia, 0, 23040); - XFillRectangle(dpy, mask, shape_gc, corner_radius, 0, w-dia, h); - XFillRectangle(dpy, mask, shape_gc, 0, corner_radius, w, h-dia); - XShapeCombineMask(dpy, win, ShapeBounding, 0, 0, mask, ShapeSet); - XFreePixmap(dpy, mask); - XFreeGC(dpy, shape_gc); -} \ No newline at end of file diff --git a/suckless/dwm/patch/roundedcorners.h b/suckless/dwm/patch/roundedcorners.h deleted file mode 100644 index 40f7549e..00000000 --- a/suckless/dwm/patch/roundedcorners.h +++ /dev/null @@ -1 +0,0 @@ -static void drawroundedcorners(Client *c); \ No newline at end of file diff --git a/suckless/dwm/patch/scratchpad.c b/suckless/dwm/patch/scratchpad.c index 2034d0d4..17f2bc3f 100644 --- a/suckless/dwm/patch/scratchpad.c +++ b/suckless/dwm/patch/scratchpad.c @@ -73,4 +73,4 @@ togglescratch(const Arg *arg) selmon->tagset[selmon->seltags] |= scratchtag; spawn(&sparg); } -} \ No newline at end of file +} diff --git a/suckless/dwm/patch/scratchpad.h b/suckless/dwm/patch/scratchpad.h index 42e592b3..10516c81 100644 --- a/suckless/dwm/patch/scratchpad.h +++ b/suckless/dwm/patch/scratchpad.h @@ -5,4 +5,4 @@ typedef struct { static void removescratch(const Arg *arg); static void setscratch(const Arg *arg); -static void togglescratch(const Arg *arg); \ No newline at end of file +static void togglescratch(const Arg *arg); diff --git a/suckless/dwm/patch/scratchpad_alt_1.c b/suckless/dwm/patch/scratchpad_alt_1.c deleted file mode 100644 index c1301c91..00000000 --- a/suckless/dwm/patch/scratchpad_alt_1.c +++ /dev/null @@ -1,92 +0,0 @@ -static Client * scratchpad_last_showed = NULL; - -static void scratchpad_hide () -{ - if (selmon->sel) - { - selmon->sel->tags = SCRATCHPAD_MASK; - focus(NULL); - arrange(selmon); - } -} - -static _Bool scratchpad_last_showed_is_killed (void) -{ - _Bool killed = 1; - for (Client * c = selmon->clients; c != NULL; c = c->next) - { - if (c == scratchpad_last_showed) - { - killed = 0; - break; - } - } - return killed; -} - -static void scratchpad_remove () -{ - if (selmon->sel && scratchpad_last_showed != NULL && selmon->sel == scratchpad_last_showed) - scratchpad_last_showed = NULL; -} - -static void scratchpad_show () -{ - if (scratchpad_last_showed == NULL || scratchpad_last_showed_is_killed ()) - scratchpad_show_first (); - else - { - if (scratchpad_last_showed->tags != SCRATCHPAD_MASK) - { - scratchpad_last_showed->tags = SCRATCHPAD_MASK; - focus(NULL); - arrange(selmon); - } - else - { - _Bool found_current = 0; - _Bool found_next = 0; - for (Client * c = selmon->clients; c != NULL; c = c->next) - { - if (found_current == 0) - { - if (c == scratchpad_last_showed) - { - found_current = 1; - continue; - } - } - else - { - if (c->tags == SCRATCHPAD_MASK) - { - found_next = 1; - scratchpad_show_client (c); - break; - } - } - } - if (found_next == 0) scratchpad_show_first (); - } - } -} - -static void scratchpad_show_client (Client * c) -{ - scratchpad_last_showed = c; - c->tags = selmon->tagset[selmon->seltags]; - focus(c); - arrange(selmon); -} - -static void scratchpad_show_first (void) -{ - for (Client * c = selmon->clients; c != NULL; c = c->next) - { - if (c->tags == SCRATCHPAD_MASK) - { - scratchpad_show_client (c); - break; - } - } -} \ No newline at end of file diff --git a/suckless/dwm/patch/scratchpad_alt_1.h b/suckless/dwm/patch/scratchpad_alt_1.h deleted file mode 100644 index 5cc2e2f8..00000000 --- a/suckless/dwm/patch/scratchpad_alt_1.h +++ /dev/null @@ -1,8 +0,0 @@ -#define SCRATCHPAD_MASK (1u << NUMTAGS) - -static void scratchpad_hide (); -static _Bool scratchpad_last_showed_is_killed (void); -static void scratchpad_remove (); -static void scratchpad_show (); -static void scratchpad_show_client (Client * c); -static void scratchpad_show_first (void); \ No newline at end of file diff --git a/suckless/dwm/patch/selfrestart.c b/suckless/dwm/patch/selfrestart.c deleted file mode 100644 index c3b88c1a..00000000 --- a/suckless/dwm/patch/selfrestart.c +++ /dev/null @@ -1,68 +0,0 @@ -#include -#include -#include -#include -#include - -/** - * Magically finds the current's executable path - * - * I'm doing the do{}while(); trick because Linux (what I'm running) is not - * POSIX compilant and so lstat() cannot be trusted on /proc entries - * - * @return char* the path of the current executable - */ -char *get_dwm_path() -{ - struct stat s; - int r, length, rate = 42; - char *path = NULL; - - if (lstat("/proc/self/exe", &s) == -1) { - perror("lstat:"); - return NULL; - } - - length = s.st_size + 1 - rate; - - do - { - length+=rate; - - free(path); - path = malloc(sizeof(char) * length); - - if (path == NULL){ - perror("malloc:"); - return NULL; - } - - r = readlink("/proc/self/exe", path, length); - - if (r == -1){ - perror("readlink:"); - return NULL; - } - } while (r >= length); - - path[r] = '\0'; - - return path; -} - -/** - * self-restart - * - * Initially inspired by: Yu-Jie Lin - * https://sites.google.com/site/yjlnotes/notes/dwm - */ -void self_restart(const Arg *arg) -{ - char *const argv[] = {get_dwm_path(), NULL}; - - if (argv[0] == NULL) { - return; - } - - execv(argv[0], argv); -} diff --git a/suckless/dwm/patch/selfrestart.h b/suckless/dwm/patch/selfrestart.h deleted file mode 100644 index 4af2436e..00000000 --- a/suckless/dwm/patch/selfrestart.h +++ /dev/null @@ -1,2 +0,0 @@ -char *get_dwm_path(); -void self_restart(const Arg *arg); \ No newline at end of file diff --git a/suckless/dwm/patch/setborderpx.c b/suckless/dwm/patch/setborderpx.c deleted file mode 100644 index 320aaa43..00000000 --- a/suckless/dwm/patch/setborderpx.c +++ /dev/null @@ -1,44 +0,0 @@ -void -setborderpx(const Arg *arg) -{ - Client *c; - int prev_borderpx = selmon->borderpx; - - if (arg->i == 0) - selmon->borderpx = borderpx; - else if (selmon->borderpx + arg->i < 0) - selmon->borderpx = 0; - else - selmon->borderpx += arg->i; - - #if BAR_BORDER_PATCH - for (bar = selmon->bar; bar; bar = bar->next) { - bar->bh = bar->bh - 2 * bar->borderpx + 2 * selmon->borderpx; - bar->borderpx = selmon->borderpx; - } - updatebarpos(selmon); - for (bar = selmon->bar; bar; bar = bar->next) - XMoveResizeWindow(dpy, bar->win, bar->bx, bar->by, bar->bw, bar->bh); - #endif // BAR_BORDER_PATCH - - for (c = selmon->clients; c; c = c->next) - { - if (c->bw + arg->i < 0) - c->bw = 0; - else - c->bw = selmon->borderpx; - - if (c->isfloating || !selmon->lt[selmon->sellt]->arrange) - { - if (arg->i != 0 && prev_borderpx + arg->i >= 0) - resize(c, c->x, c->y, c->w-(arg->i*2), c->h-(arg->i*2), 0); - else if (arg->i != 0) - resizeclient(c, c->x, c->y, c->w, c->h); - else if (prev_borderpx > borderpx) - resize(c, c->x, c->y, c->w + 2*(prev_borderpx - borderpx), c->h + 2*(prev_borderpx - borderpx), 0); - else if (prev_borderpx < borderpx) - resize(c, c->x, c->y, c->w - 2*(borderpx - prev_borderpx), c->h - 2*(borderpx - prev_borderpx), 0); - } - } - arrange(selmon); -} diff --git a/suckless/dwm/patch/setborderpx.h b/suckless/dwm/patch/setborderpx.h deleted file mode 100644 index c598066b..00000000 --- a/suckless/dwm/patch/setborderpx.h +++ /dev/null @@ -1 +0,0 @@ -static void setborderpx(const Arg *arg); \ No newline at end of file diff --git a/suckless/dwm/patch/shiftview.c b/suckless/dwm/patch/shiftview.c index 72d5b364..0f10c847 100644 --- a/suckless/dwm/patch/shiftview.c +++ b/suckless/dwm/patch/shiftview.c @@ -2,11 +2,7 @@ void shiftview(const Arg *arg) { Arg shifted; - #if SCRATCHPADS_PATCH unsigned int seltagset = selmon->tagset[selmon->seltags] & ~SPTAGMASK; - #else - unsigned int seltagset = selmon->tagset[selmon->seltags]; - #endif // SCRATCHPADS_PATCH if (arg->i > 0) // left circular shift shifted.ui = (seltagset << arg->i) | (seltagset >> (NUMTAGS - arg->i)); diff --git a/suckless/dwm/patch/shiftview.h b/suckless/dwm/patch/shiftview.h index cace70eb..7bf3a148 100644 --- a/suckless/dwm/patch/shiftview.h +++ b/suckless/dwm/patch/shiftview.h @@ -1 +1 @@ -static void shiftview(const Arg *arg); \ No newline at end of file +static void shiftview(const Arg *arg); diff --git a/suckless/dwm/patch/shiftviewclients.c b/suckless/dwm/patch/shiftviewclients.c deleted file mode 100644 index 04378eff..00000000 --- a/suckless/dwm/patch/shiftviewclients.c +++ /dev/null @@ -1,42 +0,0 @@ -void -shiftviewclients(const Arg *arg) -{ - Arg shifted; - Client *c; - unsigned int tagmask = 0; - - for (c = selmon->clients; c; c = c->next) - #if SCRATCHPADS_PATCH - if (!(c->tags & SPTAGMASK)) - tagmask = tagmask | c->tags; - #elif SCRATCHPAD_ALT_1_PATCH - if (!(c->tags & SCRATCHPAD_MASK)) - tagmask = tagmask | c->tags; - #else - tagmask = tagmask | c->tags; - #endif // SCRATCHPADS_PATCH - - #if SCRATCHPADS_PATCH - shifted.ui = selmon->tagset[selmon->seltags] & ~SPTAGMASK; - #else - shifted.ui = selmon->tagset[selmon->seltags]; - #endif // SCRATCHPADS_PATCH - if (arg->i > 0) // left circular shift - do { - shifted.ui = (shifted.ui << arg->i) - | (shifted.ui >> (NUMTAGS - arg->i)); - #if SCRATCHPADS_PATCH - shifted.ui &= ~SPTAGMASK; - #endif // SCRATCHPADS_PATCH - } while (tagmask && !(shifted.ui & tagmask)); - else // right circular shift - do { - shifted.ui = (shifted.ui >> (- arg->i) - | shifted.ui << (NUMTAGS + arg->i)); - #if SCRATCHPADS_PATCH - shifted.ui &= ~SPTAGMASK; - #endif // SCRATCHPADS_PATCH - } while (tagmask && !(shifted.ui & tagmask)); - - view(&shifted); -} \ No newline at end of file diff --git a/suckless/dwm/patch/shiftviewclients.h b/suckless/dwm/patch/shiftviewclients.h deleted file mode 100644 index ddff8265..00000000 --- a/suckless/dwm/patch/shiftviewclients.h +++ /dev/null @@ -1 +0,0 @@ -static void shiftviewclients(const Arg *arg); \ No newline at end of file diff --git a/suckless/dwm/patch/sizehints_ruled.c b/suckless/dwm/patch/sizehints_ruled.c deleted file mode 100644 index 885707ff..00000000 --- a/suckless/dwm/patch/sizehints_ruled.c +++ /dev/null @@ -1,24 +0,0 @@ -void -checkfloatingrules(Client *c) -{ - const char *class, *instance; - unsigned int i; - const Rule *r; - XClassHint ch = { NULL, NULL }; - - XGetClassHint(dpy, c->win, &ch); - class = ch.res_class ? ch.res_class : broken; - instance = ch.res_name ? ch.res_name : broken; - - for (i = 0; i < LENGTH(rules); i++) { - r = &rules[i]; - if ((!r->title || strstr(c->name, r->title)) - && (!r->class || strstr(class, r->class)) - && (!r->instance || strstr(instance, r->instance))) - c->isfloating = r->isfloating; - } - if (ch.res_class) - XFree(ch.res_class); - if (ch.res_name) - XFree(ch.res_name); -} diff --git a/suckless/dwm/patch/sizehints_ruled.h b/suckless/dwm/patch/sizehints_ruled.h deleted file mode 100644 index d21b2e49..00000000 --- a/suckless/dwm/patch/sizehints_ruled.h +++ /dev/null @@ -1 +0,0 @@ -static void checkfloatingrules(Client *c); \ No newline at end of file diff --git a/suckless/dwm/patch/sortscreens.c b/suckless/dwm/patch/sortscreens.c deleted file mode 100644 index 62508481..00000000 --- a/suckless/dwm/patch/sortscreens.c +++ /dev/null @@ -1,15 +0,0 @@ -void -sortscreens(XineramaScreenInfo *screens, int n) -{ - int i, j; - XineramaScreenInfo *screen = ecalloc(1, sizeof(XineramaScreenInfo)); - - for (i = 0; i < n; i++) - for (j = i + 1; j < n; j++) - if (RIGHTOF(screens[i], screens[j])) { - memcpy(&screen[0], &screens[i], sizeof(XineramaScreenInfo)); - memcpy(&screens[i], &screens[j], sizeof(XineramaScreenInfo)); - memcpy(&screens[j], &screen[0], sizeof(XineramaScreenInfo)); - } - XFree(screen); -} \ No newline at end of file diff --git a/suckless/dwm/patch/sortscreens.h b/suckless/dwm/patch/sortscreens.h deleted file mode 100644 index d829cdf2..00000000 --- a/suckless/dwm/patch/sortscreens.h +++ /dev/null @@ -1,3 +0,0 @@ -#define RIGHTOF(a,b) (a.y_org > b.y_org) || ((a.y_org == b.y_org) && (a.x_org > b.x_org)) - -static void sortscreens(XineramaScreenInfo *screens, int n); \ No newline at end of file diff --git a/suckless/dwm/patch/stacker.c b/suckless/dwm/patch/stacker.c deleted file mode 100644 index 1582cf66..00000000 --- a/suckless/dwm/patch/stacker.c +++ /dev/null @@ -1,106 +0,0 @@ -void -focusstack(const Arg *arg) -{ - int i = stackpos(arg); - Client *c, *p; - - if (i < 0) - return; - - #if ALWAYSFULLSCREEN_PATCH - if (!selmon->sel || selmon->sel->isfullscreen) - return; - #endif // ALWAYSFULLSCREEN_PATCH - - #if BAR_WINTITLEACTIONS_PATCH - for (p = NULL, c = selmon->clients; c && (i || !ISVISIBLE(c) || HIDDEN(c)); - i -= (ISVISIBLE(c) && !HIDDEN(c) ? 1 : 0), p = c, c = c->next); - #else - for (p = NULL, c = selmon->clients; c && (i || !ISVISIBLE(c)); - i -= (ISVISIBLE(c) ? 1 : 0), p = c, c = c->next); - #endif // BAR_WINTITLEACTIONS_PATCH - focus(c ? c : p); - restack(selmon); -} - -void -pushstack(const Arg *arg) -{ - int i = stackpos(arg); - Client *sel = selmon->sel, *c, *p; - - if (i < 0) - return; - else if (i == 0) { - detach(sel); - attach(sel); - } - else { - for (p = NULL, c = selmon->clients; c; p = c, c = c->next) - #if BAR_WINTITLEACTIONS_PATCH - if (!(i -= (ISVISIBLE(c) && !HIDDEN(c) && c != sel))) - #else - if (!(i -= (ISVISIBLE(c) && c != sel))) - #endif // BAR_WINTITLEACTIONS_PATCH - break; - c = c ? c : p; - detach(sel); - sel->next = c->next; - c->next = sel; - } - arrange(selmon); -} - -int -stackpos(const Arg *arg) -{ - int n, i; - Client *c, *l; - - if (!selmon->clients) - return -1; - - #if BAR_WINTITLEACTIONS_PATCH - if (arg->i == PREVSEL) { - for (l = selmon->stack; l && (!ISVISIBLE(l) || HIDDEN(l) || l == selmon->sel); l = l->snext); - if (!l) - return -1; - for (i = 0, c = selmon->clients; c != l; i += (ISVISIBLE(c) && !HIDDEN(c) ? 1 : 0), c = c->next); - return i; - } - else if (ISINC(arg->i)) { - if (!selmon->sel) - return -1; - for (i = 0, c = selmon->clients; c != selmon->sel; i += (ISVISIBLE(c) && !HIDDEN(c) ? 1 : 0), c = c->next); - for (n = i; c; n += (ISVISIBLE(c) && !HIDDEN(c) ? 1 : 0), c = c->next); - return MOD(i + GETINC(arg->i), n); - } - else if (arg->i < 0) { - for (i = 0, c = selmon->clients; c; i += (ISVISIBLE(c) && !HIDDEN(c) ? 1 : 0), c = c->next); - return MAX(i + arg->i, 0); - } - else - return arg->i; - #else // !BAR_WINTITLEACTIONS_PATCH - if (arg->i == PREVSEL) { - for (l = selmon->stack; l && (!ISVISIBLE(l) || l == selmon->sel); l = l->snext); - if (!l) - return -1; - for (i = 0, c = selmon->clients; c != l; i += (ISVISIBLE(c) ? 1 : 0), c = c->next); - return i; - } - else if (ISINC(arg->i)) { - if (!selmon->sel) - return -1; - for (i = 0, c = selmon->clients; c != selmon->sel; i += (ISVISIBLE(c) ? 1 : 0), c = c->next); - for (n = i; c; n += (ISVISIBLE(c) ? 1 : 0), c = c->next); - return MOD(i + GETINC(arg->i), n); - } - else if (arg->i < 0) { - for (i = 0, c = selmon->clients; c; i += (ISVISIBLE(c) ? 1 : 0), c = c->next); - return MAX(i + arg->i, 0); - } - else - return arg->i; - #endif // BAR_WINTITLEACTIONS_PATCH -} diff --git a/suckless/dwm/patch/stacker.h b/suckless/dwm/patch/stacker.h deleted file mode 100644 index 0a064613..00000000 --- a/suckless/dwm/patch/stacker.h +++ /dev/null @@ -1,10 +0,0 @@ -#define GETINC(X) ((X) - 2000) -#define INC(X) ((X) + 2000) -#define ISINC(X) ((X) > 1000 && (X) < 3000) -#define PREVSEL 3000 -#define MOD(N,M) ((N)%(M) < 0 ? (N)%(M) + (M) : (N)%(M)) -#define TRUNC(X,A,B) (MAX((A), MIN((X), (B)))) - -static void focusstack(const Arg *arg); -static void pushstack(const Arg *arg); -static int stackpos(const Arg *arg); \ No newline at end of file diff --git a/suckless/dwm/patch/sticky.c b/suckless/dwm/patch/sticky.c deleted file mode 100644 index 54bd4031..00000000 --- a/suckless/dwm/patch/sticky.c +++ /dev/null @@ -1,8 +0,0 @@ -void -togglesticky(const Arg *arg) -{ - if (!selmon->sel) - return; - selmon->sel->issticky = !selmon->sel->issticky; - arrange(selmon); -} \ No newline at end of file diff --git a/suckless/dwm/patch/sticky.h b/suckless/dwm/patch/sticky.h deleted file mode 100644 index a7c35ab9..00000000 --- a/suckless/dwm/patch/sticky.h +++ /dev/null @@ -1 +0,0 @@ -static void togglesticky(const Arg *arg); \ No newline at end of file diff --git a/suckless/dwm/patch/swallow.c b/suckless/dwm/patch/swallow.c deleted file mode 100644 index 84dda8c4..00000000 --- a/suckless/dwm/patch/swallow.c +++ /dev/null @@ -1,205 +0,0 @@ -#include -#include -#ifdef __OpenBSD__ -#include -#include -#endif /* __OpenBSD__ */ - -static int scanner; -static xcb_connection_t *xcon; - -int -swallow(Client *p, Client *c) -{ - Client *s; - - if (c->noswallow > 0 || c->isterminal) - return 0; - if (c->noswallow < 0 && !swallowfloating && c->isfloating) - return 0; - - XMapWindow(dpy, c->win); - - detach(c); - detachstack(c); - - setclientstate(c, WithdrawnState); - XUnmapWindow(dpy, p->win); - - p->swallowing = c; - c->mon = p->mon; - - Window w = p->win; - p->win = c->win; - c->win = w; - - XChangeProperty(dpy, c->win, netatom[NetClientList], XA_WINDOW, 32, PropModeReplace, - (unsigned char *) &(p->win), 1); - - updatetitle(p); - s = scanner ? c : p; - #if BAR_EWMHTAGS_PATCH - setfloatinghint(s); - #endif // BAR_EWMHTAGS_PATCH - XMoveResizeWindow(dpy, p->win, s->x, s->y, s->w, s->h); - arrange(p->mon); - configure(p); - updateclientlist(); - - return 1; -} - -void -unswallow(Client *c) -{ - c->win = c->swallowing->win; - - free(c->swallowing); - c->swallowing = NULL; - - XDeleteProperty(dpy, c->win, netatom[NetClientList]); - - /* unfullscreen the client */ - setfullscreen(c, 0); - updatetitle(c); - arrange(c->mon); - XMapWindow(dpy, c->win); - XMoveResizeWindow(dpy, c->win, c->x, c->y, c->w, c->h); - #if BAR_EWMHTAGS_PATCH - setfloatinghint(c); - #endif // BAR_EWMHTAGS_PATCH - setclientstate(c, NormalState); - focus(NULL); - arrange(c->mon); -} - -pid_t -winpid(Window w) -{ - pid_t result = 0; - - #ifdef __linux__ - xcb_res_client_id_spec_t spec = {0}; - spec.client = w; - spec.mask = XCB_RES_CLIENT_ID_MASK_LOCAL_CLIENT_PID; - - xcb_generic_error_t *e = NULL; - xcb_res_query_client_ids_cookie_t c = xcb_res_query_client_ids(xcon, 1, &spec); - xcb_res_query_client_ids_reply_t *r = xcb_res_query_client_ids_reply(xcon, c, &e); - - if (!r) - return (pid_t)0; - - xcb_res_client_id_value_iterator_t i = xcb_res_query_client_ids_ids_iterator(r); - for (; i.rem; xcb_res_client_id_value_next(&i)) { - spec = i.data->spec; - if (spec.mask & XCB_RES_CLIENT_ID_MASK_LOCAL_CLIENT_PID) { - uint32_t *t = xcb_res_client_id_value_value(i.data); - result = *t; - break; - } - } - - free(r); - - if (result == (pid_t)-1) - result = 0; - - #endif /* __linux__ */ - #ifdef __OpenBSD__ - Atom type; - int format; - unsigned long len, bytes; - unsigned char *prop; - pid_t ret; - - if (XGetWindowProperty(dpy, w, XInternAtom(dpy, "_NET_WM_PID", 1), 0, 1, False, AnyPropertyType, &type, &format, &len, &bytes, &prop) != Success || !prop) - return 0; - - ret = *(pid_t*)prop; - XFree(prop); - result = ret; - #endif /* __OpenBSD__ */ - - return result; -} - -pid_t -getparentprocess(pid_t p) -{ - unsigned int v = 0; - -#ifdef __linux__ - FILE *f; - char buf[256]; - snprintf(buf, sizeof(buf) - 1, "/proc/%u/stat", (unsigned)p); - - if (!(f = fopen(buf, "r"))) - return (pid_t)0; - - if (fscanf(f, "%*u %*s %*c %u", (unsigned *)&v) != 1) - v = (pid_t)0; - fclose(f); -#endif /* __linux__ */ -#ifdef __OpenBSD__ - int n; - kvm_t *kd; - struct kinfo_proc *kp; - - kd = kvm_openfiles(NULL, NULL, NULL, KVM_NO_FILES, NULL); - if (!kd) - return 0; - - kp = kvm_getprocs(kd, KERN_PROC_PID, p, sizeof(*kp), &n); - v = kp->p_ppid; -#endif /* __OpenBSD__ */ - return (pid_t)v; -} - -int -isdescprocess(pid_t p, pid_t c) -{ - while (p != c && c != 0) - c = getparentprocess(c); - - return (int)c; -} - -Client * -termforwin(const Client *w) -{ - Client *c; - Monitor *m; - - if (!w->pid || w->isterminal) - return NULL; - - c = selmon->sel; - if (c && c->isterminal && !c->swallowing && c->pid && isdescprocess(c->pid, w->pid)) - return c; - - for (m = mons; m; m = m->next) { - for (c = m->clients; c; c = c->next) { - if (c->isterminal && !c->swallowing && c->pid && isdescprocess(c->pid, w->pid)) - return c; - } - } - - return NULL; -} - -Client * -swallowingclient(Window w) -{ - Client *c; - Monitor *m; - - for (m = mons; m; m = m->next) { - for (c = m->clients; c; c = c->next) { - if (c->swallowing && c->swallowing->win == w) - return c; - } - } - - return NULL; -} diff --git a/suckless/dwm/patch/swallow.h b/suckless/dwm/patch/swallow.h deleted file mode 100644 index d44a7eac..00000000 --- a/suckless/dwm/patch/swallow.h +++ /dev/null @@ -1,7 +0,0 @@ -static pid_t getparentprocess(pid_t p); -static int isdescprocess(pid_t p, pid_t c); -static int swallow(Client *p, Client *c); -static Client *swallowingclient(Window w); -static Client *termforwin(const Client *c); -static void unswallow(Client *c); -static pid_t winpid(Window w); \ No newline at end of file diff --git a/suckless/dwm/patch/swapfocus.c b/suckless/dwm/patch/swapfocus.c deleted file mode 100644 index 7693925a..00000000 --- a/suckless/dwm/patch/swapfocus.c +++ /dev/null @@ -1,21 +0,0 @@ -void -swapfocus(const Arg *arg) -{ - if (!selmon->sel) - return; - if (selmon->pertag->prevclient[selmon->pertag->curtag] != NULL - && ISVISIBLE(selmon->pertag->prevclient[selmon->pertag->curtag])) { - focus(selmon->pertag->prevclient[selmon->pertag->curtag]); - restack(selmon->pertag->prevclient[selmon->pertag->curtag]->mon); - } - else { - Client *c = NULL; - for (c = selmon->sel->next; c && !ISVISIBLE(c); c = c->next); - if (!c) - for (c = selmon->clients; c && !ISVISIBLE(c); c = c->next); - if (c) { - focus(c); - restack(selmon); - } - } -} \ No newline at end of file diff --git a/suckless/dwm/patch/swapfocus.h b/suckless/dwm/patch/swapfocus.h deleted file mode 100644 index f5739886..00000000 --- a/suckless/dwm/patch/swapfocus.h +++ /dev/null @@ -1 +0,0 @@ -static void swapfocus(const Arg *arg); \ No newline at end of file diff --git a/suckless/dwm/patch/swaptags.c b/suckless/dwm/patch/swaptags.c deleted file mode 100644 index c43a83f9..00000000 --- a/suckless/dwm/patch/swaptags.c +++ /dev/null @@ -1,22 +0,0 @@ -void -swaptags(const Arg *arg) -{ - unsigned int newtag = arg->ui & TAGMASK; - unsigned int curtag = selmon->tagset[selmon->seltags]; - - if (newtag == curtag || !curtag || (curtag & (curtag-1))) - return; - - for (Client *c = selmon->clients; c != NULL; c = c->next) { - if ((c->tags & newtag) || (c->tags & curtag)) - c->tags ^= curtag ^ newtag; - - if (!c->tags) - c->tags = newtag; - } - - selmon->tagset[selmon->seltags] = newtag; - - focus(NULL); - arrange(selmon); -} \ No newline at end of file diff --git a/suckless/dwm/patch/swaptags.h b/suckless/dwm/patch/swaptags.h deleted file mode 100644 index 150fcce7..00000000 --- a/suckless/dwm/patch/swaptags.h +++ /dev/null @@ -1 +0,0 @@ -static void swaptags(const Arg *arg); \ No newline at end of file diff --git a/suckless/dwm/patch/switchcol.c b/suckless/dwm/patch/switchcol.c index b2fe595b..30808cbb 100644 --- a/suckless/dwm/patch/switchcol.c +++ b/suckless/dwm/patch/switchcol.c @@ -25,4 +25,4 @@ switchcol(const Arg *arg) break; } } -} \ No newline at end of file +} diff --git a/suckless/dwm/patch/switchcol.h b/suckless/dwm/patch/switchcol.h index f7f5f962..68072e00 100644 --- a/suckless/dwm/patch/switchcol.h +++ b/suckless/dwm/patch/switchcol.h @@ -1 +1 @@ -static void switchcol(const Arg *arg); \ No newline at end of file +static void switchcol(const Arg *arg); diff --git a/suckless/dwm/patch/tagall.c b/suckless/dwm/patch/tagall.c deleted file mode 100644 index 81f44e0c..00000000 --- a/suckless/dwm/patch/tagall.c +++ /dev/null @@ -1,25 +0,0 @@ -void -tagall(const Arg *arg) -{ - if (!selmon->clients) - return; - /* if parameter starts with F, just move floating windows */ - int floating_only = (char *)arg->v && ((char *)arg->v)[0] == 'F' ? 1 : 0; - int tag = (char *)arg->v ? atoi(((char *)arg->v) + floating_only) : 0; - int j; - Client* c; - if (tag >= 0 && tag < NUMTAGS) - for (c = selmon->clients; c; c = c->next) - { - if (!floating_only || c->isfloating) - for (j = 0; j < NUMTAGS; j++) - { - if (c->tags & 1 << j && selmon->tagset[selmon->seltags] & 1 << j) - { - c->tags = c->tags ^ (1 << j & TAGMASK); - c->tags = c->tags | 1 << (tag-1); - } - } - } - arrange(selmon); -} \ No newline at end of file diff --git a/suckless/dwm/patch/tagall.h b/suckless/dwm/patch/tagall.h deleted file mode 100644 index 09fe4d1e..00000000 --- a/suckless/dwm/patch/tagall.h +++ /dev/null @@ -1 +0,0 @@ -static void tagall(const Arg *arg); \ No newline at end of file diff --git a/suckless/dwm/patch/tagallmon.c b/suckless/dwm/patch/tagallmon.c deleted file mode 100644 index f863b6d3..00000000 --- a/suckless/dwm/patch/tagallmon.c +++ /dev/null @@ -1,48 +0,0 @@ -void -tagallmon(const Arg *arg) -{ - Monitor *m; - Client *c, *last, *slast, *next; - - if (!mons->next) - return; - - m = dirtomon(arg->i); - for (last = m->clients; last && last->next; last = last->next); - for (slast = m->stack; slast && slast->snext; slast = slast->snext); - - for (c = selmon->clients; c; c = next) { - next = c->next; - if (!ISVISIBLE(c)) - continue; - unfocus(c, 1, NULL); - detach(c); - detachstack(c); - c->mon = m; - c->tags = m->tagset[m->seltags]; /* assign tags of target monitor */ - c->next = NULL; - c->snext = NULL; - if (last) - last = last->next = c; - else - m->clients = last = c; - if (slast) - slast = slast->snext = c; - else - m->stack = slast = c; - if (c->isfullscreen) { - #if !FAKEFULLSCREEN_PATCH && FAKEFULLSCREEN_CLIENT_PATCH - if (c->fakefullscreen != 1) { - resizeclient(c, c->mon->mx, c->mon->my, c->mon->mw, c->mon->mh); - XRaiseWindow(dpy, c->win); - } - #elif !FAKEFULLSCREEN_PATCH - resizeclient(c, c->mon->mx, c->mon->my, c->mon->mw, c->mon->mh); - XRaiseWindow(dpy, c->win); - #endif // FAKEFULLSCREEN_CLIENT_PATCH - } - } - - focus(NULL); - arrange(NULL); -} \ No newline at end of file diff --git a/suckless/dwm/patch/tagallmon.h b/suckless/dwm/patch/tagallmon.h deleted file mode 100644 index e4090242..00000000 --- a/suckless/dwm/patch/tagallmon.h +++ /dev/null @@ -1 +0,0 @@ -static void tagallmon(const Arg *arg); \ No newline at end of file diff --git a/suckless/dwm/patch/tagothermonitor.c b/suckless/dwm/patch/tagothermonitor.c deleted file mode 100644 index ddeaff87..00000000 --- a/suckless/dwm/patch/tagothermonitor.c +++ /dev/null @@ -1,43 +0,0 @@ -#if IPC_PATCH || DWMC_PATCH -void -tagnextmonex(const Arg *arg) -{ - tagnextmon(&((Arg) { .ui = 1 << arg->ui })); -} - -void -tagprevmonex(const Arg *arg) -{ - tagprevmon(&((Arg) { .ui = 1 << arg->ui })); -} -#endif // IPC_PATCH | DWMC_PATCH - -void -tagnextmon(const Arg *arg) -{ - tagothermon(arg, 1); -} - -void -tagprevmon(const Arg *arg) -{ - tagothermon(arg, -1); -} - -void -tagothermon(const Arg *arg, int dir) -{ - Client *sel; - Monitor *newmon; - - if (!selmon->sel || !mons->next) - return; - sel = selmon->sel; - newmon = dirtomon(dir); - sendmon(sel, newmon); - if (arg->ui & TAGMASK) { - sel->tags = arg->ui & TAGMASK; - focus(NULL); - arrange(newmon); - } -} diff --git a/suckless/dwm/patch/tagothermonitor.h b/suckless/dwm/patch/tagothermonitor.h deleted file mode 100644 index e2aa24f9..00000000 --- a/suckless/dwm/patch/tagothermonitor.h +++ /dev/null @@ -1,8 +0,0 @@ -#if IPC_PATCH || DWMC_PATCH -static void tagnextmonex(const Arg *arg); -static void tagprevmonex(const Arg *arg); -#endif // IPC_PATCH | DWMC_PATCH - -static void tagnextmon(const Arg *arg); -static void tagprevmon(const Arg *arg); -static void tagothermon(const Arg *arg, int dir); diff --git a/suckless/dwm/patch/tagswapmon.c b/suckless/dwm/patch/tagswapmon.c deleted file mode 100644 index a6f8a32a..00000000 --- a/suckless/dwm/patch/tagswapmon.c +++ /dev/null @@ -1,74 +0,0 @@ -void -tagswapmon(const Arg *arg) -{ - Monitor *m; - Client *c, *sc = NULL, *mc = NULL, *next; - - if (!mons->next) - return; - - m = dirtomon(arg->i); - - for (c = selmon->clients; c; c = next) { - next = c->next; - if (!ISVISIBLE(c)) - continue; - unfocus(c, 1, NULL); - detach(c); - detachstack(c); - c->next = sc; - sc = c; - } - - for (c = m->clients; c; c = next) { - next = c->next; - if (!ISVISIBLE(c)) - continue; - unfocus(c, 1, NULL); - detach(c); - detachstack(c); - c->next = mc; - mc = c; - } - - for (c = sc; c; c = next) { - next = c->next; - c->mon = m; - c->tags = m->tagset[m->seltags]; /* assign tags of target monitor */ - attach(c); - attachstack(c); - if (c->isfullscreen) { - #if !FAKEFULLSCREEN_PATCH && FAKEFULLSCREEN_CLIENT_PATCH - if (c->fakefullscreen != 1) { - resizeclient(c, c->mon->mx, c->mon->my, c->mon->mw, c->mon->mh); - XRaiseWindow(dpy, c->win); - } - #elif !FAKEFULLSCREEN_PATCH - resizeclient(c, c->mon->mx, c->mon->my, c->mon->mw, c->mon->mh); - XRaiseWindow(dpy, c->win); - #endif // FAKEFULLSCREEN_CLIENT_PATCH - } - } - - for (c = mc; c; c = next) { - next = c->next; - c->mon = selmon; - c->tags = selmon->tagset[selmon->seltags]; /* assign tags of target monitor */ - attach(c); - attachstack(c); - if (c->isfullscreen) { - #if !FAKEFULLSCREEN_PATCH && FAKEFULLSCREEN_CLIENT_PATCH - if (c->fakefullscreen != 1) { - resizeclient(c, c->mon->mx, c->mon->my, c->mon->mw, c->mon->mh); - XRaiseWindow(dpy, c->win); - } - #elif !FAKEFULLSCREEN_PATCH - resizeclient(c, c->mon->mx, c->mon->my, c->mon->mw, c->mon->mh); - XRaiseWindow(dpy, c->win); - #endif // FAKEFULLSCREEN_CLIENT_PATCH - } - } - - focus(NULL); - arrange(NULL); -} \ No newline at end of file diff --git a/suckless/dwm/patch/tagswapmon.h b/suckless/dwm/patch/tagswapmon.h deleted file mode 100644 index 433f4b16..00000000 --- a/suckless/dwm/patch/tagswapmon.h +++ /dev/null @@ -1 +0,0 @@ -static void tagswapmon(const Arg *arg); \ No newline at end of file diff --git a/suckless/dwm/patch/togglefullscreen.c b/suckless/dwm/patch/togglefullscreen.c index bc1c705b..8b4240ca 100644 --- a/suckless/dwm/patch/togglefullscreen.c +++ b/suckless/dwm/patch/togglefullscreen.c @@ -5,13 +5,5 @@ togglefullscreen(const Arg *arg) if (!c) return; - #if FAKEFULLSCREEN_CLIENT_PATCH - if (c->fakefullscreen == 1) { // fake fullscreen --> fullscreen - c->fakefullscreen = 2; - setfullscreen(c, 1); - } else - setfullscreen(c, !c->isfullscreen); - #else setfullscreen(c, !c->isfullscreen); - #endif // FAKEFULLSCREEN_CLIENT_PATCH } diff --git a/suckless/dwm/patch/togglefullscreen.h b/suckless/dwm/patch/togglefullscreen.h index 7e1126af..1ea65784 100644 --- a/suckless/dwm/patch/togglefullscreen.h +++ b/suckless/dwm/patch/togglefullscreen.h @@ -1 +1 @@ -static void togglefullscreen(const Arg *arg); \ No newline at end of file +static void togglefullscreen(const Arg *arg); diff --git a/suckless/dwm/patch/transfer.c b/suckless/dwm/patch/transfer.c deleted file mode 100644 index 0a99f310..00000000 --- a/suckless/dwm/patch/transfer.c +++ /dev/null @@ -1,33 +0,0 @@ -void -transfer(const Arg *arg) -{ - Client *c, *mtail = selmon->clients, *stail = NULL, *insertafter; - int transfertostack = 0, i, nmasterclients; - - for (i = 0, c = selmon->clients; c; c = c->next) { - if (!ISVISIBLE(c) || c->isfloating) continue; - if (selmon->sel == c) { transfertostack = i < selmon->nmaster && selmon->nmaster != 0; } - if (i < selmon->nmaster) { nmasterclients++; mtail = c; } - stail = c; - i++; - } - if (!selmon->sel || selmon->sel->isfloating || i == 0) { - return; - } else if (transfertostack) { - selmon->nmaster = MIN(i, selmon->nmaster) - 1; - insertafter = stail; - } else { - selmon->nmaster = selmon->nmaster + 1; - insertafter = mtail; - } - if (insertafter != selmon->sel) { - detach(selmon->sel); - if (selmon->nmaster == 1 && !transfertostack) { - attach(selmon->sel); // Head prepend case - } else { - selmon->sel->next = insertafter->next; - insertafter->next = selmon->sel; - } - } - arrange(selmon); -} diff --git a/suckless/dwm/patch/transfer.h b/suckless/dwm/patch/transfer.h deleted file mode 100644 index a8436dda..00000000 --- a/suckless/dwm/patch/transfer.h +++ /dev/null @@ -1 +0,0 @@ -static void transfer(const Arg *arg); \ No newline at end of file diff --git a/suckless/dwm/patch/transferall.c b/suckless/dwm/patch/transferall.c deleted file mode 100644 index fe126997..00000000 --- a/suckless/dwm/patch/transferall.c +++ /dev/null @@ -1,25 +0,0 @@ -void -transferall(const Arg *arg) -{ - Client *c, *n = selmon->clients, *attachfrom = NULL; - int i = 0, nstackclients = 0; - while (n) { - c = n; - n = c->next; - if (!ISVISIBLE(c) || c->isfloating) continue; - if (i >= selmon->nmaster) { - detach(c); - if (!attachfrom) { - attach(c); - } else { - c->next = attachfrom->next; - attachfrom->next = c; - } - attachfrom = c; - nstackclients++; - } - i++; - } - selmon->nmaster = nstackclients; - arrange(selmon); -} \ No newline at end of file diff --git a/suckless/dwm/patch/transferall.h b/suckless/dwm/patch/transferall.h deleted file mode 100644 index 55564688..00000000 --- a/suckless/dwm/patch/transferall.h +++ /dev/null @@ -1 +0,0 @@ -static void transferall(const Arg *arg); \ No newline at end of file diff --git a/suckless/dwm/patch/unfloatvisible.c b/suckless/dwm/patch/unfloatvisible.c deleted file mode 100644 index 8f0360de..00000000 --- a/suckless/dwm/patch/unfloatvisible.c +++ /dev/null @@ -1,14 +0,0 @@ -void -unfloatvisible(const Arg *arg) -{ - Client *c; - - for (c = selmon->clients; c; c = c->next) - if (ISVISIBLE(c) && c->isfloating) - c->isfloating = c->isfixed; - - if (arg && arg->v) - setlayout(arg); - else - arrange(selmon); -} \ No newline at end of file diff --git a/suckless/dwm/patch/unfloatvisible.h b/suckless/dwm/patch/unfloatvisible.h deleted file mode 100644 index 690b6eff..00000000 --- a/suckless/dwm/patch/unfloatvisible.h +++ /dev/null @@ -1 +0,0 @@ -static void unfloatvisible(const Arg *arg); \ No newline at end of file diff --git a/suckless/dwm/patch/vanitygaps.c b/suckless/dwm/patch/vanitygaps.c index dd579dec..573f4ff3 100644 --- a/suckless/dwm/patch/vanitygaps.c +++ b/suckless/dwm/patch/vanitygaps.c @@ -1,7 +1,4 @@ /* Settings */ -#if !PERTAG_PATCH -static int enablegaps = 1; -#endif // PERTAG_PATCH static void setgaps(int oh, int ov, int ih, int iv) @@ -18,68 +15,11 @@ setgaps(int oh, int ov, int ih, int iv) arrange(selmon); } -#if IPC_PATCH || DWMC_PATCH -/* External function that takes one integer and splits it - * into four gap values: - * - outer horizontal (oh) - * - outer vertical (ov) - * - inner horizontal (ih) - * - inner vertical (iv) - * - * Each value is represented as one byte with the uppermost - * bit of each byte indicating whether or not to keep the - * current value. - * - * Example: - * - * 10000000 10000000 00001111 00001111 - * | | | | - * + keep oh + keep ov + ih 15px + iv 15px - * - * This gives an int of: - * 10000000100000000000111100001111 = 2155876111 - * - * Thus this command should set inner gaps to 15: - * xsetroot -name "fsignal:setgaps i 2155876111" - */ -static void -setgapsex(const Arg *arg) -{ - int oh = selmon->gappoh; - int ov = selmon->gappov; - int ih = selmon->gappih; - int iv = selmon->gappiv; - - if (!(arg->i & (1 << 31))) - oh = (arg->i & 0x7f000000) >> 24; - if (!(arg->i & (1 << 23))) - ov = (arg->i & 0x7f0000) >> 16; - if (!(arg->i & (1 << 15))) - ih = (arg->i & 0x7f00) >> 8; - if (!(arg->i & (1 << 7))) - iv = (arg->i & 0x7f); - - /* Auto enable gaps if disabled */ - #if PERTAG_PATCH - if (!selmon->pertag->enablegaps[selmon->pertag->curtag]) - selmon->pertag->enablegaps[selmon->pertag->curtag] = 1; - #else - if (!enablegaps) - enablegaps = 1; - #endif // PERTAG_PATCH - - setgaps(oh, ov, ih, iv); -} -#endif // IPC_PATCH | DWMC_PATCH static void togglegaps(const Arg *arg) { - #if PERTAG_PATCH selmon->pertag->enablegaps[selmon->pertag->curtag] = !selmon->pertag->enablegaps[selmon->pertag->curtag]; - #else - enablegaps = !enablegaps; - #endif // PERTAG_PATCH arrange(NULL); } @@ -166,16 +106,11 @@ incrivgaps(const Arg *arg) ); } -#if DRAGMFACT_PATCH || CENTEREDMASTER_LAYOUT || CENTEREDFLOATINGMASTER_LAYOUT || COLUMNS_LAYOUT || DECK_LAYOUT || FIBONACCI_DWINDLE_LAYOUT || FIBONACCI_SPIRAL_LAYOUT || GAPPLESSGRID_LAYOUT || NROWGRID_LAYOUT || HORIZGRID_LAYOUT || BSTACK_LAYOUT || BSTACKHORIZ_LAYOUT || GRIDMODE_LAYOUT || FLEXTILE_DELUXE_LAYOUT || TILE_LAYOUT || (VANITYGAPS_MONOCLE_PATCH && MONOCLE_LAYOUT) static void getgaps(Monitor *m, int *oh, int *ov, int *ih, int *iv, unsigned int *nc) { unsigned int n, oe, ie; - #if PERTAG_PATCH oe = ie = selmon->pertag->enablegaps[selmon->pertag->curtag]; - #else - oe = ie = enablegaps; - #endif // PERTAG_PATCH Client *c; for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); @@ -189,4 +124,3 @@ getgaps(Monitor *m, int *oh, int *ov, int *ih, int *iv, unsigned int *nc) *iv = m->gappiv*ie; // inner vertical gap *nc = n; // number of clients } -#endif diff --git a/suckless/dwm/patch/vanitygaps.h b/suckless/dwm/patch/vanitygaps.h index c3eb6222..e9390c88 100644 --- a/suckless/dwm/patch/vanitygaps.h +++ b/suckless/dwm/patch/vanitygaps.h @@ -10,10 +10,5 @@ static void incrivgaps(const Arg *arg); static void togglegaps(const Arg *arg); /* Internals */ -#if DRAGMFACT_PATCH || CENTEREDMASTER_LAYOUT || CENTEREDFLOATINGMASTER_LAYOUT || COLUMNS_LAYOUT || DECK_LAYOUT || FIBONACCI_DWINDLE_LAYOUT || FIBONACCI_SPIRAL_LAYOUT || GAPPLESSGRID_LAYOUT || NROWGRID_LAYOUT || HORIZGRID_LAYOUT || BSTACK_LAYOUT || BSTACKHORIZ_LAYOUT || GRIDMODE_LAYOUT || FLEXTILE_DELUXE_LAYOUT || TILE_LAYOUT || (VANITYGAPS_MONOCLE_PATCH && MONOCLE_LAYOUT) static void getgaps(Monitor *m, int *oh, int *ov, int *ih, int *iv, unsigned int *nc); -#endif static void setgaps(int oh, int ov, int ih, int iv); -#if IPC_PATCH || DWMC_PATCH -static void setgapsex(const Arg *arg); -#endif // IPC_PATCH | DWMC_PATCH \ No newline at end of file diff --git a/suckless/dwm/patch/warp.c b/suckless/dwm/patch/warp.c deleted file mode 100644 index 41838187..00000000 --- a/suckless/dwm/patch/warp.c +++ /dev/null @@ -1,37 +0,0 @@ -void -warp(const Client *c) -{ - Monitor *m; - Bar *bar; - int x, y; - - if (ignore_warp) - return; - - if (!c) { - XWarpPointer(dpy, None, root, 0, 0, 0, 0, selmon->wx + selmon->ww / 2, selmon->wy + selmon->wh / 2); - return; - } - - if (!getrootptr(&x, &y)) - return; - - if (!force_warp && - (x > c->x - c->bw && - y > c->y - c->bw && - x < c->x + c->w + c->bw*2 && - y < c->y + c->h + c->bw*2)) - return; - - force_warp = 0; - - for (m = mons; m; m = m->next) - for (bar = m->bar; bar; bar = bar->next) - if (x > bar->bx && - x < bar->bx + bar->bw && - y > bar->by && - y < bar->by + bar->bh) - return; - - XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w / 2, c->h / 2); -} diff --git a/suckless/dwm/patch/warp.h b/suckless/dwm/patch/warp.h deleted file mode 100644 index 6657dc11..00000000 --- a/suckless/dwm/patch/warp.h +++ /dev/null @@ -1 +0,0 @@ -static void warp(const Client *c); \ No newline at end of file diff --git a/suckless/dwm/patch/winview.c b/suckless/dwm/patch/winview.c index a73ee660..3f6f8501 100644 --- a/suckless/dwm/patch/winview.c +++ b/suckless/dwm/patch/winview.c @@ -17,4 +17,4 @@ winview(const Arg* arg) a.ui = c->tags; view(&a); -} \ No newline at end of file +} diff --git a/suckless/dwm/patch/winview.h b/suckless/dwm/patch/winview.h index a2405330..620a3edf 100644 --- a/suckless/dwm/patch/winview.h +++ b/suckless/dwm/patch/winview.h @@ -1 +1 @@ -static void winview(const Arg* arg); \ No newline at end of file +static void winview(const Arg* arg); diff --git a/suckless/dwm/patch/xrdb.c b/suckless/dwm/patch/xrdb.c deleted file mode 100644 index e8633cd7..00000000 --- a/suckless/dwm/patch/xrdb.c +++ /dev/null @@ -1,125 +0,0 @@ -void -loadxrdb() -{ - Display *display; - char * resm; - XrmDatabase xrdb; - char *type; - XrmValue value; - - display = XOpenDisplay(NULL); - - if (display != NULL) { - resm = XResourceManagerString(display); - - if (resm != NULL) { - xrdb = XrmGetStringDatabase(resm); - - if (xrdb != NULL) { - XRDB_LOAD_COLOR("dwm.normfgcolor", normfgcolor); - XRDB_LOAD_COLOR("dwm.normbgcolor", normbgcolor); - XRDB_LOAD_COLOR("dwm.normbordercolor", normbordercolor); - XRDB_LOAD_COLOR("dwm.normfloatcolor", normfloatcolor); - XRDB_LOAD_COLOR("dwm.selfgcolor", selfgcolor); - XRDB_LOAD_COLOR("dwm.selbgcolor", selbgcolor); - XRDB_LOAD_COLOR("dwm.selbordercolor", selbordercolor); - XRDB_LOAD_COLOR("dwm.selfloatcolor", selfloatcolor); - XRDB_LOAD_COLOR("dwm.titlenormfgcolor", titlenormfgcolor); - XRDB_LOAD_COLOR("dwm.titlenormbgcolor", titlenormbgcolor); - XRDB_LOAD_COLOR("dwm.titlenormbordercolor", titlenormbordercolor); - XRDB_LOAD_COLOR("dwm.titlenormfloatcolor", titlenormfloatcolor); - XRDB_LOAD_COLOR("dwm.titleselfgcolor", titleselfgcolor); - XRDB_LOAD_COLOR("dwm.titleselbgcolor", titleselbgcolor); - XRDB_LOAD_COLOR("dwm.titleselbordercolor", titleselbordercolor); - XRDB_LOAD_COLOR("dwm.titleselfloatcolor", titleselfloatcolor); - XRDB_LOAD_COLOR("dwm.tagsnormfgcolor", tagsnormfgcolor); - XRDB_LOAD_COLOR("dwm.tagsnormbgcolor", tagsnormbgcolor); - XRDB_LOAD_COLOR("dwm.tagsnormbordercolor", tagsnormbordercolor); - XRDB_LOAD_COLOR("dwm.tagsnormfloatcolor", tagsnormfloatcolor); - XRDB_LOAD_COLOR("dwm.tagsselfgcolor", tagsselfgcolor); - XRDB_LOAD_COLOR("dwm.tagsselbgcolor", tagsselbgcolor); - XRDB_LOAD_COLOR("dwm.tagsselbordercolor", tagsselbordercolor); - XRDB_LOAD_COLOR("dwm.tagsselfloatcolor", tagsselfloatcolor); - XRDB_LOAD_COLOR("dwm.hidfgcolor", hidfgcolor); - XRDB_LOAD_COLOR("dwm.hidbgcolor", hidbgcolor); - XRDB_LOAD_COLOR("dwm.hidbordercolor", hidbordercolor); - XRDB_LOAD_COLOR("dwm.hidfloatcolor", hidfloatcolor); - XRDB_LOAD_COLOR("dwm.urgfgcolor", urgfgcolor); - XRDB_LOAD_COLOR("dwm.urgbgcolor", urgbgcolor); - XRDB_LOAD_COLOR("dwm.urgbordercolor", urgbordercolor); - XRDB_LOAD_COLOR("dwm.urgfloatcolor", urgfloatcolor); - #if BAR_FLEXWINTITLE_PATCH - XRDB_LOAD_COLOR("dwm.normTTBbgcolor", normTTBbgcolor); - XRDB_LOAD_COLOR("dwm.normLTRbgcolor", normLTRbgcolor); - XRDB_LOAD_COLOR("dwm.normMONObgcolor", normMONObgcolor); - XRDB_LOAD_COLOR("dwm.normGRIDbgcolor", normGRIDbgcolor); - XRDB_LOAD_COLOR("dwm.normGRD1bgcolor", normGRD1bgcolor); - XRDB_LOAD_COLOR("dwm.normGRD2bgcolor", normGRD2bgcolor); - XRDB_LOAD_COLOR("dwm.normGRDMbgcolor", normGRDMbgcolor); - XRDB_LOAD_COLOR("dwm.normHGRDbgcolor", normHGRDbgcolor); - XRDB_LOAD_COLOR("dwm.normDWDLbgcolor", normDWDLbgcolor); - XRDB_LOAD_COLOR("dwm.normSPRLbgcolor", normSPRLbgcolor); - XRDB_LOAD_COLOR("dwm.normfloatbgcolor", normfloatbgcolor); - XRDB_LOAD_COLOR("dwm.actTTBbgcolor", actTTBbgcolor); - XRDB_LOAD_COLOR("dwm.actLTRbgcolor", actLTRbgcolor); - XRDB_LOAD_COLOR("dwm.actMONObgcolor", actMONObgcolor); - XRDB_LOAD_COLOR("dwm.actGRIDbgcolor", actGRIDbgcolor); - XRDB_LOAD_COLOR("dwm.actGRD1bgcolor", actGRD1bgcolor); - XRDB_LOAD_COLOR("dwm.actGRD2bgcolor", actGRD2bgcolor); - XRDB_LOAD_COLOR("dwm.actGRDMbgcolor", actGRDMbgcolor); - XRDB_LOAD_COLOR("dwm.actHGRDbgcolor", actHGRDbgcolor); - XRDB_LOAD_COLOR("dwm.actDWDLbgcolor", actDWDLbgcolor); - XRDB_LOAD_COLOR("dwm.actSPRLbgcolor", actSPRLbgcolor); - XRDB_LOAD_COLOR("dwm.actfloatbgcolor", actfloatbgcolor); - XRDB_LOAD_COLOR("dwm.selTTBbgcolor", selTTBbgcolor); - XRDB_LOAD_COLOR("dwm.selLTRbgcolor", selLTRbgcolor); - XRDB_LOAD_COLOR("dwm.selMONObgcolor", selMONObgcolor); - XRDB_LOAD_COLOR("dwm.selGRIDbgcolor", selGRIDbgcolor); - XRDB_LOAD_COLOR("dwm.selGRD1bgcolor", selGRD1bgcolor); - XRDB_LOAD_COLOR("dwm.selGRD2bgcolor", selGRD2bgcolor); - XRDB_LOAD_COLOR("dwm.selGRDMbgcolor", selGRDMbgcolor); - XRDB_LOAD_COLOR("dwm.selHGRDbgcolor", selHGRDbgcolor); - XRDB_LOAD_COLOR("dwm.selDWDLbgcolor", selDWDLbgcolor); - XRDB_LOAD_COLOR("dwm.selSPRLbgcolor", selSPRLbgcolor); - XRDB_LOAD_COLOR("dwm.selfloatbgcolor", selfloatbgcolor); - #endif // BAR_FLEXWINTITLE_PATCH - #if BAR_STATUS2D_XRDB_TERMCOLORS_PATCH && BAR_STATUS2D_PATCH - XRDB_LOAD_COLOR("color0", termcol0); - XRDB_LOAD_COLOR("color1", termcol1); - XRDB_LOAD_COLOR("color2", termcol2); - XRDB_LOAD_COLOR("color3", termcol3); - XRDB_LOAD_COLOR("color4", termcol4); - XRDB_LOAD_COLOR("color5", termcol5); - XRDB_LOAD_COLOR("color6", termcol6); - XRDB_LOAD_COLOR("color7", termcol7); - XRDB_LOAD_COLOR("color8", termcol8); - XRDB_LOAD_COLOR("color9", termcol9); - XRDB_LOAD_COLOR("color10", termcol10); - XRDB_LOAD_COLOR("color11", termcol11); - XRDB_LOAD_COLOR("color12", termcol12); - XRDB_LOAD_COLOR("color13", termcol13); - XRDB_LOAD_COLOR("color14", termcol14); - XRDB_LOAD_COLOR("color15", termcol15); - #endif // BAR_STATUS2D_XRDB_TERMCOLORS_PATCH - } - } - } - - XCloseDisplay(display); -} - -void -xrdb(const Arg *arg) -{ - loadxrdb(); - int i; - for (i = 0; i < LENGTH(colors); i++) - scheme[i] = drw_scm_create(drw, colors[i], - #if BAR_ALPHA_PATCH - alphas[i], - #endif // BAR_ALPHA_PATCH - ColCount - ); - focus(NULL); - arrange(NULL); -} \ No newline at end of file diff --git a/suckless/dwm/patch/xrdb.h b/suckless/dwm/patch/xrdb.h deleted file mode 100644 index 304f2e22..00000000 --- a/suckless/dwm/patch/xrdb.h +++ /dev/null @@ -1,21 +0,0 @@ -#include - -#define XRDB_LOAD_COLOR(R,V) if (XrmGetResource(xrdb, R, NULL, &type, &value) == True) { \ - if (value.addr != NULL && strnlen(value.addr, 8) == 7 && value.addr[0] == '#') { \ - int i = 1; \ - for (; i <= 6; i++) { \ - if (value.addr[i] < 48) break; \ - if (value.addr[i] > 57 && value.addr[i] < 65) break; \ - if (value.addr[i] > 70 && value.addr[i] < 97) break; \ - if (value.addr[i] > 102) break; \ - } \ - if (i == 7) { \ - strncpy(V, value.addr, 7); \ - V[7] = '\0'; \ - } \ - } \ - } - -static void loadxrdb(void); -static void xrdb(const Arg *arg); - diff --git a/suckless/dwm/patch/zoomswap.c b/suckless/dwm/patch/zoomswap.c deleted file mode 100644 index d7f57c4f..00000000 --- a/suckless/dwm/patch/zoomswap.c +++ /dev/null @@ -1,13 +0,0 @@ - -#if !PERTAG_PATCH -static Client *prevzoom = NULL; -#endif // PERTAG_PATCH - -Client * -findbefore(Client *c) { - Client *p; - if (!c || c == c->mon->clients) - return NULL; - for (p = c->mon->clients; p && p->next != c; p = p->next); - return p; -} \ No newline at end of file diff --git a/suckless/dwm/patch/zoomswap.h b/suckless/dwm/patch/zoomswap.h deleted file mode 100644 index 21cc8487..00000000 --- a/suckless/dwm/patch/zoomswap.h +++ /dev/null @@ -1 +0,0 @@ -static Client *findbefore(Client *c); \ No newline at end of file diff --git a/suckless/dwm/patches.def.h b/suckless/dwm/patches.def.h deleted file mode 100644 index 0a27b1cc..00000000 --- a/suckless/dwm/patches.def.h +++ /dev/null @@ -1,1178 +0,0 @@ -/* - * This file contains patch control flags. - * - * In principle you should be able to mix and match any patches - * you may want. In cases where patches are logically incompatible - * one patch may take precedence over the other as noted in the - * relevant descriptions. - * - * Although layouts typically come as patches they are differentiated - * here for grouping purposes. - */ - -/** - * Bar modules - */ - -/* Enhanced taskbar that shows the titles of all visible windows in the status bar - * and allows focus / hiding / unhiding of windows by clicking on the status bar. - * Awesomebar takes precedence over fancybar. - * https://dwm.suckless.org/patches/awesomebar/ - */ -#define BAR_AWESOMEBAR_PATCH 0 - -/* This patch depends on statuscmd patch and adds integration with a (patched) dwmblocks - * instance to give a clickable status bar. - * Patch: https://gist.github.com/danbyl/54f7c1d57fc6507242a95b71c3d8fdea - * dwmblocks: https://github.com/torrinfail/dwmblocks - */ -#define BAR_DWMBLOCKS_PATCH 0 - -/* This patch shows the titles of all visible windows in the status bar - * (as opposed to showing only the selected one). - * Awesomebar takes precedence over fancybar. Fancybar takes precedence over - * the centeredwindowname patch. - * https://dwm.suckless.org/patches/fancybar/ - */ -#define BAR_FANCYBAR_PATCH 0 - -/* Being an evolution of the bartabgroups patch the flexwintitle patch specifically - * taps into the many layout options that flextile-deluxe offers to produce a window - * title section in the bar that is representative of what is shown on screen. - */ -#define BAR_FLEXWINTITLE_PATCH 0 - -/* This patch adds a context menu for layout switching. - * - xmenu needs to be installed. - * - Edit layoutmenu.sh with the installed layouts and with correct indexes. - * - Place layoutmenu.sh in PATH. - * - The text of the menu items is for display only. Name them however you want. - * https://dwm.suckless.org/patches/layoutmenu/ - */ -#define BAR_LAYOUTMENU_PATCH 0 - -/* Show layout symbol in bar */ -#define BAR_LTSYMBOL_PATCH 1 - -/* Adds powerline arrows for the status. - * This uses statuscolors logic for choosing colors for the powerline. As these markers - * are also control characters there is no explicit statuscmd support for this patch. - * - * Powerline separators are defined as: - * |\xXX (creates a hard edge) - * <\xXX (creates a less than arrow) - * /\xXX (creates a diagonal line) - * - * Examples: - * xsetroot -name "$(echo -e '<\x01a<\x02b<\x03c')" - * xsetroot -name "$(echo -e '/\x01d/\x02d/\x03f')" - * - * https://gitlab.com/udiboy1209-suckless/dwm/-/commit/071f5063e8ac4280666828179f92788d893eea40#4b1a539194be7467cefbda22f675a3b7c19ceca7 - * https://dwm.suckless.org/patches/statuscolors/ - */ -#define BAR_POWERLINE_STATUS_PATCH 0 - -/* Adds powerline arrows for the tags. - * https://gitlab.com/udiboy1209-suckless/dwm/-/commit/071f5063e8ac4280666828179f92788d893eea40#4b1a539194be7467cefbda22f675a3b7c19ceca7 - */ -#define BAR_POWERLINE_TAGS_PATCH 0 - -/* Alters the tags powerline to use forward slash instead of arrows */ -#define BAR_POWERLINE_TAGS_SLASH_PATCH 0 - -/* This patch turns the titlebar area into a mfact-respecting tabbar showing each client's title. - * https://dwm.suckless.org/patches/bartabgroups/ - */ -#define BAR_TABGROUPS_PATCH 0 - -/* This patch adds an option to place tags in rows like in many other window managers. - * https://dwm.suckless.org/patches/taggrid/ - */ -#define BAR_TAGGRID_PATCH 0 - -/* Show status in bar */ -#define BAR_STATUS_PATCH 1 - -/* This patch adds a clickable button to the left hand side of the statusbar. - * https://dwm.suckless.org/patches/statusbutton/ - */ -#define BAR_STATUSBUTTON_PATCH 0 - -/* This patch adds the ability to execute shell commands based on the mouse button and position - * when clicking the status bar. Refer to the website for usage. - * https://dwm.suckless.org/patches/statuscmd/ - */ -#define BAR_STATUSCMD_PATCH 0 - -/* Status2d allows colors and rectangle drawing in your dwm status bar. - * This patch is incompatible with the statuscolors patch which takes precedence. - * This patch is incompatible with the extrabar patch. - * https://dwm.suckless.org/patches/status2d/ - */ -#define BAR_STATUS2D_PATCH 0 - -/* Supplementary patch should you want to disable alpha for the status2d section */ -#define BAR_STATUS2D_NO_ALPHA_PATCH 0 - -/* Addition to the status2d patch that allows the use of terminal colors (color0 through color15) - * from xrdb in the status, allowing programs like pywal to change statusbar colors. - * This adds the C and B codes to use terminal foreground and background colors respectively. - * E.g. ^B5^ would use color5 as the background color. - * https://dwm.suckless.org/patches/status2d/ - */ -#define BAR_STATUS2D_XRDB_TERMCOLORS_PATCH 0 - -/* The systray patch adds systray for the status bar. - * https://dwm.suckless.org/patches/systray/ - */ -#define BAR_SYSTRAY_PATCH 0 - -/* Show tag symbols in bar */ -#define BAR_TAGS_PATCH 1 - -/* Show window title in bar */ -#define BAR_WINTITLE_PATCH 1 - -/* Shows window titles in the bar, but only for floating clients. - * This depends on code from the flexwintitle patch. - * Note that the configuration in config.def.h for this is merely an example. If combined - * with the corresponding hidden patch then these two will overlap unless the width of the - * modules are controlled. - */ -#define BAR_WINTITLE_FLOATING_PATCH 0 - -/* Shows window titles in the bar, but only for floating clients. - * This depends on code from the flexwintitle patch. - * Note that the configuration in config.def.h for this is merely an example. If combined - * with the corresponding floating patch then these two will overlap unless the width of the - * modules are controlled. - */ -#define BAR_WINTITLE_HIDDEN_PATCH 0 - -/* Title bar modules such as wintitle (default), fancybar and awesomebar - * do not by default add left and/or right padding as they take up the - * remaining space. These options allow you explicitly add padding should - * you need it. - */ -#define BAR_TITLE_RIGHT_PAD_PATCH 0 -#define BAR_TITLE_LEFT_PAD_PATCH 1 - -/** - * Bar options - */ - -/* This patch changes the rectangle indicating if a tag is used by a client into a bar - * above the tag name for better visibility. - * Set the tagindicatortype variable in config.h to INDICATOR_TOP_BAR to enable this. - * https://dwm.suckless.org/patches/activetagindicatorbar/ - */ -#define BAR_ACTIVETAGINDICATORBAR_PATCH N/A - -/* Alternative patch to the activetagindicatorbar patch, adds the bar below the tag - * icon rather than above. - * Set the tagindicatortype variable in config.h to INDICATOR_BOTTOM_BAR to enable this. - */ -#define BAR_ACTIVETAGINDICATORBAR_ALT1_PATCH N/A - -/* The alpha patch adds transparency for the status bar. - * You need to uncomment the corresponding line in config.mk to use the -lXrender library - * when including this patch. - * https://dwm.suckless.org/patches/alpha/ - */ -#define BAR_ALPHA_PATCH 0 - -/* This patch introduces alternative tags which can be switched on the fly for the - * sole purpose of providing visual aid. - * https://dwm.suckless.org/patches/alternativetags/ - */ -#define BAR_ALTERNATIVE_TAGS_PATCH 0 - -/* This patches provides the ability to use alternative text for tags which contain at - * least one window. - * https://dwm.suckless.org/patches/alttagsdecoration/ - */ -#define BAR_ALTTAGSDECORATION_PATCH 0 - -/* This patch enables dwm to manage external status bars such as lemonbar and polybar. - * dwm treats the external bar as it would its own, so all regular dwm commands such as - * togglebar affect the external bar in the same way. - * - * NB: Unless you want both anybar + dwm bar(s) then the recommendation is to disable all - * bar modules and have { 0 } in the barrules. - * - * https://dwm.suckless.org/patches/anybar/ - */ -#define BAR_ANYBAR_PATCH 0 - -/* This patch adds a border around the status bar(s) just like the border of client windows. - * https://codemadness.org/paste/dwm-border-bar.patch - */ -#define BAR_BORDER_PATCH 0 - -/* This patch centers the WM_NAME of the currently selected window on the status bar. - * This is compatible with the wintitle, bartabgroups, flexwintitle and awesomebar bar - * modules. - * https://dwm.suckless.org/patches/centeredwindowname/ - */ -#define BAR_CENTEREDWINDOWNAME_PATCH 0 - -/* Draws a dot indicator overlayed on each tag icon for each client. The selected client - * is drawn as a larger horizontal line. - * Set the tagindicatortype variable in config.h to INDICATOR_CLIENT_DOTS to enable this. - * https://dwm.suckless.org/patches/clientindicators/ - */ -#define BAR_CLIENTINDICATOR_PATCH N/A - -/* This patch enables color emoji in dwm by removing a workaround for a BadLength error - * in the Xft library when color glyphs are used. - * To enable this you will need an updated Xft library that can handle color glyphs otherwise - * dwm will crash on encountering such characters. Note that you will also need a font that - * provides color emojis for this to work. - */ -#define BAR_COLOR_EMOJI_PATCH 0 - -/* Updates the position of dmenu to match that of the bar. I.e. if topbar is 0 then dmenu - * will appear at the bottom and if 1 then dmenu will appear at the top. - * https://dwm.suckless.org/patches/dmenumatchtop - */ -#define BAR_DMENUMATCHTOP_PATCH 0 - -/* Originally this was the extrabar patch, but as the handling of extra bars is now built-in - * only the splitting of the status by a designated separator remains. As such this has been - * renamed to more accurately reflect what it does - creating an extra status. - * https://dwm.suckless.org/patches/extrabar/ - */ -#define BAR_EXTRASTATUS_PATCH 0 - -/* Adds EWMH support for _NET_NUMBER_OF_DESKTOPS, _NET_CURRENT_DESKTOP, _NET_DESKTOP_NAMES - * and _NET_DESKTOP_VIEWPORT, which allows for compatibility with other bars and programs - * that request workspace information. For example polybar's xworkspaces module. - * - * This patch also includes support for adding the _IS_FLOATING property for floating windows - * allowing for compositors to treat floating windows differently to tiled windows. - * - * E.g. this setting makes picom only render shadows for floating windows: - * - * shadow-exclude = [ "! _IS_FLOATING@:32c = 1" ]; - * - * https://github.com/bakkeby/dwm-flexipatch/issues/50 (_IS_FLOATING patch) - * https://dwm.suckless.org/patches/ewmhtags/ - */ -#define BAR_EWMHTAGS_PATCH 0 - -/* Allows the bar height to be explicitly set rather than being derived from font. - * https://dwm.suckless.org/patches/bar_height/ - */ -#define BAR_HEIGHT_PATCH 0 - -/* This patch prevents dwm from drawing tags with no clients (i.e. vacant) on the bar. - * https://dwm.suckless.org/patches/hide_vacant_tags/ - */ -#define BAR_HIDEVACANTTAGS_PATCH 0 - -/* With this patch dwm's built-in status bar is only shown when HOLDKEY is pressed - * and the bar will now overlay the display. - * http://dwm.suckless.org/patches/holdbar/ - */ -#define BAR_HOLDBAR_PATCH 0 - -/* Sometimes dwm crashes when it cannot render some glyphs in window titles (usually emoji). - * This patch is essentially a hack to ignore any errors when drawing text on the status bar. - * https://groups.google.com/forum/m/#!topic/wmii/7bncCahYIww - * https://docs.google.com/viewer?a=v&pid=forums&srcid=MDAwODA2MTg0MDQyMjE0OTgzMzMBMDQ3ODQzODkyMTU3NTAyMTMxNTYBX2RUMVNtOUtDQUFKATAuMQEBdjI&authuser=0 - */ -#define BAR_IGNORE_XFT_ERRORS_WHEN_DRAWING_TEXT_PATCH 0 - -/* This patch adds vertical and horizontal space between the statusbar and the edge of the screen. - * https://dwm.suckless.org/patches/barpadding/ - */ -#define BAR_PADDING_PATCH 0 - -/* This patch adds simple markup for status messages using pango markup. - * This depends on the pango library v1.44 or greater. - * You need to uncomment the corresponding lines in config.mk to use the pango libraries - * when including this patch. - * - * Note that the pango patch does not protect against the BadLength error from Xft - * when color glyphs are used, which means that dwm will crash if color emoji is used. - * - * If you need color emoji then you may want to install this patched library from the AUR: - * https://aur.archlinux.org/packages/libxft-bgra/ - * - * A long term fix for the libXft library is pending approval of this pull request: - * https://gitlab.freedesktop.org/xorg/lib/libxft/-/merge_requests/1 - * - * Also see: - * https://developer.gnome.org/pygtk/stable/pango-markup-language.html - * https://lists.suckless.org/hackers/2004/17285.html - * https://dwm.suckless.org/patches/pango/ - */ -#define BAR_PANGO_PATCH 0 - -/* This patch enables colored text in the status bar. It changes the way colors are defined - * in config.h allowing multiple color combinations for use in the status script. - * This patch is incompatible with and takes precedence over the status2d patch. - * https://dwm.suckless.org/patches/statuscolors/ - */ -#define BAR_STATUSCOLORS_PATCH 0 - -/* This patch adds configuration options for horizontal and vertical padding in the status bar. - * https://dwm.suckless.org/patches/statuspadding/ - */ -#define BAR_STATUSPADDING_PATCH 0 - -/* This patch adds the ability for dwm to read colors from the linux virtual console. - * /sys/module/vt/parameters/default_{red,grn,blu} - * Essentially this way the colors you use in your regular tty is "mirrored" to dwm. - * https://dwm.suckless.org/patches/vtcolors/ - */ -#define BAR_VTCOLORS_PATCH 0 - -/* This patch allows client windows to be hidden. This code was originally part of awesomebar, - * but has been separated out so that other bar modules can take advantage of it. - * Both awesomebar and bartabgroups patches depend on this patch and it will be auto-enabled - * during compile time if it is needed. Note that if using flexipatch-finalizer this must be - * explicitly enabled. - * https://github.com/bakkeby/patches/blob/master/dwm/dwm-barmodules-wintitleactions-6.2.diff - */ -#define BAR_WINTITLEACTIONS_PATCH BAR_AWESOMEBAR_PATCH || BAR_TABGROUPS_PATCH || BAR_FLEXWINTITLE_PATCH - -/*** - * Other patches - */ - -/* This patch allows windows to be resized with its aspect ratio remaining constant. - * https://dwm.suckless.org/patches/aspectresize/ - */ -#define ASPECTRESIZE_PATCH 0 - -/* This patch prevents the focus to drift from the active fullscreen client when - * using focusstack(). - * https://dwm.suckless.org/patches/alwaysfullscreen/ - */ -#define ALWAYSFULLSCREEN_PATCH 0 - -/* This patch adds new clients above the selected client, instead of always - * becoming the new master. This behaviour is known from Xmonad. - * This patch takes precedence over ATTACHASIDE_PATCH. - * https://dwm.suckless.org/patches/attachabove/ - */ -#define ATTACHABOVE_PATCH 0 - -/* This patch adds new clients on top of the stack. - * This patch takes precedence over ATTACHBELOW_PATCH. - * https://dwm.suckless.org/patches/attachaside/ - */ -#define ATTACHASIDE_PATCH 0 - -/* This patch adds new clients below the selected client. - * This patch takes precedence over ATTACHBOTTOM_PATCH. - * https://dwm.suckless.org/patches/attachbelow/ - */ -#define ATTACHBELOW_PATCH 0 - -/* This patch adds new clients at the bottom of the stack. - * https://dwm.suckless.org/patches/attachbottom/ - */ -#define ATTACHBOTTOM_PATCH 0 - -/* This patch will make dwm run "~/.local/share/dwm/autostart_blocking.sh" and - * "~/.local/share/dwm/autostart.sh &" before entering the handler loop. One or - * both of these files can be ommited. Note the path inside .local/share rather - * than the original ~/.dwm folder. - * https://dwm.suckless.org/patches/autostart/ - */ -#define AUTOSTART_PATCH 0 - -/* By default, windows that are not visible when requesting a resize/move will not - * get resized/moved. With this patch, they will. - * https://dwm.suckless.org/patches/autoresize/ - */ -#define AUTORESIZE_PATCH 0 - -/* This patch adds an iscentered rule to automatically center clients on the current monitor. - * This patch takes precedence over centeredwindowname and fancybar patches. - * https://dwm.suckless.org/patches/center/ - */ -#define CENTER_PATCH 0 - -/* A transient window is one that is meant to be short lived and is usually raised by a - * parent window. Such windows are typically dialog boxes and the like. - * It should be noted that in dwm transient windows are not subject to normal client rules - * and they are always floating by default. - * This patch centers transient windows on the screen like the center patch does. Note that - * the 6.2 center patch piggy-backed on the updatewindowtype function to ensure that all - * dialog boxes were centered, transient or not. This function was removed in relation to - * adding wintype as a client rule filter, hence this no longer works out of the box. This - * patch restores previous behaviour with the center patch. - */ -#define CENTER_TRANSIENT_WINDOWS_PATCH 0 - -/* As above, except that the transient window is centered within the position of the parent - * window, rather than at the center of the screen. This takes precedence over the above patch. - */ -#define CENTER_TRANSIENT_WINDOWS_BY_PARENT_PATCH 0 - -/* This patch provides the ability to assign different weights to clients in their - * respective stack in tiled layout. - * https://dwm.suckless.org/patches/cfacts/ - */ -#define CFACTS_PATCH 0 - -/* This patch allows color attributes to be set through the command line. - * https://dwm.suckless.org/patches/cmdcustomize/ - */ -#define CMDCUSTOMIZE_PATCH 0 - -/* This patch tweaks the tagging interface so that you can select multiple tags for tag - * or view by pressing all the right keys as a combo. For example to view tags 1 and 3, - * hold MOD and then press and hold 1 and 3 together. - * https://dwm.suckless.org/patches/combo/ - */ -#define COMBO_PATCH 0 - -/* Allow dwm to execute commands from autostart array in your config.h file. When dwm exits - * then all processes from autostart array will be killed. - * https://dwm.suckless.org/patches/cool_autostart/ - */ -#define COOL_AUTOSTART_PATCH 0 - -/* The cyclelayouts patch lets you cycle through all your layouts. - * https://dwm.suckless.org/patches/cyclelayouts/ - */ -#define CYCLELAYOUTS_PATCH 0 - -/* Make dwm respect _MOTIF_WM_HINTS property, and not draw borders around windows requesting - * for it. Some applications use this property to notify window managers to not draw window - * decorations. - * Not respecting this property leads to issues with applications that draw their own borders, - * like chromium (with "Use system title bar and borders" turned off) or vlc in fullscreen mode. - * https://dwm.suckless.org/patches/decoration_hints/ - */ -#define DECORATION_HINTS_PATCH 0 - -/* Similarly to the dragmfact patch this allows you to click and drag clients to change the - * cfact to adjust the client's size in the stack. This patch depends on the cfacts patch. - */ -#define DRAGCFACT_PATCH 0 - -/* This patch lets you resize the split in the tile layout (i.e. modify mfact) by holding - * the modkey and dragging the mouse. - * This patch can be a bit wonky with other layouts, but generally works. - * https://dwm.suckless.org/patches/dragmfact/ - */ -#define DRAGMFACT_PATCH 0 - -/* Simple dwmc client using a fork of fsignal to communicate with dwm. - * To use this either copy the patch/dwmc shell script to somewhere in your path or - * uncomment the following line in Makefile: - * #cp -f patch/dwmc ${DESTDIR}${PREFIX}/bin - * http://dwm.suckless.org/patches/dwmc/ - */ -#define DWMC_PATCH 0 - -/* This patch allows no tag at all to be selected. The result is that dwm will start with - * no tag selected and when you start a client with no tag rule and no tag selected then - * it will be opened on the first tag. - * https://dwm.suckless.org/patches/emptyview/ - */ -#define EMPTYVIEW_PATCH 0 - -/* This patch allows the user to change size and placement of floating windows using only the - * keyboard. It also allows for temporary vertical and horizontal extension of windows similar - * to other WMs fill command. - * https://dwm.suckless.org/patches/exresize/ - */ -#define EXRESIZE_PATCH 0 - -/* Only allow clients to "fullscreen" into the space currently given to them. - * As an example, this will allow you to view a fullscreen video in your browser on - * one half of the screen, while having the other half available for other tasks. - * This patch takes precedence over the fakefullscreen client patch below. - * https://dwm.suckless.org/patches/fakefullscreen/ - */ -#define FAKEFULLSCREEN_PATCH 0 - -/* Similarly to the fakefullscreen patch this patch only allows clients to "fullscreen" into - * the space currently given to them. - * The "twist" with this patch is that fake fullscreen can be toggled on a per client basis - * rather than applying to all clients globally. - * Also see the selectivefakefullscreen option that adds a rule option to enabled this on client - * startup. - */ -#define FAKEFULLSCREEN_CLIENT_PATCH 0 - -/* This patch adds a float rule allowing the size and position of floating windows to be specified - * It also allows the size and position of floating windows to be controlled similar to the - * exresize, moveresize, and moveplace patches. - * The size and position can be specified using absolute, relative or fixed co-ordinates and - * https://github.com/bakkeby/patches/wiki/floatpos/ - */ -#define FLOATPOS_PATCH 0 - -/* Add-on functionality for the above: make the float positions respect outer (vanity)gaps. */ -#define FLOATPOS_RESPECT_GAPS_PATCH 0 - -/* This patch provides the ability to focus the tag on the immediate left or right of the - * currently focused tag. It also allows to send the focused window either on the left or - * the right tag. - * http://dwm.suckless.org/patches/focusadjacenttag/ - */ -#define FOCUSADJACENTTAG_PATCH 0 - -/* Allows focusing on clients based on direction (up, down, left, right) instead of client order. - * https://github.com/bakkeby/patches/wiki/focusdir/ - */ -#define FOCUSDIR_PATCH 0 - -/* A simple patch that just puts focus back to the master client. - * https://dwm.suckless.org/patches/focusmaster/ - */ -#define FOCUSMASTER_PATCH 0 - -/* Switch focus only by mouse click and not sloppy (focus follows mouse pointer). - * https://dwm.suckless.org/patches/focusonclick/ - */ -#define FOCUSONCLICK_PATCH 0 - -/* Selects the next window having the urgent flag regardless of the tag it is on. - * The urgent flag can be artificially set with the following xdotool command on any window: - * xdotool selectwindow -- set_window --urgency 1 - * https://dwm.suckless.org/patches/focusurgent/ - */ -#define FOCUSURGENT_PATCH 0 - -/* By default, dwm responds to _NET_ACTIVE_WINDOW client messages by setting - * the urgency bit on the named window. This patch activates the window instead. - * https://dwm.suckless.org/patches/focusonnetactive/ - */ -#define FOCUSONNETACTIVE_PATCH 0 - -/* Send "fake signals" to dwm for handling, using xsetroot. This will not conflict with the - * status bar, which also is managed using xsetroot. - * Also see the dwmc patch, which takes precedence over this patch. - * https://dwm.suckless.org/patches/fsignal/ - */ -#define FSIGNAL_PATCH 0 - -/* Applies the monocle layout with the focused client on top and hides the bar. When pressed - * again it shows the bar and restores the layout that was active before going fullscreen. - * https://dwm.suckless.org/patches/fullscreen/ - */ -#define FULLSCREEN_PATCH 0 - -/* This patch provides a keybinding to rotate all clients in the currently selected - * area (master or stack) without affecting the other area. - * https://dwm.suckless.org/patches/inplacerotate/ - */ -#define INPLACEROTATE_PATCH 0 - -/* This patch lets you define custom insets from each edge of the screen. One use case would be - * to arrange space for an external bar. - * https://dwm.suckless.org/patches/insets/ - */ -#define INSETS_PATCH 0 - -/* This patch (v1.5.7) implements inter-process communication through a UNIX socket for dwm. This - * allows for the window manager to be queried for information, e.g. listen for events such as tag - * or layout changes, as well as send commands to control the window manager via other programs. - * - * You need to uncomment the corresponding lines in config.mk to use the -lyajl library - * when including this patch. - * This patch depends on the following additional library: - * - yajl - * - * https://github.com/mihirlad55/dwm-ipc - * https://dwm.suckless.org/patches/ipc/ - */ -#define IPC_PATCH 0 - -/* Adds rule option for clients to avoid accidental termination by killclient for sticky windows. - * https://dwm.suckless.org/patches/ispermanent/ - */ -#define ISPERMANENT_PATCH 0 - -/* This patch adds key modes (like in vim or emacs) where chains of keyboard shortcuts - * can be performed. - * https://dwm.suckless.org/patches/keymodes/ - */ -#define KEYMODES_PATCH 0 - -/* This patch adds a keybinding to kills all visible clients that are not selected. - * https://dwm.suckless.org/patches/killunsel/ - */ -#define KILLUNSEL_PATCH 0 - -/* By default in dwm it is possible to make an application fullscreen, then use - * the focusstack keybindings to focus on other windows beneath the current window. - * It is also possible to spawn new windows (e.g. a terminal) that end up getting - * focus while the previous window remains in fullscreen. This patch ensures that - * in such scenarios the previous window loses fullscreen. - * https://github.com/bakkeby/patches/blob/master/dwm/dwm-losefullscreen-6.2.diff - */ -#define LOSEFULLSCREEN_PATCH 0 - -/* This patch adds helper functions for maximizing, horizontally and vertically, floating - * windows using keybindings. - * https://dwm.suckless.org/patches/maximize/ - */ -#define MAXIMIZE_PATCH 0 - -/* Control Music Player Daemon via keybinds. - * You need to uncomment the corresponding line in config.mk to use the -lmpdclient library - * when including this patch. - * This patch depends on the following additional library: - * - libmpdclient - * https://dwm.suckless.org/patches/mpdcontrol/ - */ -#define MPDCONTROL_PATCH 0 - -/* Adds rules per monitor, e.g. have default layouts per monitor. - * The use case for this is if the second monitor is vertical (i.e. rotated) then - * you may want to use a different default layout for this monitor than what is - * used for the main monitor. E.g. normal vertical split for main monitor and - * horizontal split for the second. - */ -#define MONITOR_RULES_PATCH 0 - -/* Always display the the monocle-symbol as defined in config.h if the monocle-layout - * is activated. Do not display the number of open clients in the current tag. - * https://dwm.suckless.org/patches/monoclesymbol/ - */ -#define MONOCLESYMBOL_PATCH 0 - -/* Makes a window floating and 1/3rd the height and 1/3rd the width of the screen and is - * positioned in either the center or one of the 8 cardinal directions depending on which - * key is pressed. - * https://dwm.suckless.org/patches/moveplace/ - */ -#define MOVEPLACE_PATCH 0 - -/* This patch allows you to move and resize dwm's clients using keyboard bindings. - * https://dwm.suckless.org/patches/moveresize/ - */ -#define MOVERESIZE_PATCH 0 - -/* This patch allows you to move clients around in the stack and swap them with the master. - * https://dwm.suckless.org/patches/movestack/ - */ -#define MOVESTACK_PATCH 0 - -/* Adds support for the _NET_CLIENT_LIST_STACKING atom, needed by certain applications like the - * Zoom video conferencing application. - * https://github.com/bakkeby/patches/wiki/netclientliststacking/ - */ -#define NET_CLIENT_LIST_STACKING_PATCH 0 - -/* Removes the border when there is only one window visible. - * https://dwm.suckless.org/patches/noborder/ - */ -#define NOBORDER_PATCH 0 - -/* Enable modifying or removing dmenu in config.def.h which resulted previously in a - * compilation error because two lines of code hardcode dmenu into dwm. - * https://dwm.suckless.org/patches/nodmenu/ - */ -#define NODMENU_PATCH 0 - -/* This patch allows for toggleable client button bindings that have no modifiers. - * This can, for example, allow you to move or resize using the mouse alone without holding - * down a modifier key. This can be practical if you have extra buttons on your mouse. - * While you can use button bindings with no modifiers without this patch in a bare dwm, - * those buttons are then unavailable for use within the application itself so being able to - * toggle these on and off can be necessary in certain situations (e.g. being able to use - * back and forward buttons in a browser). - - * Example bindings: - * { ClkClientWin, 0, Button8, movemouse, {0} }, - * { ClkClientWin, 0, Button9, resizemouse, {0} }, - */ -#define NO_MOD_BUTTONS_PATCH 0 - -/* When terminals have transparency then their borders also become transparent. - * This patch ensures that borders have no transparency. Note that this patch is - * only relevant if you are not using the alpha patch. - * https://github.com/szatanjl/dwm/commit/1529909466206016f2101457bbf37c67195714c8 - * https://dwm.suckless.org/patches/alpha/dwm-fixborders-6.2.diff - */ -#define NO_TRANSPARENT_BORDERS_PATCH 0 - -/* Port of InstantVM's on_empty_keys functionality allowing keybindings that apply only when - * a tag is empty. An example use case is being able to launch applications with first hand - * keys like "f" to launch firefox. - * - * https://github.com/instantOS/instantWM/ - * https://github.com/bakkeby/dwm-flexipatch/issues/51 - */ -#define ON_EMPTY_KEYS_PATCH 0 - -/* Minor patch that prevents more than one rule being matched for a given client. */ -#define ONLY_ONE_RULE_MATCH_PATCH 0 - -/* This patch makes it so dwm will only exit via quit() if no windows are open. - * This is to prevent you accidentally losing all your work. - * https://dwm.suckless.org/patches/onlyquitonempty/ - */ -#define ONLYQUITONEMPTY_PATCH 0 - -/* The pertag patch adds nmaster, mfacts and layouts per tag rather than per - * monitor (default). - * https://dwm.suckless.org/patches/pertag/ - */ -#define PERTAG_PATCH 0 - -/* This controls whether or not to also store bar position on a per - * tag basis, or leave it as one bar per monitor. - */ -#define PERTAGBAR_PATCH 0 - -/* This patch lets you change the position of a client in the stack using the mouse. - * https://github.com/bakkeby/patches/wiki/placemouse - */ -#define PLACEMOUSE_PATCH 0 - -/* This patch provides a way to move clients up and down inside the client list. - * https://dwm.suckless.org/patches/push/ - */ -#define PUSH_PATCH 0 - -/* This patch provides a way to move clients up and down inside the client list, - * but does not push up or down into the master area (except that it does not take - * nmaster into account). - * This takes precedence over the push patch above. - * https://dwm.suckless.org/patches/push/ - */ -#define PUSH_NO_MASTER_PATCH 0 - -/* Shifts all clients per tag to leftmost unoccupied tags. - * - * For example, if clients A, B, C are tagged on tags 1, 5, 9 respectively, when - * this function is called, they will now be on 1, 2, and 3. The focused client - * will also remain focused. - * - * Clients on multiple tags will be treated as if they only were only on their - * leftmost tag, and will be reduced to one tag after the operation is complete. - * https://dwm.suckless.org/patches/reorganizetags/ - */ -#define REORGANIZETAGS_PATCH 0 - -/* By default, windows only resize from the bottom right corner. With this - * patch the mouse is warped to the nearest corner and you resize from there. - * https://dwm.suckless.org/patches/resizecorners/ - */ -#define RESIZECORNERS_PATCH 0 - -/* Practically the same as resizecorners, but the cursor does not warp to corners. - * This takes precedence over the resizecorners patch. - * https://github.com/bakkeby/patches/blob/master/dwm/dwm-resizepoint-6.2.diff - */ -#define RESIZEPOINT_PATCH 0 - -/* Adds a keyboard shortcut to restart dwm or alternatively by using kill -HUP dwmpid. - * Additionally dwm can quit cleanly by using kill -TERM dwmpid. - * https://dwm.suckless.org/patches/restartsig/ - */ -#define RESTARTSIG_PATCH 0 - -/* Adds rio-like drawing to resize the selected client. - * This depends on an external tool slop being installed. - * This patch was backported from instantWM. - * https://github.com/bakkeby/patches/blob/master/dwm/dwm-riodraw-6.2.diff - */ -#define RIODRAW_PATCH 0 - -/* This patch let's you rotate through the stack using keyboard shortcuts. - * https://dwm.suckless.org/patches/rotatestack/ - */ -#define ROTATESTACK_PATCH 0 - -/* This patch adds rounded corners to client windows in dwm. - * You need to uncomment the corresponding line in config.mk to use the -lXext library - * when including this patch. You will also want to set "borderpx = 0;" in your config.h. - * https://github.com/mitchweaver/suckless/blob/master/dwm/patches_mitch/mitch-06-rounded_corners-db6093f6ec1bb884f7540f2512935b5254750b30.patch - */ -#define ROUNDED_CORNERS_PATCH 0 - -/* This patch saves size and position of every floating window before it is forced - * into tiled mode. If the window is made floating again then the old dimensions - * will be restored. - * https://dwm.suckless.org/patches/save_floats/ - */ -#define SAVEFLOATS_PATCH 0 - -/* The scratchpad patch allows you to spawn or restore floating terminal windows. - * It is typically useful when one need to do some short typing. - * - * Note that this patch changes TAGMASK to make room for special scratchpad tags, - * so ~0 does more than select all tags with this patch. Code that relies on ~0 to - * represent all tags should use ~SPTAGMASK instead. - * - * Upgraded to Christian Tenllado's multiple scratchpad version. - * https://lists.suckless.org/hackers/2004/17205.html - * https://dwm.suckless.org/patches/scratchpads/ - */ -#define SCRATCHPADS_PATCH 0 - -/* Minor alteration of the above allowing clients to keep their size and position when shown */ -#define SCRATCHPADS_KEEP_POSITION_AND_SIZE_PATCH 0 - -/* This alternative patch enables a scratchpad feature in dwm similar to the scratchpad - * feature in i3wm. - * https://github.com/GasparVardanyan/dwm-scratchpad - */ -#define SCRATCHPAD_ALT_1_PATCH 0 - -/* As opposed to the original patch this only adds a rule option allowing fake fullscreen - * to be enabled for applications when they start. This is intended to be used in combination - * with the fakefullscreenclient patch and offers no practical functionality without it. - * https://dwm.suckless.org/patches/selectivefakefullscreen/ - */ -#define SELECTIVEFAKEFULLSCREEN_PATCH 0 - -/* Allows restarting dwm without the dependency of an external script. - * https://dwm.suckless.org/patches/selfrestart/ - */ -#define SELFRESTART_PATCH 0 - -/* This patch allow clients to keep focus when being sent to another monitor. - * https://github.com/bakkeby/patches/blob/master/dwm/dwm-sendmon_keepfocus-6.2.diff - */ -#define SENDMON_KEEPFOCUS_PATCH 0 - -/* This patch allows border pixels to be changed during runtime. - * https://dwm.suckless.org/patches/setborderpx/ - */ -#define SETBORDERPX_PATCH 0 - -/* This patch adds keybindings for left and right circular shift through tags. - * https://github.com/chau-bao-long/dotfiles/blob/master/suckless/dwm/shiftview.diff - */ -#define SHIFTVIEW_PATCH 0 - -/* This variant of the shiftview patch adds left and right circular shift through tags, - * but skips tags where there are no clients. - */ -#define SHIFTVIEW_CLIENTS_PATCH 0 - -/* This patch makes dwm obey even "soft" sizehints for new clients. Any window - * that requests a specific initial size will be floated and set to that size. - * Unlike with "fixed size" windows, you are able to resize and/or unfloat these - * windows freely - only the initial state is affected. - * This version of the patch is honestly of limited utility since there are many - * clients that will abuse it. - * https://dwm.suckless.org/patches/sizehints/ - */ -#define SIZEHINTS_PATCH 0 - -/* This patch makes dwm obey even "soft" sizehints for new clients. This ruled - * version is essentially the same patch except it obeys the "isfloating" rule - * if it is available in config.h for the given client. - * https://dwm.suckless.org/patches/sizehints/ - */ -#define SIZEHINTS_RULED_PATCH 0 - -/* In a multi-head setup monitor 0 is by default the primary screen, with the left and right - * screen being monitor 1 and 2 respectively. This patch sorts screens left to right (or - * top to bottom in a vertical layout) which aims to address some inconsistencies when it - * comes to focusmon, tagmon and similar functionality. - * https://www.mail-archive.com/hackers@suckless.org/msg09400.html - */ -#define SORTSCREENS_PATCH 0 - -/* Spawns programs from currently focused client's working directory. - * https://dwm.suckless.org/patches/spawn_cwd/ - */ -#define SPAWNCMD_PATCH 0 - -/* This patch provides comprehensive utilities for managing the client stack, providing - * keyboard shortcuts for focusing or placing a client at specific positions in the stack. - * Note that the default keybindings for this patch have been changed in dwm-flexipatch - * due to the many conflicts with other patches. As it provides similar functionality to the - * swapfocus patch it also uses the MOD+s shortcut to focus the previously selected client, - * thus note a conflict between these two patches. - * https://dwm.suckless.org/patches/stacker/ - */ -#define STACKER_PATCH 0 - -/* Steam, and steam windows (games), trigger a ConfigureNotify request every time the window - * gets focus. More so, the configure event passed along from Steam tends to have the wrong - * x and y co-ordinates which can make the window, if floating, jump around the screen. - * - * This patch works around this age-old issue by ignoring the x and y co-ordinates for - * ConfigureNotify requests relating to Steam windows. - * - * https://github.com/bakkeby/patches/wiki/steam - */ -#define STEAM_PATCH 0 - -/* Adds toggleable keyboard shortcut to make a client 'sticky', i.e. visible on all tags. - * https://dwm.suckless.org/patches/sticky/ - */ -#define STICKY_PATCH 0 - -/* This patch adds "window swallowing" to dwm as known from Plan 9's windowing system rio. - * Clients marked with isterminal in config.h swallow a window opened by any child process, - * e.g. running xclock in a terminal. Closing the xclock window restores the terminal window - * in the current position. - * - * This patch depends on the following additional libraries: - * - libxcb - * - Xlib-libxcb - * - xcb-res - * - * You need to uncomment the corresponding line in config.mk to use the above libraries when - * including this patch. - * - * https://dwm.suckless.org/patches/swallow/ - */ -#define SWALLOW_PATCH 0 - -/* This patch depends on the pertag patch and makes it possible to switch focus with a single - * shortcut (MOD+s) instead of having to think if you should use mod-j or mod-k for reaching - * the previously used window. - * https://dwm.suckless.org/patches/swapfocus/ - */ -#define SWAPFOCUS_PATCH 0 - -/* This patch allows swapping the contents of the currently selected tag with another tag using - * keyboard shortcuts. - * https://dwm.suckless.org/patches/swaptags/ - */ -#define SWAPTAGS_PATCH 0 - -/* Switch focus between the master and stack columns using a single keybinding. - * https://dwm.suckless.org/patches/switchcol/ - */ -#define SWITCHCOL_PATCH 0 - -/* By default dwm allow you to set application specific rules so that you can have your browser, - * for example, start up on tag 9 optionally on a given monitor when you open your browser it is - * then automatically moved to the configured tag, but you have to manually enable the tag to see - * the newly opened application. - * This patch adds an extra configuration option for individual rules where: - * 0 is default behaviour - * 1 automatically moves you to the tag of the newly opened application and - * 2 enables the tag of the newly opened application in addition to your existing enabled tags - * 3 as 1, but closing that window reverts the view back to what it was previously (*) - * 4 as 2, but closing that window reverts the view back to what it was previously (*) - * - * (*) except if the client has been moved between tags or to another monitor - * - * https://github.com/bakkeby/patches/blob/master/dwm/dwm-switchtag-6.2.diff - * Also see https://dwm.suckless.org/patches/switchtotag - */ -#define SWITCHTAG_PATCH 0 - -/* Adds keyboard shortcuts to move all (or only floating) windows from one tag to another. - * https://dwm.suckless.org/patches/tagall/ - */ -#define TAGALL_PATCH 0 - -/* This patch allows you to move all visible windows on a monitor to an adjacent monitor. - * https://github.com/bakkeby/patches/blob/master/dwm/dwm-tagallmon-6.2.diff - */ -#define TAGALLMON_PATCH 0 - -/* This patch makes new clients attach into the stack area when you toggle a new tag into - * view. This means your master area will remain unchanged when toggling views. - * The allmaster patch will cause all clients in the master area to be left alone. This patch - * takes precedence over the onemaster tagintostack patch. - * https://dwm.suckless.org/patches/tagintostack/ - */ -#define TAGINTOSTACK_ALLMASTER_PATCH 0 - -/* This patch makes new clients attach into the stack area when you toggle a new tag into - * view. This means your master area will remain unchanged when toggling views. - * The onemaster patch will cause the first client in the master area to be left alone. - * https://dwm.suckless.org/patches/tagintostack/ - */ -#define TAGINTOSTACK_ONEMASTER_PATCH 0 - -/* If you try to send a fullscreen window to an adjacent monitor using tagmon then - * the window is moved behind the scenes, but it remains in fullscreen on the original - * monitor until you exit fullscreen view (at which point it will appear on the adjacent - * monitor). This patch allows a fullscreen window to be moved to an adjacent monitor - * while remaining in fullscreen. - * https://github.com/bakkeby/patches/blob/master/dwm/dwm-tagmonfixfs-6.2.diff - */ -#define TAGMONFIXFS_PATCH 0 - -/* Add functions and keybindings to tag a window to a desired tag on the next (right) - * or previous (left) monitor from the currently selected monitor. - * https://dwm.suckless.org/patches/tagothermonitor/ - */ -#define TAGOTHERMONITOR_PATCH 0 - -/* This patch allows you to swap all visible windows on one monitor with those of an - * adjacent monitor. - * https://github.com/bakkeby/patches/blob/master/dwm/dwm-tagswapmon-6.2.diff - */ -#define TAGSWAPMON_PATCH 0 - -/* This patch allows you to toggle fullscreen on and off using a single shortcut key. - * https://github.com/bakkeby/patches/blob/master/dwm/dwm-togglefullscreen-6.2.diff - */ -#define TOGGLEFULLSCREEN_PATCH 0 - -/* Lets you transfer the currently focused client between the master and stack area - * while increasing or decreasing the master area (nmaster) accordingly. - * https://dwm.suckless.org/patches/transfer/ - */ -#define TRANSFER_PATCH 0 - -/* Lets you transfer all clients between the master and stack area - * while increasing or decreasing the master area (nmaster) accordingly. - * https://dwm.suckless.org/patches/transfer/ - */ -#define TRANSFER_ALL_PATCH 0 - -/* This patch resets isfloating on any visible windows that have it set. - * Optionally also applies a layout. - * https://dwm.suckless.org/patches/unfloatvisible/ - */ -#define UNFLOATVISIBLE_PATCH 0 - -/* This patch adds configurable gaps between windows differentiating between outer, inner, - * horizontal and vertical gaps. - * https://github.com/bakkeby/patches/blob/master/dwm/dwm-vanitygaps-6.2.diff - * https://github.com/bakkeby/patches/blob/master/dwm/dwm-cfacts-vanitygaps-6.2.diff - */ -#define VANITYGAPS_PATCH 0 - -/* This patch adds outer gaps for the monocle layout. - * Most gaps patches tries to avoid gaps on the monocle layout, as it is often used as a - * fullscreen mode, hence this is enabled separately from the main vanitygaps patch. - */ -#define VANITYGAPS_MONOCLE_PATCH 0 - -/* Follow a window to the tag it is being moved to. - * https://dwm.suckless.org/patches/viewontag/ - */ -#define VIEWONTAG_PATCH 0 - -/* By default tags can be changed using MOD+ while MOD+Tab toggles between the current and - * the previous tag. This patch changes this so that if you hit MOD+ for the tag you are - * currently on, then it works the same as MOD+Tab and switches back to the previous tag. - * Idea ref. - * https://www.reddit.com/r/suckless/comments/ik27vd/key_toggle_between_next_and_previous_tag_dwm/ - */ -#define VIEW_SAME_TAG_GIVES_PREVIOUS_TAG_PATCH 0 - -/* This patch warps the mouse cursor to the center of the currently focused window or screen - * when the mouse cursor is (a) on a different screen or (b) on top of a different window. - * https://dwm.suckless.org/patches/warp/ - */ -#define WARP_PATCH 0 - -/* Sometimes a single application opens different windows depending on the task - * at hand and this is often reflected in the WM_WINDOW_ROLE(STRING) x property. - * This patch adds the role field to the rule configuration so that one can - * differentiate between, say, Firefox "browser" vs "Preferences" vs "Manager" - * or Google-chrome "browser" vs "pop-up". - * https://github.com/bakkeby/patches/blob/master/dwm/dwm-windowrolerule-6.2.diff - */ -#define WINDOWROLERULE_PATCH 0 - -/* The winview patch allows switching the view to that of a given client from the all-window - * view (Mod-0) using a keyboard shortcut. - * http://dwm.suckless.org/patches/winview/ - */ -#define WINVIEW_PATCH 0 - -/* Allows dwm to read colors from xrdb (.Xresources) during runtime. Compatible with - * the float border color, awesomebar, urgentborder and titlecolor patches. - * https://dwm.suckless.org/patches/xrdb/ - */ -#define XRDB_PATCH 0 - -/* Simple patch that allows floating windows to be zoomed into the master stack position. - * https://www.reddit.com/r/suckless/comments/ie5fe3/zoomfloating_my_own_simple_original_patch/ - */ -#define ZOOMFLOATING_PATCH 0 - -/* The zoomswap patch allows a master and a stack window to swap places - * rather than every window on the screen changing position. - * https://dwm.suckless.org/patches/zoomswap/ - */ -#define ZOOMSWAP_PATCH 0 - -/** - * Layouts - */ - -/* Bottomstack layout. - * https://dwm.suckless.org/patches/bottomstack/ - */ -#define BSTACK_LAYOUT 0 - -/* Bottomstack horizontal layout. - * https://dwm.suckless.org/patches/bottomstack/ - */ -#define BSTACKHORIZ_LAYOUT 0 - -/* Centered master layout. - * https://dwm.suckless.org/patches/centeredmaster/ - */ -#define CENTEREDMASTER_LAYOUT 0 - -/* Centered floating master layout. - * https://dwm.suckless.org/patches/centeredmaster/ - */ -#define CENTEREDFLOATINGMASTER_LAYOUT 0 - -/* Same as the default tile layout except clients in the master area are arranged in - * columns (i.e. left to right). - * https://dwm.suckless.org/patches/columns/ - */ -#define COLUMNS_LAYOUT 0 - -/* Deck layout. - * https://dwm.suckless.org/patches/deck/ - */ -#define DECK_LAYOUT 0 - -/* Fibonacci dwindle layout. - * https://dwm.suckless.org/patches/fibonacci/ - */ -#define FIBONACCI_DWINDLE_LAYOUT 0 - -/* Fibonacci spiral layout. - * https://dwm.suckless.org/patches/fibonacci/ - */ -#define FIBONACCI_SPIRAL_LAYOUT 0 - -/* Flextile deluxe layout. - * A revamped, more flexible, and over-the-top version of the original flextile layout. - * https://dwm.suckless.org/patches/flextile/ (original) - */ -#define FLEXTILE_DELUXE_LAYOUT 0 - -/* Gappless grid layout. - * https://dwm.suckless.org/patches/gaplessgrid/ - */ -#define GAPPLESSGRID_LAYOUT 0 - -/* Gridmode (grid) layout. - * https://dwm.suckless.org/patches/gridmode/ - */ -#define GRIDMODE_LAYOUT 0 - -/* Horizontal grid (horizgrid) layout. - * https://dwm.suckless.org/patches/horizgrid/ - */ -#define HORIZGRID_LAYOUT 0 - -/* Grid layout where nmaster controls the number of rows. - * https://dwm.suckless.org/patches/nrowgrid/ - */ -#define NROWGRID_LAYOUT 0 - -/* The default tile layout. - * This can be optionally disabled in favour of other layouts. - */ -#define TILE_LAYOUT 1 - -/* Monocle layout (default). - * This can be optionally disabled in favour of other layouts. - */ -#define MONOCLE_LAYOUT 1 diff --git a/suckless/dwm/patches.h b/suckless/dwm/patches.h deleted file mode 100644 index ca329bb5..00000000 --- a/suckless/dwm/patches.h +++ /dev/null @@ -1,1178 +0,0 @@ -/* - * This file contains patch control flags. - * - * In principle you should be able to mix and match any patches - * you may want. In cases where patches are logically incompatible - * one patch may take precedence over the other as noted in the - * relevant descriptions. - * - * Although layouts typically come as patches they are differentiated - * here for grouping purposes. - */ - -/** - * Bar modules - */ - -/* Enhanced taskbar that shows the titles of all visible windows in the status bar - * and allows focus / hiding / unhiding of windows by clicking on the status bar. - * Awesomebar takes precedence over fancybar. - * https://dwm.suckless.org/patches/awesomebar/ - */ -#define BAR_AWESOMEBAR_PATCH 0 - -/* This patch depends on statuscmd patch and adds integration with a (patched) dwmblocks - * instance to give a clickable status bar. - * Patch: https://gist.github.com/danbyl/54f7c1d57fc6507242a95b71c3d8fdea - * dwmblocks: https://github.com/torrinfail/dwmblocks - */ -#define BAR_DWMBLOCKS_PATCH 1 - -/* This patch shows the titles of all visible windows in the status bar - * (as opposed to showing only the selected one). - * Awesomebar takes precedence over fancybar. Fancybar takes precedence over - * the centeredwindowname patch. - * https://dwm.suckless.org/patches/fancybar/ - */ -#define BAR_FANCYBAR_PATCH 0 - -/* Being an evolution of the bartabgroups patch the flexwintitle patch specifically - * taps into the many layout options that flextile-deluxe offers to produce a window - * title section in the bar that is representative of what is shown on screen. - */ -#define BAR_FLEXWINTITLE_PATCH 0 - -/* This patch adds a context menu for layout switching. - * - xmenu needs to be installed. - * - Edit layoutmenu.sh with the installed layouts and with correct indexes. - * - Place layoutmenu.sh in PATH. - * - The text of the menu items is for display only. Name them however you want. - * https://dwm.suckless.org/patches/layoutmenu/ - */ -#define BAR_LAYOUTMENU_PATCH 1 - -/* Show layout symbol in bar */ -#define BAR_LTSYMBOL_PATCH 1 - -/* Adds powerline arrows for the status. - * This uses statuscolors logic for choosing colors for the powerline. As these markers - * are also control characters there is no explicit statuscmd support for this patch. - * - * Powerline separators are defined as: - * |\xXX (creates a hard edge) - * <\xXX (creates a less than arrow) - * /\xXX (creates a diagonal line) - * - * Examples: - * xsetroot -name "$(echo -e '<\x01a<\x02b<\x03c')" - * xsetroot -name "$(echo -e '/\x01d/\x02d/\x03f')" - * - * https://gitlab.com/udiboy1209-suckless/dwm/-/commit/071f5063e8ac4280666828179f92788d893eea40#4b1a539194be7467cefbda22f675a3b7c19ceca7 - * https://dwm.suckless.org/patches/statuscolors/ - */ -#define BAR_POWERLINE_STATUS_PATCH 0 - -/* Adds powerline arrows for the tags. - * https://gitlab.com/udiboy1209-suckless/dwm/-/commit/071f5063e8ac4280666828179f92788d893eea40#4b1a539194be7467cefbda22f675a3b7c19ceca7 - */ -#define BAR_POWERLINE_TAGS_PATCH 0 - -/* Alters the tags powerline to use forward slash instead of arrows */ -#define BAR_POWERLINE_TAGS_SLASH_PATCH 0 - -/* This patch turns the titlebar area into a mfact-respecting tabbar showing each client's title. - * https://dwm.suckless.org/patches/bartabgroups/ - */ -#define BAR_TABGROUPS_PATCH 0 - -/* This patch adds an option to place tags in rows like in many other window managers. - * https://dwm.suckless.org/patches/taggrid/ - */ -#define BAR_TAGGRID_PATCH 0 - -/* Show status in bar */ -#define BAR_STATUS_PATCH 1 - -/* This patch adds a clickable button to the left hand side of the statusbar. - * https://dwm.suckless.org/patches/statusbutton/ - */ -#define BAR_STATUSBUTTON_PATCH 0 - -/* This patch adds the ability to execute shell commands based on the mouse button and position - * when clicking the status bar. Refer to the website for usage. - * https://dwm.suckless.org/patches/statuscmd/ - */ -#define BAR_STATUSCMD_PATCH 1 - -/* Status2d allows colors and rectangle drawing in your dwm status bar. - * This patch is incompatible with the statuscolors patch which takes precedence. - * This patch is incompatible with the extrabar patch. - * https://dwm.suckless.org/patches/status2d/ - */ -#define BAR_STATUS2D_PATCH 1 - -/* Supplementary patch should you want to disable alpha for the status2d section */ -#define BAR_STATUS2D_NO_ALPHA_PATCH 0 - -/* Addition to the status2d patch that allows the use of terminal colors (color0 through color15) - * from xrdb in the status, allowing programs like pywal to change statusbar colors. - * This adds the C and B codes to use terminal foreground and background colors respectively. - * E.g. ^B5^ would use color5 as the background color. - * https://dwm.suckless.org/patches/status2d/ - */ -#define BAR_STATUS2D_XRDB_TERMCOLORS_PATCH 0 - -/* The systray patch adds systray for the status bar. - * https://dwm.suckless.org/patches/systray/ - */ -#define BAR_SYSTRAY_PATCH 1 - -/* Show tag symbols in bar */ -#define BAR_TAGS_PATCH 1 - -/* Show window title in bar */ -#define BAR_WINTITLE_PATCH 0 - -/* Shows window titles in the bar, but only for floating clients. - * This depends on code from the flexwintitle patch. - * Note that the configuration in config.def.h for this is merely an example. If combined - * with the corresponding hidden patch then these two will overlap unless the width of the - * modules are controlled. - */ -#define BAR_WINTITLE_FLOATING_PATCH 0 - -/* Shows window titles in the bar, but only for floating clients. - * This depends on code from the flexwintitle patch. - * Note that the configuration in config.def.h for this is merely an example. If combined - * with the corresponding floating patch then these two will overlap unless the width of the - * modules are controlled. - */ -#define BAR_WINTITLE_HIDDEN_PATCH 0 - -/* Title bar modules such as wintitle (default), fancybar and awesomebar - * do not by default add left and/or right padding as they take up the - * remaining space. These options allow you explicitly add padding should - * you need it. - */ -#define BAR_TITLE_RIGHT_PAD_PATCH 0 -#define BAR_TITLE_LEFT_PAD_PATCH 1 - -/** - * Bar options - */ - -/* This patch changes the rectangle indicating if a tag is used by a client into a bar - * above the tag name for better visibility. - * Set the tagindicatortype variable in config.h to INDICATOR_TOP_BAR to enable this. - * https://dwm.suckless.org/patches/activetagindicatorbar/ - */ -#define BAR_ACTIVETAGINDICATORBAR_PATCH N/A - -/* Alternative patch to the activetagindicatorbar patch, adds the bar below the tag - * icon rather than above. - * Set the tagindicatortype variable in config.h to INDICATOR_BOTTOM_BAR to enable this. - */ -#define BAR_ACTIVETAGINDICATORBAR_ALT1_PATCH N/A - -/* The alpha patch adds transparency for the status bar. - * You need to uncomment the corresponding line in config.mk to use the -lXrender library - * when including this patch. - * https://dwm.suckless.org/patches/alpha/ - */ -#define BAR_ALPHA_PATCH 0 - -/* This patch introduces alternative tags which can be switched on the fly for the - * sole purpose of providing visual aid. - * https://dwm.suckless.org/patches/alternativetags/ - */ -#define BAR_ALTERNATIVE_TAGS_PATCH 0 - -/* This patches provides the ability to use alternative text for tags which contain at - * least one window. - * https://dwm.suckless.org/patches/alttagsdecoration/ - */ -#define BAR_ALTTAGSDECORATION_PATCH 0 - -/* This patch enables dwm to manage external status bars such as lemonbar and polybar. - * dwm treats the external bar as it would its own, so all regular dwm commands such as - * togglebar affect the external bar in the same way. - * - * NB: Unless you want both anybar + dwm bar(s) then the recommendation is to disable all - * bar modules and have { 0 } in the barrules. - * - * https://dwm.suckless.org/patches/anybar/ - */ -#define BAR_ANYBAR_PATCH 0 - -/* This patch adds a border around the status bar(s) just like the border of client windows. - * https://codemadness.org/paste/dwm-border-bar.patch - */ -#define BAR_BORDER_PATCH 0 - -/* This patch centers the WM_NAME of the currently selected window on the status bar. - * This is compatible with the wintitle, bartabgroups, flexwintitle and awesomebar bar - * modules. - * https://dwm.suckless.org/patches/centeredwindowname/ - */ -#define BAR_CENTEREDWINDOWNAME_PATCH 0 - -/* Draws a dot indicator overlayed on each tag icon for each client. The selected client - * is drawn as a larger horizontal line. - * Set the tagindicatortype variable in config.h to INDICATOR_CLIENT_DOTS to enable this. - * https://dwm.suckless.org/patches/clientindicators/ - */ -#define BAR_CLIENTINDICATOR_PATCH N/A - -/* This patch enables color emoji in dwm by removing a workaround for a BadLength error - * in the Xft library when color glyphs are used. - * To enable this you will need an updated Xft library that can handle color glyphs otherwise - * dwm will crash on encountering such characters. Note that you will also need a font that - * provides color emojis for this to work. - */ -#define BAR_COLOR_EMOJI_PATCH 0 - -/* Updates the position of dmenu to match that of the bar. I.e. if topbar is 0 then dmenu - * will appear at the bottom and if 1 then dmenu will appear at the top. - * https://dwm.suckless.org/patches/dmenumatchtop - */ -#define BAR_DMENUMATCHTOP_PATCH 0 - -/* Originally this was the extrabar patch, but as the handling of extra bars is now built-in - * only the splitting of the status by a designated separator remains. As such this has been - * renamed to more accurately reflect what it does - creating an extra status. - * https://dwm.suckless.org/patches/extrabar/ - */ -#define BAR_EXTRASTATUS_PATCH 0 - -/* Adds EWMH support for _NET_NUMBER_OF_DESKTOPS, _NET_CURRENT_DESKTOP, _NET_DESKTOP_NAMES - * and _NET_DESKTOP_VIEWPORT, which allows for compatibility with other bars and programs - * that request workspace information. For example polybar's xworkspaces module. - * - * This patch also includes support for adding the _IS_FLOATING property for floating windows - * allowing for compositors to treat floating windows differently to tiled windows. - * - * E.g. this setting makes picom only render shadows for floating windows: - * - * shadow-exclude = [ "! _IS_FLOATING@:32c = 1" ]; - * - * https://github.com/bakkeby/dwm-flexipatch/issues/50 (_IS_FLOATING patch) - * https://dwm.suckless.org/patches/ewmhtags/ - */ -#define BAR_EWMHTAGS_PATCH 0 - -/* Allows the bar height to be explicitly set rather than being derived from font. - * https://dwm.suckless.org/patches/bar_height/ - */ -#define BAR_HEIGHT_PATCH 1 - -/* This patch prevents dwm from drawing tags with no clients (i.e. vacant) on the bar. - * https://dwm.suckless.org/patches/hide_vacant_tags/ - */ -#define BAR_HIDEVACANTTAGS_PATCH 0 - -/* With this patch dwm's built-in status bar is only shown when HOLDKEY is pressed - * and the bar will now overlay the display. - * http://dwm.suckless.org/patches/holdbar/ - */ -#define BAR_HOLDBAR_PATCH 0 - -/* Sometimes dwm crashes when it cannot render some glyphs in window titles (usually emoji). - * This patch is essentially a hack to ignore any errors when drawing text on the status bar. - * https://groups.google.com/forum/m/#!topic/wmii/7bncCahYIww - * https://docs.google.com/viewer?a=v&pid=forums&srcid=MDAwODA2MTg0MDQyMjE0OTgzMzMBMDQ3ODQzODkyMTU3NTAyMTMxNTYBX2RUMVNtOUtDQUFKATAuMQEBdjI&authuser=0 - */ -#define BAR_IGNORE_XFT_ERRORS_WHEN_DRAWING_TEXT_PATCH 0 - -/* This patch adds vertical and horizontal space between the statusbar and the edge of the screen. - * https://dwm.suckless.org/patches/barpadding/ - */ -#define BAR_PADDING_PATCH 1 - -/* This patch adds simple markup for status messages using pango markup. - * This depends on the pango library v1.44 or greater. - * You need to uncomment the corresponding lines in config.mk to use the pango libraries - * when including this patch. - * - * Note that the pango patch does not protect against the BadLength error from Xft - * when color glyphs are used, which means that dwm will crash if color emoji is used. - * - * If you need color emoji then you may want to install this patched library from the AUR: - * https://aur.archlinux.org/packages/libxft-bgra/ - * - * A long term fix for the libXft library is pending approval of this pull request: - * https://gitlab.freedesktop.org/xorg/lib/libxft/-/merge_requests/1 - * - * Also see: - * https://developer.gnome.org/pygtk/stable/pango-markup-language.html - * https://lists.suckless.org/hackers/2004/17285.html - * https://dwm.suckless.org/patches/pango/ - */ -#define BAR_PANGO_PATCH 0 - -/* This patch enables colored text in the status bar. It changes the way colors are defined - * in config.h allowing multiple color combinations for use in the status script. - * This patch is incompatible with and takes precedence over the status2d patch. - * https://dwm.suckless.org/patches/statuscolors/ - */ -#define BAR_STATUSCOLORS_PATCH 0 - -/* This patch adds configuration options for horizontal and vertical padding in the status bar. - * https://dwm.suckless.org/patches/statuspadding/ - */ -#define BAR_STATUSPADDING_PATCH 0 - -/* This patch adds the ability for dwm to read colors from the linux virtual console. - * /sys/module/vt/parameters/default_{red,grn,blu} - * Essentially this way the colors you use in your regular tty is "mirrored" to dwm. - * https://dwm.suckless.org/patches/vtcolors/ - */ -#define BAR_VTCOLORS_PATCH 0 - -/* This patch allows client windows to be hidden. This code was originally part of awesomebar, - * but has been separated out so that other bar modules can take advantage of it. - * Both awesomebar and bartabgroups patches depend on this patch and it will be auto-enabled - * during compile time if it is needed. Note that if using flexipatch-finalizer this must be - * explicitly enabled. - * https://github.com/bakkeby/patches/blob/master/dwm/dwm-barmodules-wintitleactions-6.2.diff - */ -#define BAR_WINTITLEACTIONS_PATCH BAR_AWESOMEBAR_PATCH || BAR_TABGROUPS_PATCH || BAR_FLEXWINTITLE_PATCH - -/*** - * Other patches - */ - -/* This patch allows windows to be resized with its aspect ratio remaining constant. - * https://dwm.suckless.org/patches/aspectresize/ - */ -#define ASPECTRESIZE_PATCH 0 - -/* This patch prevents the focus to drift from the active fullscreen client when - * using focusstack(). - * https://dwm.suckless.org/patches/alwaysfullscreen/ - */ -#define ALWAYSFULLSCREEN_PATCH 1 - -/* This patch adds new clients above the selected client, instead of always - * becoming the new master. This behaviour is known from Xmonad. - * This patch takes precedence over ATTACHASIDE_PATCH. - * https://dwm.suckless.org/patches/attachabove/ - */ -#define ATTACHABOVE_PATCH 0 - -/* This patch adds new clients on top of the stack. - * This patch takes precedence over ATTACHBELOW_PATCH. - * https://dwm.suckless.org/patches/attachaside/ - */ -#define ATTACHASIDE_PATCH 0 - -/* This patch adds new clients below the selected client. - * This patch takes precedence over ATTACHBOTTOM_PATCH. - * https://dwm.suckless.org/patches/attachbelow/ - */ -#define ATTACHBELOW_PATCH 0 - -/* This patch adds new clients at the bottom of the stack. - * https://dwm.suckless.org/patches/attachbottom/ - */ -#define ATTACHBOTTOM_PATCH 0 - -/* This patch will make dwm run "~/.local/share/dwm/autostart_blocking.sh" and - * "~/.local/share/dwm/autostart.sh &" before entering the handler loop. One or - * both of these files can be ommited. Note the path inside .local/share rather - * than the original ~/.dwm folder. - * https://dwm.suckless.org/patches/autostart/ - */ -#define AUTOSTART_PATCH 1 - -/* By default, windows that are not visible when requesting a resize/move will not - * get resized/moved. With this patch, they will. - * https://dwm.suckless.org/patches/autoresize/ - */ -#define AUTORESIZE_PATCH 0 - -/* This patch adds an iscentered rule to automatically center clients on the current monitor. - * This patch takes precedence over centeredwindowname and fancybar patches. - * https://dwm.suckless.org/patches/center/ - */ -#define CENTER_PATCH 0 - -/* A transient window is one that is meant to be short lived and is usually raised by a - * parent window. Such windows are typically dialog boxes and the like. - * It should be noted that in dwm transient windows are not subject to normal client rules - * and they are always floating by default. - * This patch centers transient windows on the screen like the center patch does. Note that - * the 6.2 center patch piggy-backed on the updatewindowtype function to ensure that all - * dialog boxes were centered, transient or not. This function was removed in relation to - * adding wintype as a client rule filter, hence this no longer works out of the box. This - * patch restores previous behaviour with the center patch. - */ -#define CENTER_TRANSIENT_WINDOWS_PATCH 0 - -/* As above, except that the transient window is centered within the position of the parent - * window, rather than at the center of the screen. This takes precedence over the above patch. - */ -#define CENTER_TRANSIENT_WINDOWS_BY_PARENT_PATCH 0 - -/* This patch provides the ability to assign different weights to clients in their - * respective stack in tiled layout. - * https://dwm.suckless.org/patches/cfacts/ - */ -#define CFACTS_PATCH 0 - -/* This patch allows color attributes to be set through the command line. - * https://dwm.suckless.org/patches/cmdcustomize/ - */ -#define CMDCUSTOMIZE_PATCH 0 - -/* This patch tweaks the tagging interface so that you can select multiple tags for tag - * or view by pressing all the right keys as a combo. For example to view tags 1 and 3, - * hold MOD and then press and hold 1 and 3 together. - * https://dwm.suckless.org/patches/combo/ - */ -#define COMBO_PATCH 1 - -/* Allow dwm to execute commands from autostart array in your config.h file. When dwm exits - * then all processes from autostart array will be killed. - * https://dwm.suckless.org/patches/cool_autostart/ - */ -#define COOL_AUTOSTART_PATCH 0 - -/* The cyclelayouts patch lets you cycle through all your layouts. - * https://dwm.suckless.org/patches/cyclelayouts/ - */ -#define CYCLELAYOUTS_PATCH 1 - -/* Make dwm respect _MOTIF_WM_HINTS property, and not draw borders around windows requesting - * for it. Some applications use this property to notify window managers to not draw window - * decorations. - * Not respecting this property leads to issues with applications that draw their own borders, - * like chromium (with "Use system title bar and borders" turned off) or vlc in fullscreen mode. - * https://dwm.suckless.org/patches/decoration_hints/ - */ -#define DECORATION_HINTS_PATCH 0 - -/* Similarly to the dragmfact patch this allows you to click and drag clients to change the - * cfact to adjust the client's size in the stack. This patch depends on the cfacts patch. - */ -#define DRAGCFACT_PATCH 0 - -/* This patch lets you resize the split in the tile layout (i.e. modify mfact) by holding - * the modkey and dragging the mouse. - * This patch can be a bit wonky with other layouts, but generally works. - * https://dwm.suckless.org/patches/dragmfact/ - */ -#define DRAGMFACT_PATCH 0 - -/* Simple dwmc client using a fork of fsignal to communicate with dwm. - * To use this either copy the patch/dwmc shell script to somewhere in your path or - * uncomment the following line in Makefile: - * #cp -f patch/dwmc ${DESTDIR}${PREFIX}/bin - * http://dwm.suckless.org/patches/dwmc/ - */ -#define DWMC_PATCH 0 - -/* This patch allows no tag at all to be selected. The result is that dwm will start with - * no tag selected and when you start a client with no tag rule and no tag selected then - * it will be opened on the first tag. - * https://dwm.suckless.org/patches/emptyview/ - */ -#define EMPTYVIEW_PATCH 0 - -/* This patch allows the user to change size and placement of floating windows using only the - * keyboard. It also allows for temporary vertical and horizontal extension of windows similar - * to other WMs fill command. - * https://dwm.suckless.org/patches/exresize/ - */ -#define EXRESIZE_PATCH 0 - -/* Only allow clients to "fullscreen" into the space currently given to them. - * As an example, this will allow you to view a fullscreen video in your browser on - * one half of the screen, while having the other half available for other tasks. - * This patch takes precedence over the fakefullscreen client patch below. - * https://dwm.suckless.org/patches/fakefullscreen/ - */ -#define FAKEFULLSCREEN_PATCH 0 - -/* Similarly to the fakefullscreen patch this patch only allows clients to "fullscreen" into - * the space currently given to them. - * The "twist" with this patch is that fake fullscreen can be toggled on a per client basis - * rather than applying to all clients globally. - * Also see the selectivefakefullscreen option that adds a rule option to enabled this on client - * startup. - */ -#define FAKEFULLSCREEN_CLIENT_PATCH 0 - -/* This patch adds a float rule allowing the size and position of floating windows to be specified - * It also allows the size and position of floating windows to be controlled similar to the - * exresize, moveresize, and moveplace patches. - * The size and position can be specified using absolute, relative or fixed co-ordinates and - * https://github.com/bakkeby/patches/wiki/floatpos/ - */ -#define FLOATPOS_PATCH 1 - -/* Add-on functionality for the above: make the float positions respect outer (vanity)gaps. */ -#define FLOATPOS_RESPECT_GAPS_PATCH 1 - -/* This patch provides the ability to focus the tag on the immediate left or right of the - * currently focused tag. It also allows to send the focused window either on the left or - * the right tag. - * http://dwm.suckless.org/patches/focusadjacenttag/ - */ -#define FOCUSADJACENTTAG_PATCH 0 - -/* Allows focusing on clients based on direction (up, down, left, right) instead of client order. - * https://github.com/bakkeby/patches/wiki/focusdir/ - */ -#define FOCUSDIR_PATCH 0 - -/* A simple patch that just puts focus back to the master client. - * https://dwm.suckless.org/patches/focusmaster/ - */ -#define FOCUSMASTER_PATCH 0 - -/* Switch focus only by mouse click and not sloppy (focus follows mouse pointer). - * https://dwm.suckless.org/patches/focusonclick/ - */ -#define FOCUSONCLICK_PATCH 0 - -/* Selects the next window having the urgent flag regardless of the tag it is on. - * The urgent flag can be artificially set with the following xdotool command on any window: - * xdotool selectwindow -- set_window --urgency 1 - * https://dwm.suckless.org/patches/focusurgent/ - */ -#define FOCUSURGENT_PATCH 0 - -/* By default, dwm responds to _NET_ACTIVE_WINDOW client messages by setting - * the urgency bit on the named window. This patch activates the window instead. - * https://dwm.suckless.org/patches/focusonnetactive/ - */ -#define FOCUSONNETACTIVE_PATCH 0 - -/* Send "fake signals" to dwm for handling, using xsetroot. This will not conflict with the - * status bar, which also is managed using xsetroot. - * Also see the dwmc patch, which takes precedence over this patch. - * https://dwm.suckless.org/patches/fsignal/ - */ -#define FSIGNAL_PATCH 0 - -/* Applies the monocle layout with the focused client on top and hides the bar. When pressed - * again it shows the bar and restores the layout that was active before going fullscreen. - * https://dwm.suckless.org/patches/fullscreen/ - */ -#define FULLSCREEN_PATCH 1 - -/* This patch provides a keybinding to rotate all clients in the currently selected - * area (master or stack) without affecting the other area. - * https://dwm.suckless.org/patches/inplacerotate/ - */ -#define INPLACEROTATE_PATCH 0 - -/* This patch lets you define custom insets from each edge of the screen. One use case would be - * to arrange space for an external bar. - * https://dwm.suckless.org/patches/insets/ - */ -#define INSETS_PATCH 0 - -/* This patch (v1.5.7) implements inter-process communication through a UNIX socket for dwm. This - * allows for the window manager to be queried for information, e.g. listen for events such as tag - * or layout changes, as well as send commands to control the window manager via other programs. - * - * You need to uncomment the corresponding lines in config.mk to use the -lyajl library - * when including this patch. - * This patch depends on the following additional library: - * - yajl - * - * https://github.com/mihirlad55/dwm-ipc - * https://dwm.suckless.org/patches/ipc/ - */ -#define IPC_PATCH 0 - -/* Adds rule option for clients to avoid accidental termination by killclient for sticky windows. - * https://dwm.suckless.org/patches/ispermanent/ - */ -#define ISPERMANENT_PATCH 0 - -/* This patch adds key modes (like in vim or emacs) where chains of keyboard shortcuts - * can be performed. - * https://dwm.suckless.org/patches/keymodes/ - */ -#define KEYMODES_PATCH 0 - -/* This patch adds a keybinding to kills all visible clients that are not selected. - * https://dwm.suckless.org/patches/killunsel/ - */ -#define KILLUNSEL_PATCH 0 - -/* By default in dwm it is possible to make an application fullscreen, then use - * the focusstack keybindings to focus on other windows beneath the current window. - * It is also possible to spawn new windows (e.g. a terminal) that end up getting - * focus while the previous window remains in fullscreen. This patch ensures that - * in such scenarios the previous window loses fullscreen. - * https://github.com/bakkeby/patches/blob/master/dwm/dwm-losefullscreen-6.2.diff - */ -#define LOSEFULLSCREEN_PATCH 1 - -/* This patch adds helper functions for maximizing, horizontally and vertically, floating - * windows using keybindings. - * https://dwm.suckless.org/patches/maximize/ - */ -#define MAXIMIZE_PATCH 0 - -/* Control Music Player Daemon via keybinds. - * You need to uncomment the corresponding line in config.mk to use the -lmpdclient library - * when including this patch. - * This patch depends on the following additional library: - * - libmpdclient - * https://dwm.suckless.org/patches/mpdcontrol/ - */ -#define MPDCONTROL_PATCH 0 - -/* Adds rules per monitor, e.g. have default layouts per monitor. - * The use case for this is if the second monitor is vertical (i.e. rotated) then - * you may want to use a different default layout for this monitor than what is - * used for the main monitor. E.g. normal vertical split for main monitor and - * horizontal split for the second. - */ -#define MONITOR_RULES_PATCH 0 - -/* Always display the the monocle-symbol as defined in config.h if the monocle-layout - * is activated. Do not display the number of open clients in the current tag. - * https://dwm.suckless.org/patches/monoclesymbol/ - */ -#define MONOCLESYMBOL_PATCH 0 - -/* Makes a window floating and 1/3rd the height and 1/3rd the width of the screen and is - * positioned in either the center or one of the 8 cardinal directions depending on which - * key is pressed. - * https://dwm.suckless.org/patches/moveplace/ - */ -#define MOVEPLACE_PATCH 0 - -/* This patch allows you to move and resize dwm's clients using keyboard bindings. - * https://dwm.suckless.org/patches/moveresize/ - */ -#define MOVERESIZE_PATCH 0 - -/* This patch allows you to move clients around in the stack and swap them with the master. - * https://dwm.suckless.org/patches/movestack/ - */ -#define MOVESTACK_PATCH 1 - -/* Adds support for the _NET_CLIENT_LIST_STACKING atom, needed by certain applications like the - * Zoom video conferencing application. - * https://github.com/bakkeby/patches/wiki/netclientliststacking/ - */ -#define NET_CLIENT_LIST_STACKING_PATCH 0 - -/* Removes the border when there is only one window visible. - * https://dwm.suckless.org/patches/noborder/ - */ -#define NOBORDER_PATCH 0 - -/* Enable modifying or removing dmenu in config.def.h which resulted previously in a - * compilation error because two lines of code hardcode dmenu into dwm. - * https://dwm.suckless.org/patches/nodmenu/ - */ -#define NODMENU_PATCH 0 - -/* This patch allows for toggleable client button bindings that have no modifiers. - * This can, for example, allow you to move or resize using the mouse alone without holding - * down a modifier key. This can be practical if you have extra buttons on your mouse. - * While you can use button bindings with no modifiers without this patch in a bare dwm, - * those buttons are then unavailable for use within the application itself so being able to - * toggle these on and off can be necessary in certain situations (e.g. being able to use - * back and forward buttons in a browser). - - * Example bindings: - * { ClkClientWin, 0, Button8, movemouse, {0} }, - * { ClkClientWin, 0, Button9, resizemouse, {0} }, - */ -#define NO_MOD_BUTTONS_PATCH 0 - -/* When terminals have transparency then their borders also become transparent. - * This patch ensures that borders have no transparency. Note that this patch is - * only relevant if you are not using the alpha patch. - * https://github.com/szatanjl/dwm/commit/1529909466206016f2101457bbf37c67195714c8 - * https://dwm.suckless.org/patches/alpha/dwm-fixborders-6.2.diff - */ -#define NO_TRANSPARENT_BORDERS_PATCH 1 - -/* Port of InstantVM's on_empty_keys functionality allowing keybindings that apply only when - * a tag is empty. An example use case is being able to launch applications with first hand - * keys like "f" to launch firefox. - * - * https://github.com/instantOS/instantWM/ - * https://github.com/bakkeby/dwm-flexipatch/issues/51 - */ -#define ON_EMPTY_KEYS_PATCH 0 - -/* Minor patch that prevents more than one rule being matched for a given client. */ -#define ONLY_ONE_RULE_MATCH_PATCH 0 - -/* This patch makes it so dwm will only exit via quit() if no windows are open. - * This is to prevent you accidentally losing all your work. - * https://dwm.suckless.org/patches/onlyquitonempty/ - */ -#define ONLYQUITONEMPTY_PATCH 0 - -/* The pertag patch adds nmaster, mfacts and layouts per tag rather than per - * monitor (default). - * https://dwm.suckless.org/patches/pertag/ - */ -#define PERTAG_PATCH 1 - -/* This controls whether or not to also store bar position on a per - * tag basis, or leave it as one bar per monitor. - */ -#define PERTAGBAR_PATCH 0 - -/* This patch lets you change the position of a client in the stack using the mouse. - * https://github.com/bakkeby/patches/wiki/placemouse - */ -#define PLACEMOUSE_PATCH 0 - -/* This patch provides a way to move clients up and down inside the client list. - * https://dwm.suckless.org/patches/push/ - */ -#define PUSH_PATCH 0 - -/* This patch provides a way to move clients up and down inside the client list, - * but does not push up or down into the master area (except that it does not take - * nmaster into account). - * This takes precedence over the push patch above. - * https://dwm.suckless.org/patches/push/ - */ -#define PUSH_NO_MASTER_PATCH 0 - -/* Shifts all clients per tag to leftmost unoccupied tags. - * - * For example, if clients A, B, C are tagged on tags 1, 5, 9 respectively, when - * this function is called, they will now be on 1, 2, and 3. The focused client - * will also remain focused. - * - * Clients on multiple tags will be treated as if they only were only on their - * leftmost tag, and will be reduced to one tag after the operation is complete. - * https://dwm.suckless.org/patches/reorganizetags/ - */ -#define REORGANIZETAGS_PATCH 0 - -/* By default, windows only resize from the bottom right corner. With this - * patch the mouse is warped to the nearest corner and you resize from there. - * https://dwm.suckless.org/patches/resizecorners/ - */ -#define RESIZECORNERS_PATCH 0 - -/* Practically the same as resizecorners, but the cursor does not warp to corners. - * This takes precedence over the resizecorners patch. - * https://github.com/bakkeby/patches/blob/master/dwm/dwm-resizepoint-6.2.diff - */ -#define RESIZEPOINT_PATCH 0 - -/* Adds a keyboard shortcut to restart dwm or alternatively by using kill -HUP dwmpid. - * Additionally dwm can quit cleanly by using kill -TERM dwmpid. - * https://dwm.suckless.org/patches/restartsig/ - */ -#define RESTARTSIG_PATCH 0 - -/* Adds rio-like drawing to resize the selected client. - * This depends on an external tool slop being installed. - * This patch was backported from instantWM. - * https://github.com/bakkeby/patches/blob/master/dwm/dwm-riodraw-6.2.diff - */ -#define RIODRAW_PATCH 0 - -/* This patch let's you rotate through the stack using keyboard shortcuts. - * https://dwm.suckless.org/patches/rotatestack/ - */ -#define ROTATESTACK_PATCH 0 - -/* This patch adds rounded corners to client windows in dwm. - * You need to uncomment the corresponding line in config.mk to use the -lXext library - * when including this patch. You will also want to set "borderpx = 0;" in your config.h. - * https://github.com/mitchweaver/suckless/blob/master/dwm/patches_mitch/mitch-06-rounded_corners-db6093f6ec1bb884f7540f2512935b5254750b30.patch - */ -#define ROUNDED_CORNERS_PATCH 0 - -/* This patch saves size and position of every floating window before it is forced - * into tiled mode. If the window is made floating again then the old dimensions - * will be restored. - * https://dwm.suckless.org/patches/save_floats/ - */ -#define SAVEFLOATS_PATCH 1 - -/* The scratchpad patch allows you to spawn or restore floating terminal windows. - * It is typically useful when one need to do some short typing. - * - * Note that this patch changes TAGMASK to make room for special scratchpad tags, - * so ~0 does more than select all tags with this patch. Code that relies on ~0 to - * represent all tags should use ~SPTAGMASK instead. - * - * Upgraded to Christian Tenllado's multiple scratchpad version. - * https://lists.suckless.org/hackers/2004/17205.html - * https://dwm.suckless.org/patches/scratchpads/ - */ -#define SCRATCHPADS_PATCH 1 - -/* Minor alteration of the above allowing clients to keep their size and position when shown */ -#define SCRATCHPADS_KEEP_POSITION_AND_SIZE_PATCH 0 - -/* This alternative patch enables a scratchpad feature in dwm similar to the scratchpad - * feature in i3wm. - * https://github.com/GasparVardanyan/dwm-scratchpad - */ -#define SCRATCHPAD_ALT_1_PATCH 0 - -/* As opposed to the original patch this only adds a rule option allowing fake fullscreen - * to be enabled for applications when they start. This is intended to be used in combination - * with the fakefullscreenclient patch and offers no practical functionality without it. - * https://dwm.suckless.org/patches/selectivefakefullscreen/ - */ -#define SELECTIVEFAKEFULLSCREEN_PATCH 0 - -/* Allows restarting dwm without the dependency of an external script. - * https://dwm.suckless.org/patches/selfrestart/ - */ -#define SELFRESTART_PATCH 0 - -/* This patch allow clients to keep focus when being sent to another monitor. - * https://github.com/bakkeby/patches/blob/master/dwm/dwm-sendmon_keepfocus-6.2.diff - */ -#define SENDMON_KEEPFOCUS_PATCH 0 - -/* This patch allows border pixels to be changed during runtime. - * https://dwm.suckless.org/patches/setborderpx/ - */ -#define SETBORDERPX_PATCH 0 - -/* This patch adds keybindings for left and right circular shift through tags. - * https://github.com/chau-bao-long/dotfiles/blob/master/suckless/dwm/shiftview.diff - */ -#define SHIFTVIEW_PATCH 1 - -/* This variant of the shiftview patch adds left and right circular shift through tags, - * but skips tags where there are no clients. - */ -#define SHIFTVIEW_CLIENTS_PATCH 0 - -/* This patch makes dwm obey even "soft" sizehints for new clients. Any window - * that requests a specific initial size will be floated and set to that size. - * Unlike with "fixed size" windows, you are able to resize and/or unfloat these - * windows freely - only the initial state is affected. - * This version of the patch is honestly of limited utility since there are many - * clients that will abuse it. - * https://dwm.suckless.org/patches/sizehints/ - */ -#define SIZEHINTS_PATCH 0 - -/* This patch makes dwm obey even "soft" sizehints for new clients. This ruled - * version is essentially the same patch except it obeys the "isfloating" rule - * if it is available in config.h for the given client. - * https://dwm.suckless.org/patches/sizehints/ - */ -#define SIZEHINTS_RULED_PATCH 0 - -/* In a multi-head setup monitor 0 is by default the primary screen, with the left and right - * screen being monitor 1 and 2 respectively. This patch sorts screens left to right (or - * top to bottom in a vertical layout) which aims to address some inconsistencies when it - * comes to focusmon, tagmon and similar functionality. - * https://www.mail-archive.com/hackers@suckless.org/msg09400.html - */ -#define SORTSCREENS_PATCH 0 - -/* Spawns programs from currently focused client's working directory. - * https://dwm.suckless.org/patches/spawn_cwd/ - */ -#define SPAWNCMD_PATCH 0 - -/* This patch provides comprehensive utilities for managing the client stack, providing - * keyboard shortcuts for focusing or placing a client at specific positions in the stack. - * Note that the default keybindings for this patch have been changed in dwm-flexipatch - * due to the many conflicts with other patches. As it provides similar functionality to the - * swapfocus patch it also uses the MOD+s shortcut to focus the previously selected client, - * thus note a conflict between these two patches. - * https://dwm.suckless.org/patches/stacker/ - */ -#define STACKER_PATCH 0 - -/* Steam, and steam windows (games), trigger a ConfigureNotify request every time the window - * gets focus. More so, the configure event passed along from Steam tends to have the wrong - * x and y co-ordinates which can make the window, if floating, jump around the screen. - * - * This patch works around this age-old issue by ignoring the x and y co-ordinates for - * ConfigureNotify requests relating to Steam windows. - * - * https://github.com/bakkeby/patches/wiki/steam - */ -#define STEAM_PATCH 0 - -/* Adds toggleable keyboard shortcut to make a client 'sticky', i.e. visible on all tags. - * https://dwm.suckless.org/patches/sticky/ - */ -#define STICKY_PATCH 0 - -/* This patch adds "window swallowing" to dwm as known from Plan 9's windowing system rio. - * Clients marked with isterminal in config.h swallow a window opened by any child process, - * e.g. running xclock in a terminal. Closing the xclock window restores the terminal window - * in the current position. - * - * This patch depends on the following additional libraries: - * - libxcb - * - Xlib-libxcb - * - xcb-res - * - * You need to uncomment the corresponding line in config.mk to use the above libraries when - * including this patch. - * - * https://dwm.suckless.org/patches/swallow/ - */ -#define SWALLOW_PATCH 0 - -/* This patch depends on the pertag patch and makes it possible to switch focus with a single - * shortcut (MOD+s) instead of having to think if you should use mod-j or mod-k for reaching - * the previously used window. - * https://dwm.suckless.org/patches/swapfocus/ - */ -#define SWAPFOCUS_PATCH 0 - -/* This patch allows swapping the contents of the currently selected tag with another tag using - * keyboard shortcuts. - * https://dwm.suckless.org/patches/swaptags/ - */ -#define SWAPTAGS_PATCH 0 - -/* Switch focus between the master and stack columns using a single keybinding. - * https://dwm.suckless.org/patches/switchcol/ - */ -#define SWITCHCOL_PATCH 1 - -/* By default dwm allow you to set application specific rules so that you can have your browser, - * for example, start up on tag 9 optionally on a given monitor when you open your browser it is - * then automatically moved to the configured tag, but you have to manually enable the tag to see - * the newly opened application. - * This patch adds an extra configuration option for individual rules where: - * 0 is default behaviour - * 1 automatically moves you to the tag of the newly opened application and - * 2 enables the tag of the newly opened application in addition to your existing enabled tags - * 3 as 1, but closing that window reverts the view back to what it was previously (*) - * 4 as 2, but closing that window reverts the view back to what it was previously (*) - * - * (*) except if the client has been moved between tags or to another monitor - * - * https://github.com/bakkeby/patches/blob/master/dwm/dwm-switchtag-6.2.diff - * Also see https://dwm.suckless.org/patches/switchtotag - */ -#define SWITCHTAG_PATCH 0 - -/* Adds keyboard shortcuts to move all (or only floating) windows from one tag to another. - * https://dwm.suckless.org/patches/tagall/ - */ -#define TAGALL_PATCH 0 - -/* This patch allows you to move all visible windows on a monitor to an adjacent monitor. - * https://github.com/bakkeby/patches/blob/master/dwm/dwm-tagallmon-6.2.diff - */ -#define TAGALLMON_PATCH 0 - -/* This patch makes new clients attach into the stack area when you toggle a new tag into - * view. This means your master area will remain unchanged when toggling views. - * The allmaster patch will cause all clients in the master area to be left alone. This patch - * takes precedence over the onemaster tagintostack patch. - * https://dwm.suckless.org/patches/tagintostack/ - */ -#define TAGINTOSTACK_ALLMASTER_PATCH 0 - -/* This patch makes new clients attach into the stack area when you toggle a new tag into - * view. This means your master area will remain unchanged when toggling views. - * The onemaster patch will cause the first client in the master area to be left alone. - * https://dwm.suckless.org/patches/tagintostack/ - */ -#define TAGINTOSTACK_ONEMASTER_PATCH 0 - -/* If you try to send a fullscreen window to an adjacent monitor using tagmon then - * the window is moved behind the scenes, but it remains in fullscreen on the original - * monitor until you exit fullscreen view (at which point it will appear on the adjacent - * monitor). This patch allows a fullscreen window to be moved to an adjacent monitor - * while remaining in fullscreen. - * https://github.com/bakkeby/patches/blob/master/dwm/dwm-tagmonfixfs-6.2.diff - */ -#define TAGMONFIXFS_PATCH 0 - -/* Add functions and keybindings to tag a window to a desired tag on the next (right) - * or previous (left) monitor from the currently selected monitor. - * https://dwm.suckless.org/patches/tagothermonitor/ - */ -#define TAGOTHERMONITOR_PATCH 0 - -/* This patch allows you to swap all visible windows on one monitor with those of an - * adjacent monitor. - * https://github.com/bakkeby/patches/blob/master/dwm/dwm-tagswapmon-6.2.diff - */ -#define TAGSWAPMON_PATCH 0 - -/* This patch allows you to toggle fullscreen on and off using a single shortcut key. - * https://github.com/bakkeby/patches/blob/master/dwm/dwm-togglefullscreen-6.2.diff - */ -#define TOGGLEFULLSCREEN_PATCH 1 - -/* Lets you transfer the currently focused client between the master and stack area - * while increasing or decreasing the master area (nmaster) accordingly. - * https://dwm.suckless.org/patches/transfer/ - */ -#define TRANSFER_PATCH 0 - -/* Lets you transfer all clients between the master and stack area - * while increasing or decreasing the master area (nmaster) accordingly. - * https://dwm.suckless.org/patches/transfer/ - */ -#define TRANSFER_ALL_PATCH 0 - -/* This patch resets isfloating on any visible windows that have it set. - * Optionally also applies a layout. - * https://dwm.suckless.org/patches/unfloatvisible/ - */ -#define UNFLOATVISIBLE_PATCH 0 - -/* This patch adds configurable gaps between windows differentiating between outer, inner, - * horizontal and vertical gaps. - * https://github.com/bakkeby/patches/blob/master/dwm/dwm-vanitygaps-6.2.diff - * https://github.com/bakkeby/patches/blob/master/dwm/dwm-cfacts-vanitygaps-6.2.diff - */ -#define VANITYGAPS_PATCH 1 - -/* This patch adds outer gaps for the monocle layout. - * Most gaps patches tries to avoid gaps on the monocle layout, as it is often used as a - * fullscreen mode, hence this is enabled separately from the main vanitygaps patch. - */ -#define VANITYGAPS_MONOCLE_PATCH 1 - -/* Follow a window to the tag it is being moved to. - * https://dwm.suckless.org/patches/viewontag/ - */ -#define VIEWONTAG_PATCH 0 - -/* By default tags can be changed using MOD+ while MOD+Tab toggles between the current and - * the previous tag. This patch changes this so that if you hit MOD+ for the tag you are - * currently on, then it works the same as MOD+Tab and switches back to the previous tag. - * Idea ref. - * https://www.reddit.com/r/suckless/comments/ik27vd/key_toggle_between_next_and_previous_tag_dwm/ - */ -#define VIEW_SAME_TAG_GIVES_PREVIOUS_TAG_PATCH 0 - -/* This patch warps the mouse cursor to the center of the currently focused window or screen - * when the mouse cursor is (a) on a different screen or (b) on top of a different window. - * https://dwm.suckless.org/patches/warp/ - */ -#define WARP_PATCH 0 - -/* Sometimes a single application opens different windows depending on the task - * at hand and this is often reflected in the WM_WINDOW_ROLE(STRING) x property. - * This patch adds the role field to the rule configuration so that one can - * differentiate between, say, Firefox "browser" vs "Preferences" vs "Manager" - * or Google-chrome "browser" vs "pop-up". - * https://github.com/bakkeby/patches/blob/master/dwm/dwm-windowrolerule-6.2.diff - */ -#define WINDOWROLERULE_PATCH 0 - -/* The winview patch allows switching the view to that of a given client from the all-window - * view (Mod-0) using a keyboard shortcut. - * http://dwm.suckless.org/patches/winview/ - */ -#define WINVIEW_PATCH 1 - -/* Allows dwm to read colors from xrdb (.Xresources) during runtime. Compatible with - * the float border color, awesomebar, urgentborder and titlecolor patches. - * https://dwm.suckless.org/patches/xrdb/ - */ -#define XRDB_PATCH 0 - -/* Simple patch that allows floating windows to be zoomed into the master stack position. - * https://www.reddit.com/r/suckless/comments/ie5fe3/zoomfloating_my_own_simple_original_patch/ - */ -#define ZOOMFLOATING_PATCH 0 - -/* The zoomswap patch allows a master and a stack window to swap places - * rather than every window on the screen changing position. - * https://dwm.suckless.org/patches/zoomswap/ - */ -#define ZOOMSWAP_PATCH 0 - -/** - * Layouts - */ - -/* Bottomstack layout. - * https://dwm.suckless.org/patches/bottomstack/ - */ -#define BSTACK_LAYOUT 0 - -/* Bottomstack horizontal layout. - * https://dwm.suckless.org/patches/bottomstack/ - */ -#define BSTACKHORIZ_LAYOUT 0 - -/* Centered master layout. - * https://dwm.suckless.org/patches/centeredmaster/ - */ -#define CENTEREDMASTER_LAYOUT 1 - -/* Centered floating master layout. - * https://dwm.suckless.org/patches/centeredmaster/ - */ -#define CENTEREDFLOATINGMASTER_LAYOUT 1 - -/* Same as the default tile layout except clients in the master area are arranged in - * columns (i.e. left to right). - * https://dwm.suckless.org/patches/columns/ - */ -#define COLUMNS_LAYOUT 0 - -/* Deck layout. - * https://dwm.suckless.org/patches/deck/ - */ -#define DECK_LAYOUT 1 - -/* Fibonacci dwindle layout. - * https://dwm.suckless.org/patches/fibonacci/ - */ -#define FIBONACCI_DWINDLE_LAYOUT 1 - -/* Fibonacci spiral layout. - * https://dwm.suckless.org/patches/fibonacci/ - */ -#define FIBONACCI_SPIRAL_LAYOUT 1 - -/* Flextile deluxe layout. - * A revamped, more flexible, and over-the-top version of the original flextile layout. - * https://dwm.suckless.org/patches/flextile/ (original) - */ -#define FLEXTILE_DELUXE_LAYOUT 0 - -/* Gappless grid layout. - * https://dwm.suckless.org/patches/gaplessgrid/ - */ -#define GAPPLESSGRID_LAYOUT 0 - -/* Gridmode (grid) layout. - * https://dwm.suckless.org/patches/gridmode/ - */ -#define GRIDMODE_LAYOUT 1 - -/* Horizontal grid (horizgrid) layout. - * https://dwm.suckless.org/patches/horizgrid/ - */ -#define HORIZGRID_LAYOUT 0 - -/* Grid layout where nmaster controls the number of rows. - * https://dwm.suckless.org/patches/nrowgrid/ - */ -#define NROWGRID_LAYOUT 0 - -/* The default tile layout. - * This can be optionally disabled in favour of other layouts. - */ -#define TILE_LAYOUT 1 - -/* Monocle layout (default). - * This can be optionally disabled in favour of other layouts. - */ -#define MONOCLE_LAYOUT 1