From a70c124b5c19608df1758113f8e70ec08b243ed6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Czy=C5=BC?= Date: Fri, 24 Feb 2023 21:53:03 +0100 Subject: [PATCH] more patches --- dwm/.dwm/config.def.h | 5 ++ dwm/.dwm/config.def.h.orig | 9 +- dwm/.dwm/config.def.h.rej | 27 +++--- dwm/.dwm/dwm.c | 70 +++++++++++++--- dwm/.dwm/dwm.c.orig | 68 +++++++++++++-- dwm/.dwm/layouts.c | 27 ++++++ dwm/.dwm/patches/dwm-fullscreen-6.2.diff | 56 ------------- .../dwm-gridmode-20170909-ceac8c9.diff | 73 ---------------- .../patches/dwm-hide_vacant_tags-6.2.diff | 55 ------------ dwm/.dwm/patches/dwm-steam-6.2.diff | 63 -------------- .../dwm-uselessgap-20200719-bb2e722.diff | 83 ------------------- 11 files changed, 167 insertions(+), 369 deletions(-) create mode 100644 dwm/.dwm/layouts.c delete mode 100644 dwm/.dwm/patches/dwm-fullscreen-6.2.diff delete mode 100644 dwm/.dwm/patches/dwm-gridmode-20170909-ceac8c9.diff delete mode 100644 dwm/.dwm/patches/dwm-hide_vacant_tags-6.2.diff delete mode 100644 dwm/.dwm/patches/dwm-steam-6.2.diff delete mode 100644 dwm/.dwm/patches/dwm-uselessgap-20200719-bb2e722.diff diff --git a/dwm/.dwm/config.def.h b/dwm/.dwm/config.def.h index f1d761a..31d8f00 100644 --- a/dwm/.dwm/config.def.h +++ b/dwm/.dwm/config.def.h @@ -2,6 +2,7 @@ /* appearance */ static const unsigned int borderpx = 1; /* border pixel of windows */ +static const unsigned int gappx = 6; /* gaps between windows */ static const unsigned int snap = 32; /* snap pixel */ static const int showbar = 1; /* 0 means no bar */ static const int topbar = 1; /* 0 means bottom bar */ @@ -37,11 +38,13 @@ static const int nmaster = 1; /* number of clients in master area */ static const int resizehints = 1; /* 1 means respect size hints in tiled resizals */ static const int lockfullscreen = 1; /* 1 will force focus on the fullscreen window */ +#include "layouts.c" static const Layout layouts[] = { /* symbol arrange function */ { "[]=", tile }, /* first entry is default */ { "><>", NULL }, /* no layout function means floating behavior */ { "[M]", monocle }, + { "HHH", grid }, }; /* key definitions */ @@ -80,6 +83,8 @@ static const Key keys[] = { { MODKEY, XK_t, setlayout, {.v = &layouts[0]} }, { MODKEY, XK_f, setlayout, {.v = &layouts[1]} }, { MODKEY, XK_m, setlayout, {.v = &layouts[2]} }, + { MODKEY, XK_g, setlayout, {.v = &layouts[3]} }, + { MODKEY|ShiftMask, XK_f, fullscreen, {0} }, { MODKEY, XK_space, setlayout, {0} }, { MODKEY|ShiftMask, XK_space, togglefloating, {0} }, { MODKEY, XK_0, view, {.ui = ~0 } }, diff --git a/dwm/.dwm/config.def.h.orig b/dwm/.dwm/config.def.h.orig index 9318edc..20db493 100644 --- a/dwm/.dwm/config.def.h.orig +++ b/dwm/.dwm/config.def.h.orig @@ -2,6 +2,7 @@ /* appearance */ static const unsigned int borderpx = 1; /* border pixel of windows */ +static const unsigned int gappx = 6; /* gaps between windows */ static const unsigned int snap = 32; /* snap pixel */ static const int showbar = 1; /* 0 means no bar */ static const int topbar = 1; /* 0 means bottom bar */ @@ -45,7 +46,7 @@ static const Layout layouts[] = { }; /* key definitions */ -#define MODKEY Mod1Mask +#define MODKEY Mod4Mask #define TAGKEYS(KEY,TAG) \ { MODKEY, KEY, view, {.ui = 1 << TAG} }, \ { MODKEY|ControlMask, KEY, toggleview, {.ui = 1 << TAG} }, \ @@ -58,12 +59,15 @@ static const Layout layouts[] = { /* commands */ static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */ static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, NULL }; -static const char *termcmd[] = { "st", NULL }; +static const char *termcmd[] = { "alacritty", NULL }; +static const char scratchpadname[] = "scratchpad"; +static const char *scratchpadcmd[] = { "st", "-t", scratchpadname, "-g", "120x34", NULL }; static const Key keys[] = { /* modifier key function argument */ { MODKEY, XK_p, spawn, {.v = dmenucmd } }, { MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } }, + { MODKEY, XK_grave, togglescratch, {.v = scratchpadcmd } }, { MODKEY, XK_b, togglebar, {0} }, { MODKEY, XK_j, focusstack, {.i = +1 } }, { MODKEY, XK_k, focusstack, {.i = -1 } }, @@ -77,6 +81,7 @@ static const Key keys[] = { { MODKEY, XK_t, setlayout, {.v = &layouts[0]} }, { MODKEY, XK_f, setlayout, {.v = &layouts[1]} }, { MODKEY, XK_m, setlayout, {.v = &layouts[2]} }, + { MODKEY|ShiftMask, XK_f, fullscreen, {0} }, { MODKEY, XK_space, setlayout, {0} }, { MODKEY|ShiftMask, XK_space, togglefloating, {0} }, { MODKEY, XK_0, view, {.ui = ~0 } }, diff --git a/dwm/.dwm/config.def.h.rej b/dwm/.dwm/config.def.h.rej index 2b9542c..f4ac42c 100644 --- a/dwm/.dwm/config.def.h.rej +++ b/dwm/.dwm/config.def.h.rej @@ -1,17 +1,10 @@ ---- config.def.h 2019-06-06 21:23:27.006661784 +0200 -+++ config.def.h 2019-06-20 15:05:59.083102462 +0200 -@@ -58,11 +58,14 @@ static const Layout layouts[] = { - static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */ - static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, NULL }; - static const char *termcmd[] = { "st", NULL }; -+static const char scratchpadname[] = "scratchpad"; -+static const char *scratchpadcmd[] = { "st", "-t", scratchpadname, "-g", "120x34", NULL }; - - static Key keys[] = { - /* modifier key function argument */ - { MODKEY, XK_p, spawn, {.v = dmenucmd } }, - { MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } }, -+ { MODKEY, XK_grave, togglescratch, {.v = scratchpadcmd } }, - { MODKEY, XK_b, togglebar, {0} }, - { MODKEY, XK_j, focusstack, {.i = +1 } }, - { MODKEY, XK_k, focusstack, {.i = -1 } }, +--- config.def.h ++++ config.def.h +@@ -78,6 +80,7 @@ static Key keys[] = { + { MODKEY, XK_t, setlayout, {.v = &layouts[0]} }, + { MODKEY, XK_f, setlayout, {.v = &layouts[1]} }, + { MODKEY, XK_m, setlayout, {.v = &layouts[2]} }, ++ { MODKEY, XK_g, setlayout, {.v = &layouts[3]} }, + { MODKEY, XK_space, setlayout, {0} }, + { MODKEY|ShiftMask, XK_space, togglefloating, {0} }, + { MODKEY, XK_0, view, {.ui = ~0 } }, diff --git a/dwm/.dwm/dwm.c b/dwm/.dwm/dwm.c index 0e49aa3..4b62b61 100644 --- a/dwm/.dwm/dwm.c +++ b/dwm/.dwm/dwm.c @@ -53,8 +53,8 @@ #define ISVISIBLE(C) ((C->tags & C->mon->tagset[C->mon->seltags])) #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 WIDTH(X) ((X)->w + 2 * (X)->bw + gappx) +#define HEIGHT(X) ((X)->h + 2 * (X)->bw + gappx) #define TAGMASK ((1 << LENGTH(tags)) - 1) #define TEXTW(X) (drw_fontset_getwidth(drw, (X)) + lrpad) @@ -94,6 +94,7 @@ struct Client { int bw, oldbw; unsigned int tags; int isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen; + int issteam; Client *next; Client *snext; Monitor *mon; @@ -202,6 +203,7 @@ static void sendmon(Client *c, Monitor *m); static void setclientstate(Client *c, long state); static void setfocus(Client *c); static void setfullscreen(Client *c, int fullscreen); +static void fullscreen(const Arg *arg); static void setlayout(const Arg *arg); static void setmfact(const Arg *arg); static void setup(void); @@ -301,6 +303,9 @@ applyrules(Client *c) class = ch.res_class ? ch.res_class : broken; instance = ch.res_name ? ch.res_name : broken; + if (strstr(class, "Steam") || strstr(class, "steam_app_")) + c->issteam = 1; + for (i = 0; i < LENGTH(rules); i++) { r = &rules[i]; if((!r->title || !regexec(®excache[i][2], c->name, 0, NULL, 0)) && @@ -631,13 +636,15 @@ configurerequest(XEvent *e) c->bw = ev->border_width; else if (c->isfloating || !selmon->lt[selmon->sellt]->arrange) { m = c->mon; - 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; + 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; + } } if (ev->value_mask & CWWidth) { c->oldw = c->w; @@ -1335,12 +1342,36 @@ void resizeclient(Client *c, int x, int y, int w, int h) { XWindowChanges wc; + unsigned int n; + unsigned int gapoffset; + unsigned int gapincr; + Client *nbc; - c->oldx = c->x; c->x = wc.x = x; - 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; wc.border_width = c->bw; + + /* Get number of clients for the client's monitor */ + for (n = 0, nbc = nexttiled(c->mon->clients); nbc; nbc = nexttiled(nbc->next), n++); + + /* Do nothing if layout is floating */ + if (c->isfloating || c->mon->lt[c->mon->sellt]->arrange == NULL) { + gapincr = gapoffset = 0; + } else { + /* Remove border and gap if layout is monocle or only one client */ + if (c->mon->lt[c->mon->sellt]->arrange == monocle || n == 1) { + gapoffset = 0; + gapincr = -2 * borderpx; + wc.border_width = 0; + } else { + gapoffset = gappx; + gapincr = 2 * gappx; + } + } + + c->oldx = c->x; c->x = wc.x = x + gapoffset; + c->oldy = c->y; c->y = wc.y = y + gapoffset; + c->oldw = c->w; c->w = wc.width = w - gapincr; + c->oldh = c->h; c->h = wc.height = h - gapincr; + XConfigureWindow(dpy, c->win, CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc); configure(c); XSync(dpy, False); @@ -1556,6 +1587,19 @@ setfullscreen(Client *c, int fullscreen) } } +Layout *last_layout; +void +fullscreen(const Arg *arg) +{ + if (selmon->showbar) { + for(last_layout = (Layout *)layouts; last_layout != selmon->lt[selmon->sellt]; last_layout++); + setlayout(&((Arg) { .v = &layouts[2] })); + } else { + setlayout(&((Arg) { .v = last_layout })); + } + togglebar(arg); +} + void setlayout(const Arg *arg) { diff --git a/dwm/.dwm/dwm.c.orig b/dwm/.dwm/dwm.c.orig index d332ae7..2e73cba 100644 --- a/dwm/.dwm/dwm.c.orig +++ b/dwm/.dwm/dwm.c.orig @@ -94,6 +94,7 @@ struct Client { int bw, oldbw; unsigned int tags; int isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen; + int issteam; Client *next; Client *snext; Monitor *mon; @@ -202,6 +203,7 @@ static void sendmon(Client *c, Monitor *m); static void setclientstate(Client *c, long state); static void setfocus(Client *c); static void setfullscreen(Client *c, int fullscreen); +static void fullscreen(const Arg *arg); static void setlayout(const Arg *arg); static void setmfact(const Arg *arg); static void setup(void); @@ -215,6 +217,7 @@ static void tagmon(const Arg *arg); static void tile(Monitor *m); static void togglebar(const Arg *arg); static void togglefloating(const Arg *arg); +static void togglescratch(const Arg *arg); static void toggletag(const Arg *arg); static void toggleview(const Arg *arg); static void unfocus(Client *c, int setfocus); @@ -276,6 +279,8 @@ static Window root, wmcheckwin; /* configuration, allows nested code to access above variables */ #include "config.h" +static unsigned int scratchtag = 1 << LENGTH(tags); + /* compile-time check if all tags fit into an unsigned int bit array. */ struct NumTags { char limitexceeded[LENGTH(tags) > 31 ? -1 : 1]; }; @@ -298,6 +303,9 @@ applyrules(Client *c) class = ch.res_class ? ch.res_class : broken; instance = ch.res_name ? ch.res_name : broken; + if (strstr(class, "Steam") || strstr(class, "steam_app_")) + c->issteam = 1; + for (i = 0; i < LENGTH(rules); i++) { r = &rules[i]; if((!r->title || !regexec(®excache[i][2], c->name, 0, NULL, 0)) && @@ -628,13 +636,15 @@ configurerequest(XEvent *e) c->bw = ev->border_width; else if (c->isfloating || !selmon->lt[selmon->sellt]->arrange) { m = c->mon; - 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; + 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; + } } if (ev->value_mask & CWWidth) { c->oldw = c->w; @@ -1098,6 +1108,14 @@ manage(Window w, XWindowAttributes *wa) c->y = MAX(c->y, c->mon->wy); c->bw = borderpx; + selmon->tagset[selmon->seltags] &= ~scratchtag; + if (!strcmp(c->name, scratchpadname)) { + c->mon->tagset[c->mon->seltags] |= c->tags = scratchtag; + c->isfloating = True; + c->x = c->mon->wx + (c->mon->ww / 2 - WIDTH(c) / 2); + c->y = c->mon->wy + (c->mon->wh / 2 - HEIGHT(c) / 2); + } + wc.border_width = c->bw; XConfigureWindow(dpy, w, CWBorderWidth, &wc); XSetWindowBorder(dpy, w, scheme[SchemeNorm][ColBorder].pixel); @@ -1545,6 +1563,19 @@ setfullscreen(Client *c, int fullscreen) } } +Layout *last_layout; +void +fullscreen(const Arg *arg) +{ + if (selmon->showbar) { + for(last_layout = (Layout *)layouts; last_layout != selmon->lt[selmon->sellt]; last_layout++); + setlayout(&((Arg) { .v = &layouts[2] })); + } else { + setlayout(&((Arg) { .v = last_layout })); + } + togglebar(arg); +} + void setlayout(const Arg *arg) { @@ -1704,6 +1735,7 @@ spawn(const Arg *arg) { if (arg->v == dmenucmd) dmenumon[0] = '0' + selmon->num; + selmon->tagset[selmon->seltags] &= ~scratchtag; if (fork() == 0) { if (dpy) close(ConnectionNumber(dpy)); @@ -1782,6 +1814,28 @@ togglefloating(const Arg *arg) arrange(selmon); } +void +togglescratch(const Arg *arg) +{ + Client *c; + unsigned int found = 0; + + for (c = selmon->clients; c && !(found = c->tags & scratchtag); c = c->next); + if (found) { + unsigned int newtagset = selmon->tagset[selmon->seltags] ^ scratchtag; + if (newtagset) { + selmon->tagset[selmon->seltags] = newtagset; + focus(NULL); + arrange(selmon); + } + if (ISVISIBLE(c)) { + focus(c); + restack(selmon); + } + } else + spawn(arg); +} + void toggletag(const Arg *arg) { diff --git a/dwm/.dwm/layouts.c b/dwm/.dwm/layouts.c new file mode 100644 index 0000000..d26acf3 --- /dev/null +++ b/dwm/.dwm/layouts.c @@ -0,0 +1,27 @@ +void +grid(Monitor *m) { + unsigned int i, n, cx, cy, cw, ch, aw, ah, 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); + for(i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next)) { + cx = m->wx + (i / rows) * cw; + cy = m->wy + (i % rows) * ch; + /* adjust height/width of last row/column's windows */ + ah = ((i + 1) % rows == 0) ? m->wh - ch * rows : 0; + aw = (i >= rows * (cols - 1)) ? m->ww - cw * cols : 0; + resize(c, cx, cy, cw - 2 * c->bw + aw, ch - 2 * c->bw + ah, False); + i++; + } +} diff --git a/dwm/.dwm/patches/dwm-fullscreen-6.2.diff b/dwm/.dwm/patches/dwm-fullscreen-6.2.diff deleted file mode 100644 index 36e3140..0000000 --- a/dwm/.dwm/patches/dwm-fullscreen-6.2.diff +++ /dev/null @@ -1,56 +0,0 @@ -From 54719285bd1a984e2efce6e8a8eab184fec11abf Mon Sep 17 00:00:00 2001 -From: Sermak -Date: Mon, 8 Jul 2019 01:06:44 +0200 -Subject: [PATCH] Simulate toggleable fullscreen mode - ---- - config.def.h | 1 + - dwm.c | 14 ++++++++++++++ - 2 files changed, 15 insertions(+) - -diff --git a/config.def.h b/config.def.h -index 1c0b587..f774cc5 100644 ---- a/config.def.h -+++ b/config.def.h -@@ -76,6 +76,7 @@ static Key keys[] = { - { MODKEY, XK_t, setlayout, {.v = &layouts[0]} }, - { MODKEY, XK_f, setlayout, {.v = &layouts[1]} }, - { MODKEY, XK_m, setlayout, {.v = &layouts[2]} }, -+ { MODKEY|ShiftMask, XK_f, fullscreen, {0} }, - { MODKEY, XK_space, setlayout, {0} }, - { MODKEY|ShiftMask, XK_space, togglefloating, {0} }, - { MODKEY, XK_0, view, {.ui = ~0 } }, -diff --git a/dwm.c b/dwm.c -index 4465af1..04b1e06 100644 ---- a/dwm.c -+++ b/dwm.c -@@ -199,6 +199,7 @@ static void sendmon(Client *c, Monitor *m); - static void setclientstate(Client *c, long state); - static void setfocus(Client *c); - static void setfullscreen(Client *c, int fullscreen); -+static void fullscreen(const Arg *arg); - static void setlayout(const Arg *arg); - static void setmfact(const Arg *arg); - static void setup(void); -@@ -1497,6 +1498,19 @@ setfullscreen(Client *c, int fullscreen) - } - } - -+Layout *last_layout; -+void -+fullscreen(const Arg *arg) -+{ -+ if (selmon->showbar) { -+ for(last_layout = (Layout *)layouts; last_layout != selmon->lt[selmon->sellt]; last_layout++); -+ setlayout(&((Arg) { .v = &layouts[2] })); -+ } else { -+ setlayout(&((Arg) { .v = last_layout })); -+ } -+ togglebar(arg); -+} -+ - void - setlayout(const Arg *arg) - { --- -2.22.0 diff --git a/dwm/.dwm/patches/dwm-gridmode-20170909-ceac8c9.diff b/dwm/.dwm/patches/dwm-gridmode-20170909-ceac8c9.diff deleted file mode 100644 index feec67b..0000000 --- a/dwm/.dwm/patches/dwm-gridmode-20170909-ceac8c9.diff +++ /dev/null @@ -1,73 +0,0 @@ -From b04bb473cf9818277d33a591f7fe2dfae96afaaf Mon Sep 17 00:00:00 2001 -From: Joshua Haase -Date: Mon, 15 Aug 2016 17:06:18 -0500 -Subject: [PATCH] Apply modified gridmode patch. - ---- - config.def.h | 3 +++ - layouts.c | 27 +++++++++++++++++++++++++++ - 2 files changed, 30 insertions(+) - create mode 100644 layouts.c - -diff --git a/config.def.h b/config.def.h -index a9ac303..30b7c4a 100644 ---- a/config.def.h -+++ b/config.def.h -@@ -36,11 +36,13 @@ static const float mfact = 0.55; /* factor of master area size [0.05..0.95] - static const int nmaster = 1; /* number of clients in master area */ - static const int resizehints = 1; /* 1 means respect size hints in tiled resizals */ - -+#include "layouts.c" - static const Layout layouts[] = { - /* symbol arrange function */ - { "[]=", tile }, /* first entry is default */ - { "><>", NULL }, /* no layout function means floating behavior */ - { "[M]", monocle }, -+ { "HHH", grid }, - }; - - /* key definitions */ -@@ -76,6 +78,7 @@ static Key keys[] = { - { MODKEY, XK_t, setlayout, {.v = &layouts[0]} }, - { MODKEY, XK_f, setlayout, {.v = &layouts[1]} }, - { MODKEY, XK_m, setlayout, {.v = &layouts[2]} }, -+ { MODKEY, XK_g, setlayout, {.v = &layouts[3]} }, - { MODKEY, XK_space, setlayout, {0} }, - { MODKEY|ShiftMask, XK_space, togglefloating, {0} }, - { MODKEY, XK_0, view, {.ui = ~0 } }, -diff --git a/layouts.c b/layouts.c -new file mode 100644 -index 0000000..d26acf3 ---- /dev/null -+++ b/layouts.c -@@ -0,0 +1,27 @@ -+void -+grid(Monitor *m) { -+ unsigned int i, n, cx, cy, cw, ch, aw, ah, 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); -+ for(i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next)) { -+ cx = m->wx + (i / rows) * cw; -+ cy = m->wy + (i % rows) * ch; -+ /* adjust height/width of last row/column's windows */ -+ ah = ((i + 1) % rows == 0) ? m->wh - ch * rows : 0; -+ aw = (i >= rows * (cols - 1)) ? m->ww - cw * cols : 0; -+ resize(c, cx, cy, cw - 2 * c->bw + aw, ch - 2 * c->bw + ah, False); -+ i++; -+ } -+} --- -2.14.1 - diff --git a/dwm/.dwm/patches/dwm-hide_vacant_tags-6.2.diff b/dwm/.dwm/patches/dwm-hide_vacant_tags-6.2.diff deleted file mode 100644 index a981b23..0000000 --- a/dwm/.dwm/patches/dwm-hide_vacant_tags-6.2.diff +++ /dev/null @@ -1,55 +0,0 @@ -diff --git a/dwm.c b/dwm.c -index 4465af1..c4aa3de 100644 ---- a/dwm.c -+++ b/dwm.c -@@ -416,7 +416,7 @@ attachstack(Client *c) - void - buttonpress(XEvent *e) - { -- unsigned int i, x, click; -+ unsigned int i, x, click, occ = 0; - Arg arg = {0}; - Client *c; - Monitor *m; -@@ -431,9 +431,14 @@ buttonpress(XEvent *e) - } - if (ev->window == selmon->barwin) { - i = x = 0; -- do -+ for (c = m->clients; c; c = c->next) -+ occ |= c->tags == 255 ? 0 : c->tags; -+ do { -+ /* do not reserve space for vacant tags */ -+ if (!(occ & 1 << i || m->tagset[m->seltags] & 1 << i)) -+ continue; - x += TEXTW(tags[i]); -- while (ev->x >= x && ++i < LENGTH(tags)); -+ } while (ev->x >= x && ++i < LENGTH(tags)); - if (i < LENGTH(tags)) { - click = ClkTagBar; - arg.ui = 1 << i; -@@ -709,19 +714,19 @@ drawbar(Monitor *m) - } - - for (c = m->clients; c; c = c->next) { -- occ |= c->tags; -+ occ |= c->tags == 255 ? 0 : c->tags; - if (c->isurgent) - urg |= c->tags; - } - x = 0; - for (i = 0; i < LENGTH(tags); i++) { -+ /* do not draw vacant tags */ -+ if (!(occ & 1 << i || m->tagset[m->seltags] & 1 << i)) -+ continue; -+ - w = TEXTW(tags[i]); - drw_setscheme(drw, scheme[m->tagset[m->seltags] & 1 << i ? SchemeSel : SchemeNorm]); - drw_text(drw, x, 0, w, bh, lrpad / 2, tags[i], urg & 1 << i); -- if (occ & 1 << i) -- drw_rect(drw, x + boxs, boxs, boxw, boxw, -- m == selmon && selmon->sel && selmon->sel->tags & 1 << i, -- urg & 1 << i); - x += w; - } - w = blw = TEXTW(m->ltsymbol); diff --git a/dwm/.dwm/patches/dwm-steam-6.2.diff b/dwm/.dwm/patches/dwm-steam-6.2.diff deleted file mode 100644 index 6b92c2a..0000000 --- a/dwm/.dwm/patches/dwm-steam-6.2.diff +++ /dev/null @@ -1,63 +0,0 @@ -From 2550931c66e10e667ce56a6761cbadd12b331c52 Mon Sep 17 00:00:00 2001 -From: bakkeby -Date: Mon, 10 Aug 2020 16:45:00 +0200 -Subject: [PATCH] Steam patch - -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 coordinates 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. ---- - dwm.c | 20 +++++++++++++------- - 1 file changed, 13 insertions(+), 7 deletions(-) - -diff --git a/dwm.c b/dwm.c -index 4465af1..598d36d 100644 ---- a/dwm.c -+++ b/dwm.c -@@ -93,6 +93,7 @@ struct Client { - int bw, oldbw; - unsigned int tags; - int isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen; -+ int issteam; - Client *next; - Client *snext; - Monitor *mon; -@@ -291,6 +292,9 @@ applyrules(Client *c) - class = ch.res_class ? ch.res_class : broken; - instance = ch.res_name ? ch.res_name : broken; - -+ if (strstr(class, "Steam") || strstr(class, "steam_app_")) -+ c->issteam = 1; -+ - for (i = 0; i < LENGTH(rules); i++) { - r = &rules[i]; - if ((!r->title || strstr(c->name, r->title)) -@@ -588,13 +592,15 @@ configurerequest(XEvent *e) - c->bw = ev->border_width; - else if (c->isfloating || !selmon->lt[selmon->sellt]->arrange) { - m = c->mon; -- 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; -+ 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; -+ } - } - if (ev->value_mask & CWWidth) { - c->oldw = c->w; --- -2.19.1 - diff --git a/dwm/.dwm/patches/dwm-uselessgap-20200719-bb2e722.diff b/dwm/.dwm/patches/dwm-uselessgap-20200719-bb2e722.diff deleted file mode 100644 index 95f0650..0000000 --- a/dwm/.dwm/patches/dwm-uselessgap-20200719-bb2e722.diff +++ /dev/null @@ -1,83 +0,0 @@ -From bb3259fd727ae751abb33364e91d73ab1bcda4da Mon Sep 17 00:00:00 2001 -From: Mateus Auler -Date: Sun, 19 Jul 2020 18:03:58 -0300 -Subject: [PATCH] Fixed issue where when moving a client to a different - monitor, it would incorrectly check the client's previous monitor instead of - its current one to determine if the gaps and border should be drawn. - ---- - config.def.h | 1 + - dwm.c | 36 ++++++++++++++++++++++++++++++------ - 2 files changed, 31 insertions(+), 6 deletions(-) - -diff --git a/config.def.h b/config.def.h -index 1c0b587..b11471d 100644 ---- a/config.def.h -+++ b/config.def.h -@@ -2,6 +2,7 @@ - - /* appearance */ - static const unsigned int borderpx = 1; /* border pixel of windows */ -+static const unsigned int gappx = 6; /* gaps between windows */ - static const unsigned int snap = 32; /* snap pixel */ - static const int showbar = 1; /* 0 means no bar */ - static const int topbar = 1; /* 0 means bottom bar */ -diff --git a/dwm.c b/dwm.c -index 9fd0286..79703b3 100644 ---- a/dwm.c -+++ b/dwm.c -@@ -52,8 +52,8 @@ - #define ISVISIBLE(C) ((C->tags & C->mon->tagset[C->mon->seltags])) - #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 WIDTH(X) ((X)->w + 2 * (X)->bw + gappx) -+#define HEIGHT(X) ((X)->h + 2 * (X)->bw + gappx) - #define TAGMASK ((1 << LENGTH(tags)) - 1) - #define TEXTW(X) (drw_fontset_getwidth(drw, (X)) + lrpad) - -@@ -1277,12 +1277,36 @@ void - resizeclient(Client *c, int x, int y, int w, int h) - { - XWindowChanges wc; -+ unsigned int n; -+ unsigned int gapoffset; -+ unsigned int gapincr; -+ Client *nbc; - -- c->oldx = c->x; c->x = wc.x = x; -- 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; - wc.border_width = c->bw; -+ -+ /* Get number of clients for the client's monitor */ -+ for (n = 0, nbc = nexttiled(c->mon->clients); nbc; nbc = nexttiled(nbc->next), n++); -+ -+ /* Do nothing if layout is floating */ -+ if (c->isfloating || c->mon->lt[c->mon->sellt]->arrange == NULL) { -+ gapincr = gapoffset = 0; -+ } else { -+ /* Remove border and gap if layout is monocle or only one client */ -+ if (c->mon->lt[c->mon->sellt]->arrange == monocle || n == 1) { -+ gapoffset = 0; -+ gapincr = -2 * borderpx; -+ wc.border_width = 0; -+ } else { -+ gapoffset = gappx; -+ gapincr = 2 * gappx; -+ } -+ } -+ -+ c->oldx = c->x; c->x = wc.x = x + gapoffset; -+ c->oldy = c->y; c->y = wc.y = y + gapoffset; -+ c->oldw = c->w; c->w = wc.width = w - gapincr; -+ c->oldh = c->h; c->h = wc.height = h - gapincr; -+ - XConfigureWindow(dpy, c->win, CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc); - configure(c); - XSync(dpy, False); --- -2.27.0 -