From 03e167dbb70fbc967e310f95200bcd63f43cac72 Mon Sep 17 00:00:00 2001
From: Raphael Robatsch <raphael-git@tapesoftware.net>
Date: Sat, 13 Nov 2021 17:22:52 +0100
Subject: fullscreennotify: don't crash if called before map

SDL2 calls xdg_toplevel.unset_fullscreen() before the surface is
mapped. This causes a segfault in dwl because setfullscreen() expects
the surface to be mapped already.
Therefore, delay the setfullscreen call until the surface is mapped.
---
 dwl.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/dwl.c b/dwl.c
index 6303c25..f99fc9a 100644
--- a/dwl.c
+++ b/dwl.c
@@ -1042,7 +1042,13 @@ void
 fullscreennotify(struct wl_listener *listener, void *data)
 {
 	Client *c = wl_container_of(listener, c, fullscreen);
-	setfullscreen(c, !c->isfullscreen);
+	struct wlr_xdg_toplevel_set_fullscreen_event *event = data;
+	if (!c->mon) {
+		/* if the client is not mapped yet, let mapnotify() call setfullscreen() */
+		c->isfullscreen = event->fullscreen;
+		return;
+	}
+	setfullscreen(c, event->fullscreen);
 }
 
 Monitor *
@@ -1316,6 +1322,9 @@ mapnotify(struct wl_listener *listener, void *data)
 
 	/* Set initial monitor, tags, floating status, and focus */
 	applyrules(c);
+
+	if (c->isfullscreen)
+		setfullscreen(c, 1);
 }
 
 void
-- 
cgit v1.2.3