From db6a8931a55982b95ed24ef57c8b71a6a3dafab6 Mon Sep 17 00:00:00 2001 From: Jack Bird Date: Wed, 4 Aug 2021 20:27:23 +0100 Subject: [PATCH] Focus master and return supported over all tags --- dwm.c | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/dwm.c b/dwm.c index 5e4d494..ee28f28 100644 --- a/dwm.c +++ b/dwm.c @@ -127,6 +127,7 @@ struct Monitor { Client *clients; Client *sel; Client *stack; + Client *tagmarked[32]; Monitor *next; Window barwin; const Layout *lt[2]; @@ -167,6 +168,7 @@ static void enternotify(XEvent *e); static void expose(XEvent *e); static void focus(Client *c); static void focusin(XEvent *e); +static void focusmaster(const Arg *arg); static void focusmon(const Arg *arg); static void focusstack(const Arg *arg); static Atom getatomprop(Client *c, Atom prop); @@ -660,6 +662,10 @@ detach(Client *c) { Client **tc; + for (int i = 1; i < LENGTH(tags); i++) + if (c == c->mon->tagmarked[i]) + c->mon->tagmarked[i] = NULL; + for (tc = &c->mon->clients; *tc && *tc != c; tc = &(*tc)->next); *tc = c->next; } @@ -816,6 +822,34 @@ focusin(XEvent *e) setfocus(selmon->sel); } +void +focusmaster(const Arg *arg) +{ + Client *master; + + if (selmon->nmaster > 1) + return; + if (!selmon->sel || (selmon->sel->isfullscreen && lockfullscreen)) + return; + + master = nexttiled(selmon->clients); + + if (!master) + return; + + int i; + for (i = 0; !(selmon->tagset[selmon->seltags] & 1 << i); i++); + i++; + + if (selmon->sel == master) { + if (selmon->tagmarked[i] && ISVISIBLE(selmon->tagmarked[i])) + focus(selmon->tagmarked[i]); + } else { + selmon->tagmarked[i] = selmon->sel; + focus(master); + } +} + void focusmon(const Arg *arg) { @@ -1203,6 +1237,11 @@ nexttiled(Client *c) void pop(Client *c) { + int i; + for (i = 0; !(selmon->tagset[selmon->seltags] & 1 << i); i++); + i++; + + c->mon->tagmarked[i] = nexttiled(c->mon->clients); detach(c); attach(c); focus(c); -- 2.32.0