From 621d4c9173af194f703a6f197a50e597a8a20498 Mon Sep 17 00:00:00 2001
From: Stivvo <stivvo01@gmail.com>
Date: Sat, 5 Sep 2020 11:22:24 +0200
Subject: Toggle fullscreen on all clients

mod+e allows to toggle fullscreen any client, even those who don't
support it themselves
---
 config.def.h |  1 +
 dwl.c        | 21 ++++++++++++++++++---
 2 files changed, 19 insertions(+), 3 deletions(-)

diff --git a/config.def.h b/config.def.h
index 53021cf..d821a96 100644
--- a/config.def.h
+++ b/config.def.h
@@ -75,6 +75,7 @@ static const Key keys[] = {
 	{ 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_e,    		togglefullscreen, {0} },
 	{ MODKEY,                    XKB_KEY_0,          view,           {.ui = ~0} },
 	{ MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_parenright, tag,            {.ui = ~0} },
 	{ MODKEY,                    XKB_KEY_comma,      focusmon,       {.i = -1} },
diff --git a/dwl.c b/dwl.c
index c72533a..79a1116 100644
--- a/dwl.c
+++ b/dwl.c
@@ -232,6 +232,7 @@ static void setcursor(struct wl_listener *listener, void *data);
 static void setpsel(struct wl_listener *listener, void *data);
 static void setsel(struct wl_listener *listener, void *data);
 static void setfloating(Client *c, int floating);
+static void setfullscreen(Client *c, int fullscreen);
 static void setlayout(const Arg *arg);
 static void setmfact(const Arg *arg);
 static void setmon(Client *c, Monitor *m, unsigned int newtags);
@@ -242,6 +243,7 @@ static void tag(const Arg *arg);
 static void tagmon(const Arg *arg);
 static void tile(Monitor *m);
 static void togglefloating(const Arg *arg);
+static void togglefullscreen(const Arg *arg);
 static void toggletag(const Arg *arg);
 static void toggleview(const Arg *arg);
 static void unmapnotify(struct wl_listener *listener, void *data);
@@ -696,10 +698,16 @@ destroyxdeco(struct wl_listener *listener, void *data)
 }
 
 void
-fullscreenotify(struct wl_listener *listener, void *data)
+togglefullscreen(const Arg *arg)
 {
-	Client *c = wl_container_of(listener, c, fullscreen);
-	c->isfullscreen = !c->isfullscreen;
+	Client *sel = selclient();
+	setfullscreen(sel, !sel->isfullscreen);
+}
+
+void
+setfullscreen(Client *c, int fullscreen)
+{
+	c->isfullscreen = fullscreen;
 
 #ifdef XWAYLAND
 	if (c->type == X11Managed)
@@ -720,6 +728,13 @@ fullscreenotify(struct wl_listener *listener, void *data)
 	}
 }
 
+void
+fullscreenotify(struct wl_listener *listener, void *data)
+{
+	Client *c = wl_container_of(listener, c, fullscreen);
+	setfullscreen(c, !c->isfullscreen);
+}
+
 Monitor *
 dirtomon(int dir)
 {
-- 
cgit v1.2.3