zoom swap patch
This commit is contained in:
parent
523b003633
commit
76e143154a
42
dwm.c
42
dwm.c
@ -189,6 +189,7 @@ static void drawbar(Monitor *m);
|
|||||||
static void drawbars(void);
|
static void drawbars(void);
|
||||||
static void enternotify(XEvent *e);
|
static void enternotify(XEvent *e);
|
||||||
static void expose(XEvent *e);
|
static void expose(XEvent *e);
|
||||||
|
static Client *findbefore(Client *c);
|
||||||
static void focus(Client *c);
|
static void focus(Client *c);
|
||||||
static void focusin(XEvent *e);
|
static void focusin(XEvent *e);
|
||||||
static void focusmon(const Arg *arg);
|
static void focusmon(const Arg *arg);
|
||||||
@ -279,6 +280,7 @@ static Client *termforwin(const Client *c);
|
|||||||
static pid_t winpid(Window w);
|
static pid_t winpid(Window w);
|
||||||
|
|
||||||
/* variables */
|
/* variables */
|
||||||
|
static Client *prevzoom = NULL;
|
||||||
static const char broken[] = "broken";
|
static const char broken[] = "broken";
|
||||||
static char stext[256];
|
static char stext[256];
|
||||||
static char estextl[256];
|
static char estextl[256];
|
||||||
@ -980,6 +982,16 @@ expose(XEvent *e)
|
|||||||
drawbar(m);
|
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
|
void
|
||||||
focus(Client *c)
|
focus(Client *c)
|
||||||
{
|
{
|
||||||
@ -2910,12 +2922,38 @@ void
|
|||||||
zoom(const Arg *arg)
|
zoom(const Arg *arg)
|
||||||
{
|
{
|
||||||
Client *c = selmon->sel;
|
Client *c = selmon->sel;
|
||||||
|
Client *at = NULL, *cold, *cprevious = NULL;
|
||||||
|
|
||||||
if (!selmon->lt[selmon->sellt]->arrange || !c || c->isfloating)
|
if (!selmon->lt[selmon->sellt]->arrange || !c || c->isfloating)
|
||||||
return;
|
return;
|
||||||
if (c == nexttiled(selmon->clients) && !(c = nexttiled(c->next)))
|
|
||||||
|
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;
|
return;
|
||||||
pop(c);
|
} 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
|
int
|
||||||
|
95
patches/behavior/dwm-zoomswap-6.2.diff
Normal file
95
patches/behavior/dwm-zoomswap-6.2.diff
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
From 3867ef5a68e15a4faff377ddbc8371853de4a800 Mon Sep 17 00:00:00 2001
|
||||||
|
From: aleks <aleks.stier@icloud.com>
|
||||||
|
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
|
||||||
|
|
Loading…
Reference in New Issue
Block a user