From 74ba3dcaa28fd7eb1fca48851d640ec322093de2 Mon Sep 17 00:00:00 2001 From: "Devin J. Pohly" Date: Thu, 4 Mar 2021 00:45:50 -0600 Subject: [PATCH] port dwm "push" patch to dwl MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Leonardo Hernández Hernández --- Makefile | 3 +-- dwl.c | 2 ++ push.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ push.h | 4 ++++ 4 files changed, 70 insertions(+), 2 deletions(-) create mode 100644 push.c create mode 100644 push.h diff --git a/Makefile b/Makefile index e3e64262..447191e8 100644 --- a/Makefile +++ b/Makefile @@ -16,8 +16,7 @@ LDLIBS = `$(PKG_CONFIG) --libs $(PKGS)` $(LIBS) all: dwl dwl: dwl.o util.o $(CC) dwl.o util.o $(DWLCFLAGS) $(LDFLAGS) $(LDLIBS) -o $@ -dwl.o: dwl.c client.h config.h config.mk cursor-shape-v1-protocol.h pointer-constraints-unstable-v1-protocol.h wlr-layer-shell-unstable-v1-protocol.h xdg-shell-protocol.h -util.o: util.c util.h +dwl.o: dwl.c push.h client.h config.h config.mk cursor-shape-v1-protocol.h pointer-constraints-unstable-v1-protocol.h wlr-layer-shell-unstable-v1-protocol.h xdg-shell-protocol.h # wayland-scanner is a tool which generates C headers and rigging for Wayland # protocols, which are specified in XML. wlroots requires you to rig these up diff --git a/dwl.c b/dwl.c index 6f041a0d..60b65794 100644 --- a/dwl.c +++ b/dwl.c @@ -421,7 +421,9 @@ static xcb_atom_t netatom[NetLast]; #endif /* configuration, allows nested code to access above variables */ +#include "push.h" #include "config.h" +#include "push.c" /* attempt to encapsulate suck into one file */ #include "client.h" diff --git a/push.c b/push.c new file mode 100644 index 00000000..323c317e --- /dev/null +++ b/push.c @@ -0,0 +1,63 @@ +static Client * +nexttiled(Client *sel) { + Client *c; + wl_list_for_each(c, &sel->link, link) { + if (&c->link == &clients) + break; /* don't wrap */ + if (!c->isfloating && VISIBLEON(c, selmon)) + return c; + } + return NULL; +} + +static Client * +prevtiled(Client *sel) { + Client *c; + wl_list_for_each_reverse(c, &sel->link, link) { + if (&c->link == &clients) + break; /* don't wrap */ + if (!c->isfloating && VISIBLEON(c, selmon)) + return c; + } + return NULL; +} + +static void +pushup(const Arg *arg) { + Client *sel = focustop(selmon); + Client *c; + + if(!sel || sel->isfloating) + return; + if((c = prevtiled(sel))) { + /* attach before c */ + wl_list_remove(&sel->link); + wl_list_insert(c->link.prev, &sel->link); + } else { + /* move to the end */ + wl_list_remove(&sel->link); + wl_list_insert(clients.prev, &sel->link); + } + focusclient(sel, 1); + arrange(selmon); +} + +static void +pushdown(const Arg *arg) { + Client *sel = focustop(selmon); + Client *c; + + if(!sel || sel->isfloating) + return; + if((c = nexttiled(sel))) { + /* attach after c */ + wl_list_remove(&sel->link); + wl_list_insert(&c->link, &sel->link); + } else { + /* move to the front */ + wl_list_remove(&sel->link); + wl_list_insert(&clients, &sel->link); + } + focusclient(sel, 1); + arrange(selmon); +} diff --git a/push.h b/push.h new file mode 100644 index 00000000..59c0f80e --- /dev/null +++ b/push.h @@ -0,0 +1,4 @@ +static Client *nexttiled(Client *sel); +static Client *prevtiled(Client *sel); +static void pushdown(const Arg *arg); +static void pushup(const Arg *arg); -- 2.45.2