From 6e883f1bcf4342143f03da1d06ca4fa22bcc0368 Mon Sep 17 00:00:00 2001 From: Joe Date: Thu, 25 Aug 2022 16:37:07 +0200 Subject: up --- applied/dwm-zoomswap-6.2.diff | 95 +++++++++++++++++++++++++++++++++++++++++++ dwm-zoomswap-6.2.diff | 95 ------------------------------------------- 2 files changed, 95 insertions(+), 95 deletions(-) create mode 100644 applied/dwm-zoomswap-6.2.diff delete mode 100644 dwm-zoomswap-6.2.diff diff --git a/applied/dwm-zoomswap-6.2.diff b/applied/dwm-zoomswap-6.2.diff new file mode 100644 index 0000000..3c658e6 --- /dev/null +++ b/applied/dwm-zoomswap-6.2.diff @@ -0,0 +1,95 @@ +From 3867ef5a68e15a4faff377ddbc8371853de4a800 Mon Sep 17 00:00:00 2001 +From: aleks +Date: Sat, 19 Oct 2019 00:56:21 +0200 +Subject: [PATCH] Put master to exact position of zoomed client + +The default behaviour when zooming a client is to put the previous +master on top of the client-stack. This patch puts the master to the +exact position of the zoomed client in the stack. +--- + dwm.c | 44 ++++++++++++++++++++++++++++++++++++++++---- + 1 file changed, 40 insertions(+), 4 deletions(-) + +diff --git a/dwm.c b/dwm.c +index 4465af1..1719b36 100644 +--- a/dwm.c ++++ b/dwm.c +@@ -165,6 +165,7 @@ static void drawbar(Monitor *m); + static void drawbars(void); + static void enternotify(XEvent *e); + static void expose(XEvent *e); ++static Client *findbefore(Client *c); + static void focus(Client *c); + static void focusin(XEvent *e); + static void focusmon(const Arg *arg); +@@ -235,6 +236,7 @@ static int xerrorstart(Display *dpy, XErrorEvent *ee); + static void zoom(const Arg *arg); + + /* variables */ ++static Client *prevzoom = NULL; + static const char broken[] = "broken"; + static char stext[256]; + static int screen; +@@ -780,6 +782,16 @@ expose(XEvent *e) + drawbar(m); + } + ++Client * ++findbefore(Client *c) ++{ ++ Client *tmp; ++ if (c == selmon->clients) ++ return NULL; ++ for (tmp = selmon->clients; tmp && tmp->next != c; tmp = tmp->next); ++ return tmp; ++} ++ + void + focus(Client *c) + { +@@ -2114,14 +2126,38 @@ void + zoom(const Arg *arg) + { + Client *c = selmon->sel; ++ Client *at = NULL, *cold, *cprevious = NULL; + + if (!selmon->lt[selmon->sellt]->arrange + || (selmon->sel && selmon->sel->isfloating)) + return; +- if (c == nexttiled(selmon->clients)) +- if (!c || !(c = nexttiled(c->next))) +- return; +- pop(c); ++ if (c == nexttiled(selmon->clients)) { ++ at = findbefore(prevzoom); ++ if (at) ++ cprevious = nexttiled(at->next); ++ if (!cprevious || cprevious != prevzoom) { ++ prevzoom = NULL; ++ if (!c || !(c = nexttiled(c->next))) ++ return; ++ } else ++ c = cprevious; ++ } ++ cold = nexttiled(selmon->clients); ++ if (c != cold && !at) ++ at = findbefore(c); ++ detach(c); ++ attach(c); ++ /* swap windows instead of pushing the previous one down */ ++ if (c != cold && at) { ++ prevzoom = cold; ++ if (cold && at != cold) { ++ detach(cold); ++ cold->next = at->next; ++ at->next = cold; ++ } ++ } ++ focus(c); ++ arrange(c->mon); + } + + int +-- +2.23.0 + diff --git a/dwm-zoomswap-6.2.diff b/dwm-zoomswap-6.2.diff deleted file mode 100644 index 3c658e6..0000000 --- a/dwm-zoomswap-6.2.diff +++ /dev/null @@ -1,95 +0,0 @@ -From 3867ef5a68e15a4faff377ddbc8371853de4a800 Mon Sep 17 00:00:00 2001 -From: aleks -Date: Sat, 19 Oct 2019 00:56:21 +0200 -Subject: [PATCH] Put master to exact position of zoomed client - -The default behaviour when zooming a client is to put the previous -master on top of the client-stack. This patch puts the master to the -exact position of the zoomed client in the stack. ---- - dwm.c | 44 ++++++++++++++++++++++++++++++++++++++++---- - 1 file changed, 40 insertions(+), 4 deletions(-) - -diff --git a/dwm.c b/dwm.c -index 4465af1..1719b36 100644 ---- a/dwm.c -+++ b/dwm.c -@@ -165,6 +165,7 @@ static void drawbar(Monitor *m); - static void drawbars(void); - static void enternotify(XEvent *e); - static void expose(XEvent *e); -+static Client *findbefore(Client *c); - static void focus(Client *c); - static void focusin(XEvent *e); - static void focusmon(const Arg *arg); -@@ -235,6 +236,7 @@ static int xerrorstart(Display *dpy, XErrorEvent *ee); - static void zoom(const Arg *arg); - - /* variables */ -+static Client *prevzoom = NULL; - static const char broken[] = "broken"; - static char stext[256]; - static int screen; -@@ -780,6 +782,16 @@ expose(XEvent *e) - drawbar(m); - } - -+Client * -+findbefore(Client *c) -+{ -+ Client *tmp; -+ if (c == selmon->clients) -+ return NULL; -+ for (tmp = selmon->clients; tmp && tmp->next != c; tmp = tmp->next); -+ return tmp; -+} -+ - void - focus(Client *c) - { -@@ -2114,14 +2126,38 @@ void - zoom(const Arg *arg) - { - Client *c = selmon->sel; -+ Client *at = NULL, *cold, *cprevious = NULL; - - if (!selmon->lt[selmon->sellt]->arrange - || (selmon->sel && selmon->sel->isfloating)) - return; -- if (c == nexttiled(selmon->clients)) -- if (!c || !(c = nexttiled(c->next))) -- return; -- pop(c); -+ if (c == nexttiled(selmon->clients)) { -+ at = findbefore(prevzoom); -+ if (at) -+ cprevious = nexttiled(at->next); -+ if (!cprevious || cprevious != prevzoom) { -+ prevzoom = NULL; -+ if (!c || !(c = nexttiled(c->next))) -+ return; -+ } else -+ c = cprevious; -+ } -+ cold = nexttiled(selmon->clients); -+ if (c != cold && !at) -+ at = findbefore(c); -+ detach(c); -+ attach(c); -+ /* swap windows instead of pushing the previous one down */ -+ if (c != cold && at) { -+ prevzoom = cold; -+ if (cold && at != cold) { -+ detach(cold); -+ cold->next = at->next; -+ at->next = cold; -+ } -+ } -+ focus(c); -+ arrange(c->mon); - } - - int --- -2.23.0 - -- cgit v1.2.3