sites

public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log | Files | Refs

commit 07e360f4d5e035c8cef680a9faf043c9243f277a
parent 111776ee9e137fd6244ea1c253fe8cde14ce681c
Author: Georgios Oxinos <oxinosg@gmail.com>
Date:   Mon, 25 Jan 2021 10:29:22 +0100

[dwm][patch][cantogglefloating] fix for master client getting ignored

Diffstat:
Ddwm.suckless.org/patches/cantogglefloating/dwm-cantogglefloating-20210124-e752d68.diff | 148-------------------------------------------------------------------------------
Adwm.suckless.org/patches/cantogglefloating/dwm-cantogglefloating-20210125-fc30936.diff | 148+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mdwm.suckless.org/patches/cantogglefloating/index.md | 2+-
3 files changed, 149 insertions(+), 149 deletions(-)

diff --git a/dwm.suckless.org/patches/cantogglefloating/dwm-cantogglefloating-20210124-e752d68.diff b/dwm.suckless.org/patches/cantogglefloating/dwm-cantogglefloating-20210124-e752d68.diff @@ -1,148 +0,0 @@ -From e752d6806ff8bb4fa23435b448affce3b0a40838 Mon Sep 17 00:00:00 2001 -From: Georgios Oxinos <georgios.oxinos.extern@elinvar.de> -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/dwm-cantogglefloating-20210125-fc30936.diff b/dwm.suckless.org/patches/cantogglefloating/dwm-cantogglefloating-20210125-fc30936.diff @@ -0,0 +1,148 @@ +From fc309367ecf8388a77f899d7f007524a84ed3ab7 Mon Sep 17 00:00:00 2001 +From: Georgios Oxinos <georgios.oxinos.extern@elinvar.de> +Date: Mon, 25 Jan 2021 10:24:45 +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..d6417d6 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; c; c = c->next, n++); ++ if (n == 0) ++ return; ++ ++ for (i = 0, c = selmon->clients; 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; c; c = c->next, n++); ++ if (n == 0) ++ return; ++ ++ for (i = 0, y = 0, c = selmon->clients; 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 @@ -9,7 +9,7 @@ Inspired by [canfocusrule](https://dwm.suckless.org/patches/canfocusrule/) patch Download -------- -* [dwm-cantogglefloating-20210124-e752d68.diff](dwm-cantogglefloating-20210124-e752d68.diff) +* [dwm-cantogglefloating-20210125-fc30936.diff](dwm-cantogglefloating-20210125-fc30936.diff) Authors -------