mirror of https://github.com/bakkeby/patches
Removing zoomswap patch as per #8
parent
9d82eebbb0
commit
f8b620f485
@ -1,106 +0,0 @@
|
|||||||
From 29d0e6a66b9151410b81460dfe919542e9771936 Mon Sep 17 00:00:00 2001
|
|
||||||
From: bakkeby <bakkeby@gmail.com>
|
|
||||||
Date: Tue, 7 Apr 2020 11:45:42 +0200
|
|
||||||
Subject: [PATCH] zoomswap, swap positions when a window becomes the new master
|
|
||||||
|
|
||||||
The default behaviour in dwm when using zoom (i.e. moving a window to become the new master)
|
|
||||||
is to use pop to re-attach the window on top of the chain. This has the side effect of moving
|
|
||||||
every window down as well, resulting in every window on the screen changing position. The
|
|
||||||
zoomswap patch changes this behaviour so that the current master swaps position with the other
|
|
||||||
window that is to become the new master. Applying zoom on the current master will result in it
|
|
||||||
swapping back to the previous master.
|
|
||||||
|
|
||||||
This patch includes some slight alteration of code compared to the original.
|
|
||||||
|
|
||||||
Original author:
|
|
||||||
Jan Christoph Ebersbach - <jceb at e-jc dot de>
|
|
||||||
|
|
||||||
Refer to https://dwm.suckless.org/patches/zoomswap/
|
|
||||||
---
|
|
||||||
dwm.c | 46 +++++++++++++++++++++++++++++++++++++++++-----
|
|
||||||
1 file changed, 41 insertions(+), 5 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/dwm.c b/dwm.c
|
|
||||||
index 4465af1..49dfda2 100644
|
|
||||||
--- a/dwm.c
|
|
||||||
+++ b/dwm.c
|
|
||||||
@@ -185,6 +185,7 @@ static void motionnotify(XEvent *e);
|
|
||||||
static void movemouse(const Arg *arg);
|
|
||||||
static Client *nexttiled(Client *c);
|
|
||||||
static void pop(Client *);
|
|
||||||
+static Client *prevtiled(Client *c);
|
|
||||||
static void propertynotify(XEvent *e);
|
|
||||||
static void quit(const Arg *arg);
|
|
||||||
static Monitor *recttomon(int x, int y, int w, int h);
|
|
||||||
@@ -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;
|
|
||||||
@@ -1208,6 +1210,15 @@ pop(Client *c)
|
|
||||||
arrange(c->mon);
|
|
||||||
}
|
|
||||||
|
|
||||||
+Client *
|
|
||||||
+prevtiled(Client *c) {
|
|
||||||
+ Client *p;
|
|
||||||
+ if (!c || c == c->mon->clients)
|
|
||||||
+ return NULL;
|
|
||||||
+ for (p = c->mon->clients; p && p->next != c; p = p->next);
|
|
||||||
+ return p;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
void
|
|
||||||
propertynotify(XEvent *e)
|
|
||||||
{
|
|
||||||
@@ -2114,14 +2125,39 @@ 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))
|
|
||||||
+ || (selmon->sel && selmon->sel->isfloating) || !c)
|
|
||||||
return;
|
|
||||||
- if (c == nexttiled(selmon->clients))
|
|
||||||
- if (!c || !(c = nexttiled(c->next)))
|
|
||||||
- return;
|
|
||||||
- pop(c);
|
|
||||||
+
|
|
||||||
+ if (c == nexttiled(selmon->clients)) {
|
|
||||||
+ at = prevtiled(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 = prevtiled(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.19.1
|
|
||||||
|
|
Loading…
Reference in New Issue