commit dbd83fdd5feba20c9e6a972ee647e2922cf409ef
Author: Georgios Oxinos <[email protected]>
Date:   Sun Jan 24 17:01:46 2021 +0100

    [dwm][patch] patch that allows disabling focus on floating clients

diff --git 
a/dwm.suckless.org/patches/cantogglefloating/dwm-cantogglefloating-20210124-e752d68.diff
 
b/dwm.suckless.org/patches/cantogglefloating/dwm-cantogglefloating-20210124-e752d68.diff
new file mode 100644
index 00000000..463ba3fa
--- /dev/null
+++ 
b/dwm.suckless.org/patches/cantogglefloating/dwm-cantogglefloating-20210124-e752d68.diff
@@ -0,0 +1,148 @@
+From e752d6806ff8bb4fa23435b448affce3b0a40838 Mon Sep 17 00:00:00 2001
+From: Georgios Oxinos <[email protected]>
+Date: Sun, 24 Jan 2021 16:05:58 +0100
+Subject: [PATCH] [dwm][patch] patch that allows disabling focus on floating
+ clients
+
+---
+ config.def.h |  1 +
+ dwm.c        | 63 +++++++++++++++++++++++++++++++++++++++++++++++-----
+ 2 files changed, 59 insertions(+), 5 deletions(-)
+
+diff --git a/config.def.h b/config.def.h
+index 1c0b587..005fb5d 100644
+--- a/config.def.h
++++ b/config.def.h
+@@ -70,6 +70,7 @@ static Key keys[] = {
+       { MODKEY,                       XK_d,      incnmaster,     {.i = -1 } },
+       { MODKEY,                       XK_h,      setmfact,       {.f = -0.05} 
},
+       { MODKEY,                       XK_l,      setmfact,       {.f = +0.05} 
},
++  { MODKEY,                       XK_s,      togglecanfocusfloating,   {0} },
+       { MODKEY,                       XK_Return, zoom,           {0} },
+       { MODKEY,                       XK_Tab,    view,           {0} },
+       { MODKEY|ShiftMask,             XK_c,      killclient,     {0} },
+diff --git a/dwm.c b/dwm.c
+index 4465af1..426262e 100644
+--- a/dwm.c
++++ b/dwm.c
+@@ -92,7 +92,7 @@ struct Client {
+       int basew, baseh, incw, inch, maxw, maxh, minw, minh;
+       int bw, oldbw;
+       unsigned int tags;
+-      int isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen;
++      int isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen, 
cantfocus;
+       Client *next;
+       Client *snext;
+       Monitor *mon;
+@@ -138,6 +138,7 @@ typedef struct {
+       const char *title;
+       unsigned int tags;
+       int isfloating;
++  int cantfocus;
+       int monitor;
+ } Rule;
+ 
+@@ -191,6 +192,7 @@ static Monitor *recttomon(int x, int y, int w, int h);
+ static void resize(Client *c, int x, int y, int w, int h, int interact);
+ static void resizeclient(Client *c, int x, int y, int w, int h);
+ static void resizemouse(const Arg *arg);
++static void resetcanfocusfloating();
+ static void restack(Monitor *m);
+ static void run(void);
+ static void scan(void);
+@@ -211,6 +213,7 @@ static void tagmon(const Arg *arg);
+ static void tile(Monitor *);
+ static void togglebar(const Arg *arg);
+ static void togglefloating(const Arg *arg);
++static void togglecanfocusfloating(const Arg *arg);
+ static void toggletag(const Arg *arg);
+ static void toggleview(const Arg *arg);
+ static void unfocus(Client *c, int setfocus);
+@@ -788,6 +791,8 @@ focus(Client *c)
+       if (selmon->sel && selmon->sel != c)
+               unfocus(selmon->sel, 0);
+       if (c) {
++    if (c->cantfocus)
++      return;
+               if (c->mon != selmon)
+                       selmon = c->mon;
+               if (c->isurgent)
+@@ -837,16 +842,16 @@ focusstack(const Arg *arg)
+       if (!selmon->sel)
+               return;
+       if (arg->i > 0) {
+-              for (c = selmon->sel->next; c && !ISVISIBLE(c); c = c->next);
++              for (c = selmon->sel->next; c && (!ISVISIBLE(c) || 
c->cantfocus); c = c->next);
+               if (!c)
+-                      for (c = selmon->clients; c && !ISVISIBLE(c); c = 
c->next);
++                      for (c = selmon->clients; c && (!ISVISIBLE(c) || 
c->cantfocus); c = c->next);
+       } else {
+               for (i = selmon->clients; i != selmon->sel; i = i->next)
+-                      if (ISVISIBLE(i))
++      if (ISVISIBLE(i) && !i->cantfocus)
+                               c = i;
+               if (!c)
+                       for (; i; i = i->next)
+-                              if (ISVISIBLE(i))
++        if (ISVISIBLE(i) && !i->cantfocus)
+                                       c = i;
+       }
+       if (c) {
+@@ -1716,6 +1721,54 @@ togglefloating(const Arg *arg)
+       if (selmon->sel->isfloating)
+               resize(selmon->sel, selmon->sel->x, selmon->sel->y,
+                       selmon->sel->w, selmon->sel->h, 0);
++
++  resetcanfocusfloating();
++
++      arrange(selmon);
++}
++
++void
++resetcanfocusfloating()
++{
++      unsigned int i, n;
++      Client *c;
++
++      for (n = 0, c = selmon->clients->next; c; c = c->next, n++);
++      if (n == 0)
++              return;
++
++      for (i = 0, c = selmon->clients->next; c; c = c->next, i++)
++    if (c->isfloating)
++      c->cantfocus = 0;
++
++      arrange(selmon);
++}
++
++void
++togglecanfocusfloating(const Arg *arg)
++{
++      unsigned int i, n, y;
++      Client *c, *tmp;
++
++      for (n = 0, c = selmon->clients->next; c; c = c->next, n++);
++      if (n == 0)
++              return;
++
++      for (i = 0, y = 0, c = selmon->clients->next; c; c = c->next, i++)
++    if (c->isfloating) {
++      c->cantfocus = !c->cantfocus;
++      y++;
++    }
++
++  if (y && selmon->sel->isfloating) {
++    tmp = selmon->clients;
++    while (!tmp || tmp->isfloating) {
++      tmp = tmp->next;
++    }
++
++    focus(tmp);
++  }
++
+       arrange(selmon);
+ }
+ 
+-- 
+2.27.0
+
diff --git a/dwm.suckless.org/patches/cantogglefloating/index.md 
b/dwm.suckless.org/patches/cantogglefloating/index.md
new file mode 100644
index 00000000..834000b9
--- /dev/null
+++ b/dwm.suckless.org/patches/cantogglefloating/index.md
@@ -0,0 +1,16 @@
+cantogglefloating
+============
+
+Description
+-----------
+Patch that allows disabling focus on floating clients.
+
+Inspired by [canfocusrule](https://dwm.suckless.org/patches/canfocusrule/) 
patch
+
+Download
+--------
+* 
[dwm-cantogglefloating-20210124-e752d68.diff](dwm-cantogglefloating-20210124-e752d68.diff)
+
+Authors
+-------
+* Georgios Oxinos - <[email protected]>


Reply via email to