port dwm "push" patch to dwl

Signed-off-by: Leonardo Hernández Hernández <leohdz172@proton.me>
This commit is contained in:
Devin J. Pohly 2021-03-04 00:45:50 -06:00 committed by Alex Denes
parent d24d4ced54
commit bebf2e81fc
Signed by: caskd
GPG Key ID: F92BA85F61F4C173

70
dwl.c
View File

@ -388,6 +388,12 @@ static void zoom(const Arg *arg);
static void bstack(Monitor *m);
static void bstackhoriz(Monitor *m);
/* push */
static Client *nexttiled(Client *sel);
static Client *prevtiled(Client *sel);
static void pushdown(const Arg *arg);
static void pushup(const Arg *arg);
/* variables */
static const char broken[] = "broken";
static pid_t child_pid = -1;
@ -3755,3 +3761,67 @@ bstackhoriz(Monitor *m) {
i++;
}
}
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);
}