aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRaphael Robatsch <raphael-git@tapesoftware.net>2021-11-13 17:22:52 +0100
committerLeonardo Hernandez Hernandez <leohdz172@protonmail.com>2021-11-13 22:19:55 -0600
commit03e167dbb70fbc967e310f95200bcd63f43cac72 (patch)
treeede682b8748adf71881d46f69279d98821e3dd8b
parent2d9740c2fc481d42eb0deace797553172cc234d9 (diff)
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.
-rw-r--r--dwl.c11
1 files changed, 10 insertions, 1 deletions
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