From 8f662e7a556f94bda83ec724fb036e15b2badaac Mon Sep 17 00:00:00 2001 From: Jack Bird Date: Fri, 27 Aug 2021 01:14:44 +0100 Subject: [PATCH] 6.2 focusmaster return --- dwm.c | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/dwm.c b/dwm.c index 4465af1..5219cbd 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 int getrootptr(int *x, int *y); @@ -659,6 +661,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; } @@ -815,6 +821,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) { @@ -1202,6 +1236,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.33.0