From bed776f6daa9f5c3c575a7cc2901a63a6c7268c7 Mon Sep 17 00:00:00 2001 From: bjarke-cachy-btw Date: Wed, 17 Jun 2026 14:36:39 +0200 Subject: [PATCH] cycle layouts --- config.def.h.rej | 26 ++-- config.h | 16 ++- dwm | Bin 95824 -> 95856 bytes dwm.1 | 6 + dwm.c | 18 +++ dwm.c.orig | 47 +++++++ dwm.o | Bin 90328 -> 90728 bytes patches/dwm-cyclelayouts-6.3.diff | 95 ++++++++++++++ patches/dwm-focusborder-6.3.diff | 200 ++++++++++++++++++++++++++++++ 9 files changed, 393 insertions(+), 15 deletions(-) create mode 100644 patches/dwm-cyclelayouts-6.3.diff create mode 100644 patches/dwm-focusborder-6.3.diff diff --git a/config.def.h.rej b/config.def.h.rej index 36b8c7c..668347e 100644 --- a/config.def.h.rej +++ b/config.def.h.rej @@ -1,15 +1,19 @@ --- config.def.h +++ config.def.h -@@ -26,9 +26,11 @@ static const Rule rules[] = { - * WM_CLASS(STRING) = instance, class - * WM_NAME(STRING) = title - */ -- /* class instance title tags mask isfloating monitor */ -+ /* class instance title tags mask isfloating monitor isgame */ - { "Gimp", NULL, NULL, 0, 1, -1 }, - { "Firefox", NULL, NULL, 1 << 8, 0, -1 }, -+ { "Steam", NULL, NULL, 0, 0, -1, 1 }, -+ { "steam_app",NULL, NULL, 0, 0, -1, 1 }, +@@ -42,6 +42,7 @@ static const Layout layouts[] = { + { "[]=", tile }, /* first entry is default */ + { "><>", NULL }, /* no layout function means floating behavior */ + { "[M]", monocle }, ++ { NULL, NULL }, }; - /* layout(s) */ + /* key definitions */ +@@ -85,6 +86,8 @@ static Key keys[] = { + { MODKEY, XK_period, focusmon, {.i = +1 } }, + { MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } }, + { MODKEY|ShiftMask, XK_period, tagmon, {.i = +1 } }, ++ { MODKEY|ControlMask, XK_comma, cyclelayout, {.i = -1 } }, ++ { MODKEY|ControlMask, XK_period, cyclelayout, {.i = +1 } }, + TAGKEYS( XK_1, 0) + TAGKEYS( XK_2, 1) + TAGKEYS( XK_3, 2) diff --git a/config.h b/config.h index 8bbe040..abbd557 100644 --- a/config.h +++ b/config.h @@ -126,6 +126,7 @@ static const Key keys[] = { { MODKEY, XK_i, incnmaster, {.i = +1 } }, { MODKEY, XK_p, incnmaster, {.i = -1 } }, + /* vim like window management / nav */ { MODKEY, XK_h, focusdir, {.i = 0 } }, { MODKEY, XK_l, focusdir, {.i = 1 } }, { MODKEY, XK_k, focusdir, {.i = 2 } }, @@ -135,6 +136,9 @@ static const Key keys[] = { { MODKEY|ShiftMask, XK_k, placedir, {.i = 2 } }, { MODKEY|ShiftMask, XK_j, placedir, {.i = 3 } }, + /* cycle layouts */ + { MODKEY, XK_n, cyclelayout, {.i = +1 } }, + { MODKEY|ShiftMask, XK_h, setcfact, {.f = +0.25} }, { MODKEY|ShiftMask, XK_l, setcfact, {.f = -0.25} }, { MODKEY|ShiftMask, XK_o, setcfact, {.f = 0.00} }, @@ -152,13 +156,17 @@ static const Key keys[] = { { MODKEY|Mod1Mask|ShiftMask, XK_8, incrohgaps, {.i = -1 } }, { MODKEY|Mod1Mask, XK_9, incrovgaps, {.i = +1 } }, { MODKEY|Mod1Mask|ShiftMask, XK_9, incrovgaps, {.i = -1 } }, - { MODKEY|Mod1Mask, XK_0, togglegaps, {0} }, - { MODKEY|Mod1Mask|ShiftMask, XK_0, defaultgaps, {0} }, + + { MODKEY, XK_a, togglegaps, {0} }, + { MODKEY|Mod1Mask|ShiftMask, XK_a, defaultgaps, {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_v, setlayout, {.v = &layouts[1]} }, + { MODKEY, XK_c, setlayout, {.v = &layouts[2]} }, + { MODKEY, XK_space, setlayout, {0} }, { MODKEY|ShiftMask, XK_space, togglefloating, {0} }, { MODKEY, XK_0, view, {.ui = ~0 } }, diff --git a/dwm b/dwm index cc63b4e939d18fb5f7d175ccc9089e67bdf10f29..29787f515af02c11a73417c1dd437cdfe887d2b7 100755 GIT binary patch delta 18425 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[selmon->sellt]; l++); + if(arg->i > 0) { + if(l->symbol && (l + 1)->symbol) + setlayout(&((Arg) { .v = (l + 1) })); + else + setlayout(&((Arg) { .v = layouts })); + } else { + if(l != layouts && (l - 1)->symbol) + setlayout(&((Arg) { .v = (l - 1) })); + else + setlayout(&((Arg) { .v = &layouts[LENGTH(layouts) - 2] })); + } +} + void destroynotify(XEvent *e) { diff --git a/dwm.c.orig b/dwm.c.orig index 938ba3e..b3d821f 100644 --- a/dwm.c.orig +++ b/dwm.c.orig @@ -57,6 +57,7 @@ * MAX(0, MIN((y)+(h),(m)->wy+(m)->wh) - MAX((y),(m)->wy))) #define ISVISIBLEONTAG(C, T) ((C->tags & T)) #define ISVISIBLE(C) ISVISIBLEONTAG(C, C->mon->tagset[C->mon->seltags]) +#define MINIMIZED(C) ((getstate(C->win) == IconicState)) #define MOUSEMASK (BUTTONMASK|PointerMotionMask) #define WIDTH(X) ((X)->w + 2 * (X)->bw) #define HEIGHT(X) ((X)->h + 2 * (X)->bw) @@ -118,6 +119,7 @@ struct Client { int bw, oldbw; unsigned int tags; int isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen, isterminal, noswallow; + int isgame; pid_t pid; Client *next; Client *snext; @@ -172,6 +174,7 @@ typedef struct { int isterminal; int noswallow; int monitor; + int isgame; } Rule; typedef struct Systray Systray; @@ -223,6 +226,7 @@ static void killclient(const Arg *arg); static void manage(Window w, XWindowAttributes *wa); static void mappingnotify(XEvent *e); static void maprequest(XEvent *e); +static void minimize(Client *c); static void monocle(Monitor *m); static void motionnotify(XEvent *e); static void movemouse(const Arg *arg); @@ -268,6 +272,7 @@ static void toggleview(const Arg *arg); static void unfocus(Client *c, int setfocus); static void unmanage(Client *c, int destroyed); static void unmapnotify(XEvent *e); +static void unminimize(Client *c); static void updatebarpos(Monitor *m); static void updatebars(void); static void updateclientlist(void); @@ -411,6 +416,7 @@ applyrules(Client *c) c->noswallow = r->noswallow; c->isfloating = r->isfloating; c->tags |= r->tags; + c->isgame = r->isgame; 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); @@ -1469,6 +1475,29 @@ maprequest(XEvent *e) manage(ev->window, &wa); } +void +minimize(Client *c) +{ + if (!c || MINIMIZED(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); +} + void monocle(Monitor *m) { @@ -1997,6 +2026,10 @@ setfocus(Client *c) XA_WINDOW, 32, PropModeReplace, (unsigned char *) &(c->win), 1); } + + if (c->isgame && c->isfullscreen) + unminimize(c); + sendevent(c->win, wmatom[WMTakeFocus], NoEventMask, wmatom[WMTakeFocus], CurrentTime, 0, 0, 0); } @@ -2359,6 +2392,10 @@ unfocus(Client *c, int setfocus) { if (!c) return; + + if (c->isgame && c->isfullscreen) + minimize(c); + grabbuttons(c, 0); XSetWindowBorder(dpy, c->win, scheme[SchemeNorm][ColBorder].pixel); if (setfocus) { @@ -2430,6 +2467,16 @@ unmapnotify(XEvent *e) } } +void +unminimize(Client *c) +{ + if (!c || !MINIMIZED(c)) + return; + + XMapWindow(dpy, c->win); + setclientstate(c, NormalState); +} + void updatebars(void) { diff --git a/dwm.o b/dwm.o index c81d12f6ad92255456a9d2a9393fa972afccb656..1cb4105693a387ee4f3664b3a0e6cb7933b018d4 100644 GIT binary patch delta 21879 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 AQvd(} delta 21655 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 U2|C+jtYn|3oigA}DN8;74^#TAt^fc4 diff --git a/patches/dwm-cyclelayouts-6.3.diff b/patches/dwm-cyclelayouts-6.3.diff new file mode 100644 index 0000000..39c134f --- /dev/null +++ b/patches/dwm-cyclelayouts-6.3.diff @@ -0,0 +1,95 @@ +From d54f931d007a32ddc1fd9d8084258d92378597a5 Mon Sep 17 00:00:00 2001 +From: Bakkeby +Date: Wed, 26 Jun 2024 09:45:28 +0200 +Subject: [PATCH] cyclelayout, function to cycle through available layouts. + +MOD-CTRL-, and MOD-CTRL-. +cycle backwards and forwards through available layouts. +Probably only useful if you have a lot of additional layouts. +The NULL, NULL layout should always be the last layout in your list, +in order to guarantee consistent behavior. + +Refer to https://dwm.suckless.org/patches/cyclelayouts/ +--- + config.def.h | 3 +++ + dwm.1 | 6 ++++++ + dwm.c | 18 ++++++++++++++++++ + 3 files changed, 27 insertions(+) + +diff --git a/config.def.h b/config.def.h +index a2ac963..938fd60 100644 +--- a/config.def.h ++++ b/config.def.h +@@ -42,6 +42,7 @@ static const Layout layouts[] = { + { "[]=", tile }, /* first entry is default */ + { "><>", NULL }, /* no layout function means floating behavior */ + { "[M]", monocle }, ++ { NULL, NULL }, + }; + + /* key definitions */ +@@ -85,6 +86,8 @@ static Key keys[] = { + { MODKEY, XK_period, focusmon, {.i = +1 } }, + { MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } }, + { MODKEY|ShiftMask, XK_period, tagmon, {.i = +1 } }, ++ { MODKEY|ControlMask, XK_comma, cyclelayout, {.i = -1 } }, ++ { MODKEY|ControlMask, XK_period, cyclelayout, {.i = +1 } }, + TAGKEYS( XK_1, 0) + TAGKEYS( XK_2, 1) + TAGKEYS( XK_3, 2) +diff --git a/dwm.1 b/dwm.1 +index ddc8321..829047b 100644 +--- a/dwm.1 ++++ b/dwm.1 +@@ -92,6 +92,12 @@ Sets monocle layout. + .B Mod1\-space + Toggles between current and previous layout. + .TP ++.B Mod1\-Control\-, ++Cycles backwards in layout list. ++.TP ++.B Mod1\-Control\-. ++Cycles forwards in layout list. ++.TP + .B Mod1\-j + Focus next window. + .TP +diff --git a/dwm.c b/dwm.c +index a96f33c..2d98c2b 100644 +--- a/dwm.c ++++ b/dwm.c +@@ -157,6 +157,7 @@ static void configure(Client *c); + static void configurenotify(XEvent *e); + static void configurerequest(XEvent *e); + static Monitor *createmon(void); ++static void cyclelayout(const Arg *arg); + static void destroynotify(XEvent *e); + static void detach(Client *c); + static void detachstack(Client *c); +@@ -645,6 +646,23 @@ createmon(void) + return m; + } + ++void ++cyclelayout(const Arg *arg) { ++ Layout *l; ++ for(l = (Layout *)layouts; l != selmon->lt[selmon->sellt]; l++); ++ if(arg->i > 0) { ++ if(l->symbol && (l + 1)->symbol) ++ setlayout(&((Arg) { .v = (l + 1) })); ++ else ++ setlayout(&((Arg) { .v = layouts })); ++ } else { ++ if(l != layouts && (l - 1)->symbol) ++ setlayout(&((Arg) { .v = (l - 1) })); ++ else ++ setlayout(&((Arg) { .v = &layouts[LENGTH(layouts) - 2] })); ++ } ++} ++ + void + destroynotify(XEvent *e) + { +-- +2.45.2 + diff --git a/patches/dwm-focusborder-6.3.diff b/patches/dwm-focusborder-6.3.diff new file mode 100644 index 0000000..2a6343e --- /dev/null +++ b/patches/dwm-focusborder-6.3.diff @@ -0,0 +1,200 @@ +From 6d049ac4a34cb2f3a9e774cf7e13886a9da349a8 Mon Sep 17 00:00:00 2001 +From: Bakkeby +Date: Wed, 26 Jun 2024 10:01:41 +0200 +Subject: [PATCH] Adding focusborder patch + +--- + config.def.h | 1 + + dwm.c | 57 +++++++++++++++++++++++++++++++++++++++++++--------- + 2 files changed, 48 insertions(+), 10 deletions(-) + +diff --git a/config.def.h b/config.def.h +index a2ac963..17d326b 100644 +--- a/config.def.h ++++ b/config.def.h +@@ -5,6 +5,7 @@ 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 unsigned int fh = 5; /* focus window height */ + 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 a96f33c..5f93b7e 100644 +--- a/dwm.c ++++ b/dwm.c +@@ -267,7 +267,7 @@ static Clr **scheme; + static Display *dpy; + static Drw *drw; + static Monitor *mons, *selmon; +-static Window root, wmcheckwin; ++static Window root, wmcheckwin, focuswin; + + /* configuration, allows nested code to access above variables */ + #include "config.h" +@@ -487,6 +487,7 @@ cleanup(void) + drw_cur_free(drw, cursor[i]); + for (i = 0; i < LENGTH(colors); i++) + free(scheme[i]); ++ XDestroyWindow(dpy, focuswin); + XDestroyWindow(dpy, wmcheckwin); + drw_free(drw); + XSync(dpy, False); +@@ -787,6 +788,8 @@ expose(XEvent *e) + void + focus(Client *c) + { ++ XWindowChanges wc; ++ + if (!c || !ISVISIBLE(c)) + for (c = selmon->stack; c && !ISVISIBLE(c); c = c->snext); + if (selmon->sel && selmon->sel != c) +@@ -800,10 +803,16 @@ focus(Client *c) + attachstack(c); + grabbuttons(c, 1); + XSetWindowBorder(dpy, c->win, scheme[SchemeSel][ColBorder].pixel); ++ XMoveResizeWindow(dpy, focuswin, c->x, c->y, c->w + 2 * c->bw, fh); ++ XMoveResizeWindow(dpy, c->win, c->x, c->y + fh, c->w, c->h - fh); ++ wc.stack_mode = Above; ++ wc.sibling = c->win; ++ XConfigureWindow(dpy, focuswin, CWSibling|CWStackMode, &wc); + setfocus(c); + } else { + XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); + XDeleteProperty(dpy, root, netatom[NetActiveWindow]); ++ XMoveWindow(dpy, focuswin, 0, -fh); + } + selmon->sel = c; + drawbars(); +@@ -1150,8 +1159,8 @@ movemouse(const Arg *arg) + if (c->isfullscreen) /* no support moving fullscreen windows by mouse */ + return; + restack(selmon); +- ocx = c->x; +- ocy = c->y; ++ nx = ocx = c->x; ++ ny = ocy = c->y; + if (XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync, + None, cursor[CurMove]->cursor, CurrentTime) != GrabSuccess) + return; +@@ -1183,16 +1192,23 @@ movemouse(const Arg *arg) + if (!c->isfloating && selmon->lt[selmon->sellt]->arrange + && (abs(nx - c->x) > snap || abs(ny - c->y) > snap)) + togglefloating(NULL); +- if (!selmon->lt[selmon->sellt]->arrange || c->isfloating) +- resize(c, nx, ny, c->w, c->h, 1); ++ if (!selmon->lt[selmon->sellt]->arrange || c->isfloating) { ++ XMoveWindow(dpy, focuswin, nx, ny); ++ XMoveWindow(dpy, c->win, nx, ny + fh); ++ } + break; + } + } while (ev.type != ButtonRelease); ++ + XUngrabPointer(dpy, CurrentTime); ++ resize(c, nx, ny, c->w, c->h, 1); ++ + if ((m = recttomon(c->x, c->y, c->w, c->h)) != selmon) { + sendmon(c, m); + selmon = m; + focus(NULL); ++ } else { ++ focus(c); + } + } + +@@ -1306,7 +1322,9 @@ resizemouse(const Arg *arg) + return; + restack(selmon); + ocx = c->x; +- ocy = c->y; ++ ocy = c->y + fh; ++ nh = c->h; ++ nw = c->w; + if (XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync, + None, cursor[CurResize]->cursor, CurrentTime) != GrabSuccess) + return; +@@ -1333,18 +1351,25 @@ resizemouse(const Arg *arg) + && (abs(nw - c->w) > snap || abs(nh - c->h) > snap)) + togglefloating(NULL); + } +- if (!selmon->lt[selmon->sellt]->arrange || c->isfloating) +- resize(c, c->x, c->y, nw, nh, 1); ++ if (!selmon->lt[selmon->sellt]->arrange || c->isfloating) { ++ XMoveResizeWindow(dpy, focuswin, c->x, c->y, nw + 2 * c->bw, fh); ++ XMoveResizeWindow(dpy, c->win, c->x, c->y + fh, nw, nh - fh); ++ } + break; + } + } while (ev.type != ButtonRelease); ++ + XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->bw - 1, c->h + c->bw - 1); + XUngrabPointer(dpy, CurrentTime); ++ resize(c, c->x, c->y, nw, nh, 1); ++ + while (XCheckMaskEvent(dpy, EnterWindowMask, &ev)); + if ((m = recttomon(c->x, c->y, c->w, c->h)) != selmon) { + sendmon(c, m); + selmon = m; + focus(NULL); ++ } else { ++ focus(c); + } + } + +@@ -1358,8 +1383,10 @@ restack(Monitor *m) + drawbar(m); + if (!m->sel) + return; +- if (m->sel->isfloating || !m->lt[m->sellt]->arrange) ++ if (m->sel->isfloating || !m->lt[m->sellt]->arrange) { + XRaiseWindow(dpy, m->sel->win); ++ XRaiseWindow(dpy, focuswin); ++ } + if (m->lt[m->sellt]->arrange) { + wc.stack_mode = Below; + wc.sibling = m->barwin; +@@ -1534,7 +1561,7 @@ void + setup(void) + { + int i; +- XSetWindowAttributes wa; ++ XSetWindowAttributes wa, fwa; + Atom utf8string; + + /* clean up any zombies immediately */ +@@ -1585,6 +1612,14 @@ setup(void) + PropModeReplace, (unsigned char *) "dwm", 3); + XChangeProperty(dpy, root, netatom[NetWMCheck], XA_WINDOW, 32, + PropModeReplace, (unsigned char *) &wmcheckwin, 1); ++ /* focus window */ ++ fwa.override_redirect = 1; ++ fwa.background_pixel = scheme[SchemeSel][ColBorder].pixel; ++ focuswin = XCreateWindow(dpy, root, -1, -1, 1, 1, 0, DefaultDepth(dpy, screen), ++ InputOutput, DefaultVisual(dpy, screen), ++ CWOverrideRedirect|CWBackPixel, &fwa ++ ); ++ XMapWindow(dpy, focuswin); + /* EWMH support per view */ + XChangeProperty(dpy, root, netatom[NetSupported], XA_ATOM, 32, + PropModeReplace, (unsigned char *) netatom, NetLast); +@@ -1723,6 +1758,7 @@ togglefloating(const Arg *arg) + resize(selmon->sel, selmon->sel->x, selmon->sel->y, + selmon->sel->w, selmon->sel->h, 0); + arrange(selmon); ++ focus(NULL); + } + + void +@@ -1759,6 +1795,7 @@ unfocus(Client *c, int setfocus) + return; + grabbuttons(c, 0); + XSetWindowBorder(dpy, c->win, scheme[SchemeNorm][ColBorder].pixel); ++ XMoveResizeWindow(dpy, c->win, c->x, c->y, c->w, c->h); + if (setfocus) { + XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); + XDeleteProperty(dpy, root, netatom[NetActiveWindow]); +-- +2.45.2 +