From 7b608da8c5b159c9a905fb3be3a5cde34ea3adc7 Mon Sep 17 00:00:00 2001 From: Guido Cella Date: Fri, 24 Jul 2020 17:12:41 +0200 Subject: [PATCH] Add zoom --- config.def.h | 1 + dwl.c | 30 ++++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/config.def.h b/config.def.h index 41b652f..e9ced7c 100644 --- a/config.def.h +++ b/config.def.h @@ -59,6 +59,7 @@ static const Key keys[] = { { MODKEY, XKB_KEY_d, incnmaster, {.i = -1} }, { MODKEY, XKB_KEY_h, setmfact, {.f = -0.05} }, { MODKEY, XKB_KEY_l, setmfact, {.f = +0.05} }, + { MODKEY, XKB_KEY_Return, zoom, {0} }, { MODKEY, XKB_KEY_Tab, view, {0} }, { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_c, killclient, {0} }, { MODKEY, XKB_KEY_t, setlayout, {.v = &layouts[0]} }, diff --git a/dwl.c b/dwl.c index e4ab735..b5478a7 100644 --- a/dwl.c +++ b/dwl.c @@ -211,6 +211,7 @@ static void unmapnotify(struct wl_listener *listener, void *data); static void view(const Arg *arg); static Client *xytoclient(double x, double y); static Monitor *xytomon(double x, double y); +static void zoom(const Arg *arg); /* variables */ static const char broken[] = "broken"; @@ -1636,6 +1637,35 @@ xytomon(double x, double y) return o ? o->data : NULL; } +void +zoom(const Arg *arg) +{ + unsigned int n = 0; + Client *c, *sel = selclient(); + + if (!sel || !selmon->lt[selmon->sellt]->arrange || sel->isfloating) + return; + + wl_list_for_each(c, &clients, link) + if (VISIBLEON(c, selmon) && !c->isfloating) { + if (++n == 1 && c == sel) + sel = NULL; + else if (n == 2) { + if (!sel) + sel = c; + break; + } + } + + if (n == 1) + return; + + wl_list_remove(&sel->link); + wl_list_insert(&clients, &sel->link); + focusclient(sel, NULL, 1); + arrange(selmon); +} + int main(int argc, char *argv[]) {