diff options
author | Guangxiong Lin <[email protected]> | 2021-10-23 15:16:34 +0800 |
---|---|---|
committer | Guangxiong Lin <[email protected]> | 2021-10-23 15:16:34 +0800 |
commit | d4f7c9dc83c9bf04241bc0c5f8358bd30e0de934 (patch) | |
tree | bfeb8e55cf2b3aa5fd5dece516c6a74e8f389cc6 | |
parent | 702d7791d4be30abcdbe51ba45c465e41ebd6a0a (diff) | |
download | dotfiles-d4f7c9dc83c9bf04241bc0c5f8358bd30e0de934.tar.gz dotfiles-d4f7c9dc83c9bf04241bc0c5f8358bd30e0de934.tar.bz2 dotfiles-d4f7c9dc83c9bf04241bc0c5f8358bd30e0de934.zip |
Delete dwm config
-rw-r--r-- | dwm/PKGBUILD | 6 | ||||
-rw-r--r-- | dwm/config.h | 124 | ||||
-rw-r--r-- | dwm/patches/dwm-anybar-polybar-tray-fix-20200810-bb2e722.diff | 445 | ||||
-rw-r--r-- | dwm/patches/dwm-pertag-20200914-61bb8b2.diff | 177 | ||||
-rw-r--r-- | dwm/patches/dwm-steam-6.2.diff | 63 |
5 files changed, 0 insertions, 815 deletions
diff --git a/dwm/PKGBUILD b/dwm/PKGBUILD deleted file mode 100644 index 7bc6c38..0000000 --- a/dwm/PKGBUILD +++ /dev/null @@ -1,6 +0,0 @@ -prepare () { - cd "$srcdir/$pkgname-$pkgver" - cp "$srcdir/config.h" config.h - - find -L "$srcdir/patches" -name "*.diff" -type f -print0 | sort -z | xargs -t -0 -n 1 patch -p1 -i -} diff --git a/dwm/config.h b/dwm/config.h deleted file mode 100644 index feed0a4..0000000 --- a/dwm/config.h +++ /dev/null @@ -1,124 +0,0 @@ -/* See LICENSE file for copyright and license details. */ - -/* appearance */ -static const unsigned int borderpx = 1; /* border pixel of windows */ -static const unsigned int snap = 32; /* snap pixel */ -static const int showbar = 1; /* 0 means no bar */ -static const int topbar = 1; /* 0 means bottom bar */ -static const int usealtbar = 1; -static const char *altbarclass = "Polybar"; -static const char *alttrayname = "tray"; -static const char *altbarcmd = "$HOME/bar.sh"; -static const char *fonts[] = { "monospace:size=10" }; -static const char dmenufont[] = "monospace:size=10"; -static const char col_gray1[] = "#222222"; -static const char col_gray2[] = "#444444"; -static const char col_gray3[] = "#bbbbbb"; -static const char col_gray4[] = "#eeeeee"; -static const char col_cyan[] = "#005577"; -static const char *colors[][3] = { - /* fg bg border */ - [SchemeNorm] = { col_gray3, col_gray1, col_gray2 }, - [SchemeSel] = { col_gray4, col_cyan, col_cyan }, -}; - -/* tagging */ -static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" }; - -static const Rule rules[] = { - /* xprop(1): - * WM_CLASS(STRING) = instance, class - * WM_NAME(STRING) = title - */ - /* class instance title tags mask isfloating monitor */ - { "Gimp", NULL, NULL, 0, 1, -1 }, - { "Firefox", NULL, NULL, 1 << 8, 0, -1 }, - { "Steam", NULL, NULL, 0, 1, -1 }, - { "Lutris", NULL, NULL, 0, 1, -1 }, - { "KeePassXC",NULL, NULL, 0, 1, -1 }, -}; - -/* layout(s) */ -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 */ - -static const Layout layouts[] = { - /* symbol arrange function */ - { "[]=", tile }, /* first entry is default */ - { "><>", NULL }, /* no layout function means floating behavior */ - { "[M]", monocle }, -}; - -/* key definitions */ -#define MODKEY Mod1Mask -#define TAGKEYS(KEY,TAG) \ - { MODKEY, KEY, view, {.ui = 1 << TAG} }, \ - { MODKEY|ControlMask, KEY, toggleview, {.ui = 1 << TAG} }, \ - { MODKEY|ShiftMask, KEY, tag, {.ui = 1 << TAG} }, \ - { MODKEY|ControlMask|ShiftMask, KEY, toggletag, {.ui = 1 << TAG} }, - -/* helper for spawning shell commands in the pre dwm-5.0 fashion */ -#define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } } - -/* 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 *roficmd[] = { "rofi", "-combi-modi", "window,drun,ssh", "-show", "combi", "-show-icons", "-theme", "arthur", NULL }; -static const char *termcmd[] = { "st", NULL }; - -static Key keys[] = { - /* modifier key function argument */ - { MODKEY, XK_space, spawn, {.v = dmenucmd } }, - { MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } }, - { MODKEY, XK_p, spawn, {.v = roficmd } }, - { MODKEY, XK_b, togglebar, {0} }, - { MODKEY, XK_j, focusstack, {.i = +1 } }, - { MODKEY, XK_k, focusstack, {.i = -1 } }, - { MODKEY, XK_i, incnmaster, {.i = +1 } }, - { MODKEY, XK_d, incnmaster, {.i = -1 } }, - { MODKEY|ShiftMask, XK_h, setmfact, {.f = -0.05} }, - { MODKEY|ShiftMask, XK_l, setmfact, {.f = +0.05} }, - { MODKEY, XK_Return, zoom, {0} }, - { MODKEY, XK_Tab, view, {0} }, - { MODKEY, XK_q, killclient, {0} }, - { MODKEY, XK_t, setlayout, {.v = &layouts[0]} }, - { MODKEY, XK_f, setlayout, {.v = &layouts[1]} }, - { MODKEY, XK_m, setlayout, {.v = &layouts[2]} }, - // { MODKEY, XK_space, setlayout, {0} }, - { MODKEY|ShiftMask, XK_space, togglefloating, {0} }, - { MODKEY, XK_0, view, {.ui = ~0 } }, - { MODKEY|ShiftMask, XK_0, tag, {.ui = ~0 } }, - { MODKEY, XK_comma, focusmon, {.i = -1 } }, - { MODKEY, XK_period, focusmon, {.i = +1 } }, - { MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } }, - { MODKEY|ShiftMask, XK_period, tagmon, {.i = +1 } }, - TAGKEYS( XK_1, 0) - TAGKEYS( XK_2, 1) - TAGKEYS( XK_3, 2) - TAGKEYS( XK_4, 3) - TAGKEYS( XK_5, 4) - TAGKEYS( XK_6, 5) - TAGKEYS( XK_7, 6) - TAGKEYS( XK_8, 7) - TAGKEYS( XK_9, 8) - { MODKEY|ShiftMask, XK_q, quit, {0} }, -}; - -/* button definitions */ -/* click can be ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle, ClkClientWin, or ClkRootWin */ -static Button buttons[] = { - /* click event mask button function argument */ - { ClkLtSymbol, 0, Button1, setlayout, {0} }, - { ClkLtSymbol, 0, Button3, setlayout, {.v = &layouts[2]} }, - { ClkWinTitle, 0, Button2, zoom, {0} }, - { ClkStatusText, 0, Button2, spawn, {.v = termcmd } }, - { ClkClientWin, MODKEY, Button1, movemouse, {0} }, - { ClkClientWin, MODKEY, Button2, togglefloating, {0} }, - { ClkClientWin, MODKEY, Button3, resizemouse, {0} }, - { ClkTagBar, 0, Button1, view, {0} }, - { ClkTagBar, 0, Button3, toggleview, {0} }, - { ClkTagBar, MODKEY, Button1, tag, {0} }, - { ClkTagBar, MODKEY, Button3, toggletag, {0} }, -}; - diff --git a/dwm/patches/dwm-anybar-polybar-tray-fix-20200810-bb2e722.diff b/dwm/patches/dwm-anybar-polybar-tray-fix-20200810-bb2e722.diff deleted file mode 100644 index 693bb7b..0000000 --- a/dwm/patches/dwm-anybar-polybar-tray-fix-20200810-bb2e722.diff +++ /dev/null @@ -1,445 +0,0 @@ -From 9b5719969ce85c3ecc0238d49c0255c5c2cc79f0 Mon Sep 17 00:00:00 2001 -From: mihirlad55 <[email protected]> -Date: Mon, 10 Aug 2020 01:39:28 +0000 -Subject: [PATCH] Add support for managing external status bars - -This patch allows dwm to manage other status bars such as -polybar/lemonbar without them needing to set override-redirect. For -all intents and purposes, DWM treats this bar as if it were its own -and as a result helps the status bar and DWM live in harmony. - -This has a few advantages -* The bar does not block fullscreen windows -* DWM makes room for the status bar, so windows do not overlap the bar -* The bar can be hidden/killed and DWM will not keep an unsightly gap - where the bar was -* DWM receives EnterNotify events when your cursor enters the bar - -To use another status bar, set usealtbar to 1 in your config.h and set -altbarclass to the class name (can be found using xprop) to the class -name of your status bar. Also make sure that if your status bar will -be displayed on top, topbar is set to 1 in your config, and if it will -be displayed on bottom, topbar is set to 0. This patch does not -support bars that are not docked at the top or at the bottom of your -monitor. - -This verison of the patch fixes handling of polybar's tray. - -The patch is developed at https://github.com/mihirlad55/dwm-anybar ---- - config.def.h | 4 ++ - dwm.c | 192 +++++++++++++++++++++++++++++++++++++++++++++++---- - 2 files changed, 181 insertions(+), 15 deletions(-) - -diff --git a/config.def.h b/config.def.h -index 1c0b587..f45211b 100644 ---- a/config.def.h -+++ b/config.def.h -@@ -5,6 +5,10 @@ static const unsigned int borderpx = 1; /* border pixel of windows */ - static const unsigned int snap = 32; /* snap pixel */ - static const int showbar = 1; /* 0 means no bar */ - static const int topbar = 1; /* 0 means bottom bar */ -+static const int usealtbar = 1; /* 1 means use non-dwm status bar */ -+static const char *altbarclass = "Polybar"; /* Alternate bar class name */ -+static const char *alttrayname = "tray"; /* Polybar tray instance name */ -+static const char *altbarcmd = "$HOME/bar.sh"; /* Alternate bar launch command */ - static const char *fonts[] = { "monospace:size=10" }; - static const char dmenufont[] = "monospace:size=10"; - static const char col_gray1[] = "#222222"; -diff --git a/dwm.c b/dwm.c -index 9fd0286..c1d8ce0 100644 ---- a/dwm.c -+++ b/dwm.c -@@ -47,8 +47,8 @@ - /* macros */ - #define BUTTONMASK (ButtonPressMask|ButtonReleaseMask) - #define CLEANMASK(mask) (mask & ~(numlockmask|LockMask) & (ShiftMask|ControlMask|Mod1Mask|Mod2Mask|Mod3Mask|Mod4Mask|Mod5Mask)) --#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))) -+#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))) - #define ISVISIBLE(C) ((C->tags & C->mon->tagset[C->mon->seltags])) - #define LENGTH(X) (sizeof X / sizeof X[0]) - #define MOUSEMASK (BUTTONMASK|PointerMotionMask) -@@ -116,7 +116,8 @@ struct Monitor { - float mfact; - int nmaster; - int num; -- int by; /* bar geometry */ -+ int by, bh; /* bar geometry */ -+ int tx, tw; /* bar tray geometry */ - int mx, my, mw, mh; /* screen size */ - int wx, wy, ww, wh; /* window area */ - unsigned int seltags; -@@ -129,6 +130,7 @@ struct Monitor { - Client *stack; - Monitor *next; - Window barwin; -+ Window traywin; - const Layout *lt[2]; - }; - -@@ -179,6 +181,8 @@ static void incnmaster(const Arg *arg); - static void keypress(XEvent *e); - static void killclient(const Arg *arg); - static void manage(Window w, XWindowAttributes *wa); -+static void managealtbar(Window win, XWindowAttributes *wa); -+static void managetray(Window win, XWindowAttributes *wa); - static void mappingnotify(XEvent *e); - static void maprequest(XEvent *e); - static void monocle(Monitor *m); -@@ -195,6 +199,7 @@ static void resizemouse(const Arg *arg); - static void restack(Monitor *m); - static void run(void); - static void scan(void); -+static void scantray(void); - static int sendevent(Client *c, Atom proto); - static void sendmon(Client *c, Monitor *m); - static void setclientstate(Client *c, long state); -@@ -207,6 +212,7 @@ static void seturgent(Client *c, int urg); - static void showhide(Client *c); - static void sigchld(int unused); - static void spawn(const Arg *arg); -+static void spawnbar(); - static void tag(const Arg *arg); - static void tagmon(const Arg *arg); - static void tile(Monitor *); -@@ -216,6 +222,8 @@ static void toggletag(const Arg *arg); - static void toggleview(const Arg *arg); - static void unfocus(Client *c, int setfocus); - static void unmanage(Client *c, int destroyed); -+static void unmanagealtbar(Window w); -+static void unmanagetray(Window w); - static void unmapnotify(XEvent *e); - static void updatebarpos(Monitor *m); - static void updatebars(void); -@@ -230,6 +238,7 @@ static void updatewmhints(Client *c); - static void view(const Arg *arg); - static Client *wintoclient(Window w); - static Monitor *wintomon(Window w); -+static int wmclasscontains(Window win, const char *class, const char *name); - static int xerror(Display *dpy, XErrorEvent *ee); - static int xerrordummy(Display *dpy, XErrorEvent *ee); - static int xerrorstart(Display *dpy, XErrorEvent *ee); -@@ -505,8 +514,10 @@ cleanupmon(Monitor *mon) - for (m = mons; m && m->next != mon; m = m->next); - m->next = mon->next; - } -- XUnmapWindow(dpy, mon->barwin); -- XDestroyWindow(dpy, mon->barwin); -+ if (!usealtbar) { -+ XUnmapWindow(dpy, mon->barwin); -+ XDestroyWindow(dpy, mon->barwin); -+ } - free(mon); - } - -@@ -568,7 +579,7 @@ configurenotify(XEvent *e) - for (c = m->clients; c; c = c->next) - if (c->isfullscreen) - resizeclient(c, m->mx, m->my, m->mw, m->mh); -- XMoveResizeWindow(dpy, m->barwin, m->wx, m->by, m->ww, bh); -+ XMoveResizeWindow(dpy, m->barwin, m->wx, m->by, m->ww, m->bh); - } - focus(NULL); - arrange(NULL); -@@ -639,6 +650,7 @@ createmon(void) - m->nmaster = nmaster; - m->showbar = showbar; - m->topbar = topbar; -+ m->bh = bh; - m->lt[0] = &layouts[0]; - m->lt[1] = &layouts[1 % LENGTH(layouts)]; - strncpy(m->ltsymbol, layouts[0].symbol, sizeof m->ltsymbol); -@@ -649,10 +661,15 @@ void - destroynotify(XEvent *e) - { - Client *c; -+ Monitor *m; - XDestroyWindowEvent *ev = &e->xdestroywindow; - - if ((c = wintoclient(ev->window))) - unmanage(c, 1); -+ else if ((m = wintomon(ev->window)) && m->barwin == ev->window) -+ unmanagealtbar(ev->window); -+ else if (m->traywin == ev->window) -+ unmanagetray(ev->window); - } - - void -@@ -696,6 +713,9 @@ dirtomon(int dir) - void - drawbar(Monitor *m) - { -+ if (usealtbar) -+ return; -+ - int x, w, tw = 0; - int boxs = drw->fonts->h / 9; - int boxw = drw->fonts->h / 6 + 2; -@@ -1077,6 +1097,45 @@ manage(Window w, XWindowAttributes *wa) - focus(NULL); - } - -+void -+managealtbar(Window win, XWindowAttributes *wa) -+{ -+ Monitor *m; -+ if (!(m = recttomon(wa->x, wa->y, wa->width, wa->height))) -+ return; -+ -+ m->barwin = win; -+ m->by = wa->y; -+ bh = m->bh = wa->height; -+ updatebarpos(m); -+ arrange(m); -+ XSelectInput(dpy, win, EnterWindowMask|FocusChangeMask|PropertyChangeMask|StructureNotifyMask); -+ XMoveResizeWindow(dpy, win, wa->x, wa->y, wa->width, wa->height); -+ XMapWindow(dpy, win); -+ XChangeProperty(dpy, root, netatom[NetClientList], XA_WINDOW, 32, PropModeAppend, -+ (unsigned char *) &win, 1); -+} -+ -+void -+managetray(Window win, XWindowAttributes *wa) -+{ -+ Monitor *m; -+ if (!(m = recttomon(wa->x, wa->y, wa->width, wa->height))) -+ return; -+ -+ m->traywin = win; -+ m->tx = wa->x; -+ m->tw = wa->width; -+ updatebarpos(m); -+ arrange(m); -+ XSelectInput(dpy, win, EnterWindowMask|FocusChangeMask|PropertyChangeMask|StructureNotifyMask); -+ XMoveResizeWindow(dpy, win, wa->x, wa->y, wa->width, wa->height); -+ XMapWindow(dpy, win); -+ XChangeProperty(dpy, root, netatom[NetClientList], XA_WINDOW, 32, PropModeAppend, -+ (unsigned char *) &win, 1); -+} -+ -+ - void - mappingnotify(XEvent *e) - { -@@ -1097,7 +1156,9 @@ maprequest(XEvent *e) - return; - if (wa.override_redirect) - return; -- if (!wintoclient(ev->window)) -+ if (wmclasscontains(ev->window, altbarclass, "")) -+ managealtbar(ev->window, &wa); -+ else if (!wintoclient(ev->window)) - manage(ev->window, &wa); - } - -@@ -1393,7 +1454,9 @@ scan(void) - if (!XGetWindowAttributes(dpy, wins[i], &wa) - || wa.override_redirect || XGetTransientForHint(dpy, wins[i], &d1)) - continue; -- if (wa.map_state == IsViewable || getstate(wins[i]) == IconicState) -+ if (wmclasscontains(wins[i], altbarclass, "")) -+ managealtbar(wins[i], &wa); -+ else if (wa.map_state == IsViewable || getstate(wins[i]) == IconicState) - manage(wins[i], &wa); - } - for (i = 0; i < num; i++) { /* now the transients */ -@@ -1408,6 +1471,29 @@ scan(void) - } - } - -+void -+scantray(void) -+{ -+ unsigned int num; -+ Window d1, d2, *wins = NULL; -+ XWindowAttributes wa; -+ -+ if (XQueryTree(dpy, root, &d1, &d2, &wins, &num)) { -+ for (unsigned int i = 0; i < num; i++) { -+ if (wmclasscontains(wins[i], altbarclass, alttrayname)) { -+ if (!XGetWindowAttributes(dpy, wins[i], &wa)) -+ break; -+ managetray(wins[i], &wa); -+ } -+ } -+ } -+ -+ if (wins) -+ XFree(wins); -+} -+ -+ -+ - void - sendmon(Client *c, Monitor *m) - { -@@ -1546,7 +1632,7 @@ setup(void) - if (!drw_fontset_create(drw, fonts, LENGTH(fonts))) - die("no fonts could be loaded."); - lrpad = drw->fonts->h; -- bh = drw->fonts->h + 2; -+ bh = usealtbar ? 0 : drw->fonts->h + 2; - updategeom(); - /* init atoms */ - utf8string = XInternAtom(dpy, "UTF8_STRING", False); -@@ -1595,6 +1681,7 @@ setup(void) - XSelectInput(dpy, root, wa.event_mask); - grabkeys(); - focus(NULL); -+ spawnbar(); - } - - -@@ -1653,6 +1740,13 @@ spawn(const Arg *arg) - } - } - -+void -+spawnbar() -+{ -+ if (*altbarcmd) -+ system(altbarcmd); -+} -+ - void - tag(const Arg *arg) - { -@@ -1702,9 +1796,18 @@ tile(Monitor *m) - void - togglebar(const Arg *arg) - { -+ /** -+ * Polybar tray does not raise maprequest event. It must be manually scanned -+ * for. Scanning it too early while the tray is being populated would give -+ * wrong dimensions. -+ */ -+ if (!selmon->traywin) -+ scantray(); -+ - selmon->showbar = !selmon->showbar; - updatebarpos(selmon); -- XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, selmon->ww, bh); -+ XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, selmon->ww, selmon->bh); -+ XMoveResizeWindow(dpy, selmon->traywin, selmon->tx, selmon->by, selmon->tw, selmon->bh); - arrange(selmon); - } - -@@ -1787,10 +1890,41 @@ unmanage(Client *c, int destroyed) - arrange(m); - } - -+void -+unmanagealtbar(Window w) -+{ -+ Monitor *m = wintomon(w); -+ -+ if (!m) -+ return; -+ -+ m->barwin = 0; -+ m->by = 0; -+ m->bh = 0; -+ updatebarpos(m); -+ arrange(m); -+} -+ -+void -+unmanagetray(Window w) -+{ -+ Monitor *m = wintomon(w); -+ -+ if (!m) -+ return; -+ -+ m->traywin = 0; -+ m->tx = 0; -+ m->tw = 0; -+ updatebarpos(m); -+ arrange(m); -+} -+ - void - unmapnotify(XEvent *e) - { - Client *c; -+ Monitor *m; - XUnmapEvent *ev = &e->xunmap; - - if ((c = wintoclient(ev->window))) { -@@ -1798,12 +1932,18 @@ unmapnotify(XEvent *e) - setclientstate(c, WithdrawnState); - else - unmanage(c, 0); -- } -+ } else if ((m = wintomon(ev->window)) && m->barwin == ev->window) -+ unmanagealtbar(ev->window); -+ else if (m->traywin == ev->window) -+ unmanagetray(ev->window); - } - - void - updatebars(void) - { -+ if (usealtbar) -+ return; -+ - Monitor *m; - XSetWindowAttributes wa = { - .override_redirect = True, -@@ -1829,11 +1969,11 @@ updatebarpos(Monitor *m) - m->wy = m->my; - m->wh = m->mh; - if (m->showbar) { -- m->wh -= bh; -+ m->wh -= m->bh; - m->by = m->topbar ? m->wy : m->wy + m->wh; -- m->wy = m->topbar ? m->wy + bh : m->wy; -+ m->wy = m->topbar ? m->wy + m->bh : m->wy; - } else -- m->by = -bh; -+ m->by = -m->bh; - } - - void -@@ -2070,13 +2210,35 @@ wintomon(Window w) - if (w == root && getrootptr(&x, &y)) - return recttomon(x, y, 1, 1); - for (m = mons; m; m = m->next) -- if (w == m->barwin) -+ if (w == m->barwin || w == m->traywin) - return m; - if ((c = wintoclient(w))) - return c->mon; - return selmon; - } - -+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; -+} -+ - /* There's no way to check accesses to destroyed windows, thus those cases are - * ignored (especially on UnmapNotify's). Other types of errors call Xlibs - * default error handler, which may call exit. */ --- -2.28.0 - diff --git a/dwm/patches/dwm-pertag-20200914-61bb8b2.diff b/dwm/patches/dwm-pertag-20200914-61bb8b2.diff deleted file mode 100644 index c8d7fbc..0000000 --- a/dwm/patches/dwm-pertag-20200914-61bb8b2.diff +++ /dev/null @@ -1,177 +0,0 @@ -diff --git a/dwm.c b/dwm.c -index 664c527..ac8e4ec 100644 ---- a/dwm.c -+++ b/dwm.c -@@ -111,6 +111,7 @@ typedef struct { - void (*arrange)(Monitor *); - } Layout; - -+typedef struct Pertag Pertag; - struct Monitor { - char ltsymbol[16]; - float mfact; -@@ -130,6 +131,7 @@ struct Monitor { - Monitor *next; - Window barwin; - const Layout *lt[2]; -+ Pertag *pertag; - }; - - typedef struct { -@@ -272,6 +274,15 @@ static Window root, wmcheckwin; - /* configuration, allows nested code to access above variables */ - #include "config.h" - -+struct Pertag { -+ unsigned int curtag, prevtag; /* current and previous tag */ -+ int nmasters[LENGTH(tags) + 1]; /* number of windows in master area */ -+ float mfacts[LENGTH(tags) + 1]; /* mfacts per tag */ -+ unsigned int sellts[LENGTH(tags) + 1]; /* selected layouts */ -+ const Layout *ltidxs[LENGTH(tags) + 1][2]; /* matrix of tags and layouts indexes */ -+ int showbars[LENGTH(tags) + 1]; /* display bar for the current tag */ -+}; -+ - /* compile-time check if all tags fit into an unsigned int bit array. */ - struct NumTags { char limitexceeded[LENGTH(tags) > 31 ? -1 : 1]; }; - -@@ -632,6 +643,7 @@ Monitor * - createmon(void) - { - Monitor *m; -+ unsigned int i; - - m = ecalloc(1, sizeof(Monitor)); - m->tagset[0] = m->tagset[1] = 1; -@@ -642,6 +654,20 @@ createmon(void) - m->lt[0] = &layouts[0]; - m->lt[1] = &layouts[1 % LENGTH(layouts)]; - strncpy(m->ltsymbol, layouts[0].symbol, sizeof m->ltsymbol); -+ m->pertag = ecalloc(1, sizeof(Pertag)); -+ m->pertag->curtag = m->pertag->prevtag = 1; -+ -+ for (i = 0; i <= LENGTH(tags); i++) { -+ m->pertag->nmasters[i] = m->nmaster; -+ m->pertag->mfacts[i] = m->mfact; -+ -+ m->pertag->ltidxs[i][0] = m->lt[0]; -+ m->pertag->ltidxs[i][1] = m->lt[1]; -+ m->pertag->sellts[i] = m->sellt; -+ -+ m->pertag->showbars[i] = m->showbar; -+ } -+ - return m; - } - -@@ -967,7 +993,7 @@ grabkeys(void) - void - incnmaster(const Arg *arg) - { -- selmon->nmaster = MAX(selmon->nmaster + arg->i, 0); -+ selmon->nmaster = selmon->pertag->nmasters[selmon->pertag->curtag] = MAX(selmon->nmaster + arg->i, 0); - arrange(selmon); - } - -@@ -1502,9 +1528,9 @@ void - setlayout(const Arg *arg) - { - if (!arg || !arg->v || arg->v != selmon->lt[selmon->sellt]) -- selmon->sellt ^= 1; -+ selmon->sellt = selmon->pertag->sellts[selmon->pertag->curtag] ^= 1; - if (arg && arg->v) -- selmon->lt[selmon->sellt] = (Layout *)arg->v; -+ selmon->lt[selmon->sellt] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt] = (Layout *)arg->v; - strncpy(selmon->ltsymbol, selmon->lt[selmon->sellt]->symbol, sizeof selmon->ltsymbol); - if (selmon->sel) - arrange(selmon); -@@ -1523,7 +1549,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; -- selmon->mfact = f; -+ selmon->mfact = selmon->pertag->mfacts[selmon->pertag->curtag] = f; - arrange(selmon); - } - -@@ -1702,7 +1728,7 @@ tile(Monitor *m) - void - togglebar(const Arg *arg) - { -- selmon->showbar = !selmon->showbar; -+ selmon->showbar = selmon->pertag->showbars[selmon->pertag->curtag] = !selmon->showbar; - updatebarpos(selmon); - XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, selmon->ww, bh); - arrange(selmon); -@@ -1741,9 +1767,33 @@ void - toggleview(const Arg *arg) - { - unsigned int newtagset = selmon->tagset[selmon->seltags] ^ (arg->ui & TAGMASK); -+ int i; - - if (newtagset) { - selmon->tagset[selmon->seltags] = newtagset; -+ -+ if (newtagset == ~0) { -+ selmon->pertag->prevtag = selmon->pertag->curtag; -+ selmon->pertag->curtag = 0; -+ } -+ -+ /* test if the user did not select the same tag */ -+ if (!(newtagset & 1 << (selmon->pertag->curtag - 1))) { -+ selmon->pertag->prevtag = selmon->pertag->curtag; -+ for (i = 0; !(newtagset & 1 << i); i++) ; -+ selmon->pertag->curtag = i + 1; -+ } -+ -+ /* apply settings for this view */ -+ selmon->nmaster = selmon->pertag->nmasters[selmon->pertag->curtag]; -+ 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 (selmon->showbar != selmon->pertag->showbars[selmon->pertag->curtag]) -+ togglebar(NULL); -+ - focus(NULL); - arrange(selmon); - } -@@ -2038,11 +2088,37 @@ updatewmhints(Client *c) - void - view(const Arg *arg) - { -+ int i; -+ unsigned int tmptag; -+ - if ((arg->ui & TAGMASK) == selmon->tagset[selmon->seltags]) - return; - selmon->seltags ^= 1; /* toggle sel tagset */ -- if (arg->ui & TAGMASK) -+ if (arg->ui & TAGMASK) { - selmon->tagset[selmon->seltags] = arg->ui & TAGMASK; -+ selmon->pertag->prevtag = selmon->pertag->curtag; -+ -+ if (arg->ui == ~0) -+ selmon->pertag->curtag = 0; -+ else { -+ for (i = 0; !(arg->ui & 1 << i); i++) ; -+ selmon->pertag->curtag = i + 1; -+ } -+ } else { -+ tmptag = selmon->pertag->prevtag; -+ selmon->pertag->prevtag = selmon->pertag->curtag; -+ selmon->pertag->curtag = tmptag; -+ } -+ -+ selmon->nmaster = selmon->pertag->nmasters[selmon->pertag->curtag]; -+ 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 (selmon->showbar != selmon->pertag->showbars[selmon->pertag->curtag]) -+ togglebar(NULL); -+ - focus(NULL); - arrange(selmon); - } diff --git a/dwm/patches/dwm-steam-6.2.diff b/dwm/patches/dwm-steam-6.2.diff deleted file mode 100644 index 6b92c2a..0000000 --- a/dwm/patches/dwm-steam-6.2.diff +++ /dev/null @@ -1,63 +0,0 @@ -From 2550931c66e10e667ce56a6761cbadd12b331c52 Mon Sep 17 00:00:00 2001 -From: bakkeby <[email protected]> -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 - |