91 lines
2 KiB
Diff
91 lines
2 KiB
Diff
|
From 8f662e7a556f94bda83ec724fb036e15b2badaac Mon Sep 17 00:00:00 2001
|
||
|
From: Jack Bird <jack.bird@durham.ac.uk>
|
||
|
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
|
||
|
|