summaryrefslogtreecommitdiff
path: root/dwl.c
diff options
context:
space:
mode:
Diffstat (limited to 'dwl.c')
-rw-r--r--dwl.c30
1 files changed, 30 insertions, 0 deletions
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[])
{