From 5a2d87fa6cd33bd170b6e98534fe966ffa17576b Mon Sep 17 00:00:00 2001
From: "Devin J. Pohly" <djpohly@gmail.com>
Date: Mon, 3 Aug 2020 12:44:47 -0500
Subject: add monocle layout

---
 config.def.h |  2 ++
 dwl.c        | 13 +++++++++++++
 2 files changed, 15 insertions(+)

diff --git a/config.def.h b/config.def.h
index 681cfba..8c10165 100644
--- a/config.def.h
+++ b/config.def.h
@@ -19,6 +19,7 @@ static const Layout layouts[] = {
 	/* symbol     arrange function */
 	{ "[]=",      tile },
 	{ "><>",      NULL },    /* no layout function means floating behavior */
+	{ "[M]",      monocle },
 };
 
 /* monitors */
@@ -65,6 +66,7 @@ static const Key keys[] = {
 	{ MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_c,          killclient,     {0} },
 	{ MODKEY,                    XKB_KEY_t,          setlayout,      {.v = &layouts[0]} },
 	{ MODKEY,                    XKB_KEY_f,          setlayout,      {.v = &layouts[1]} },
+	{ MODKEY,                    XKB_KEY_m,          setlayout,      {.v = &layouts[2]} },
 	{ MODKEY,                    XKB_KEY_space,      setlayout,      {0} },
 	{ MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_space,      togglefloating, {0} },
 	{ MODKEY,                    XKB_KEY_0,          view,           {.ui = ~0} },
diff --git a/dwl.c b/dwl.c
index 804adae..fbdfbe0 100644
--- a/dwl.c
+++ b/dwl.c
@@ -189,6 +189,7 @@ static void keypress(struct wl_listener *listener, void *data);
 static void keypressmod(struct wl_listener *listener, void *data);
 static void killclient(const Arg *arg);
 static void maprequest(struct wl_listener *listener, void *data);
+static void monocle(Monitor *m);
 static void motionabsolute(struct wl_listener *listener, void *data);
 static void motionnotify(uint32_t time);
 static void motionrelative(struct wl_listener *listener, void *data);
@@ -932,6 +933,18 @@ maprequest(struct wl_listener *listener, void *data)
 	applyrules(c);
 }
 
+void
+monocle(Monitor *m)
+{
+	Client *c;
+
+	wl_list_for_each(c, &clients, link) {
+		if (!VISIBLEON(c, m) || c->isfloating)
+			continue;
+		resize(c, m->w.x, m->w.y, m->w.width, m->w.height, 0);
+	}
+}
+
 void
 motionabsolute(struct wl_listener *listener, void *data)
 {
-- 
cgit v1.2.3