From 2d9d758c8dec083178ff78b154da784b97260bd1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Leonardo=20Hern=C3=A1ndez=20Hern=C3=A1ndez?=
 <leohdz172@protonmail.com>
Date: Sat, 15 Oct 2022 15:12:37 -0500
Subject: [PATCH] stop trying resize clients during commitnotify()

instead resize them in configurex11()
---
 dwl.c | 28 ++++++++++------------------
 1 file changed, 10 insertions(+), 18 deletions(-)

diff --git a/dwl.c b/dwl.c
index 2f0d9a6..c7fe999 100644
--- a/dwl.c
+++ b/dwl.c
@@ -836,12 +836,6 @@ void
 commitnotify(struct wl_listener *listener, void *data)
 {
 	Client *c = wl_container_of(listener, c, commit);
-	struct wlr_box box = {0};
-	client_get_geometry(c, &box);
-
-	if (c->mon && !wlr_box_empty(&box) && (box.width != c->geom.width - 2 * c->bw
-			|| box.height != c->geom.height - 2 * c->bw))
-		arrange(c->mon);
 
 	/* mark a pending resize as completed */
 	if (c->resize && (c->resize <= c->surface.xdg->current.configure_serial
@@ -1033,6 +1027,7 @@ createnotify(struct wl_listener *listener, void *data)
 	LISTEN(&xdg_surface->events.map, &c->map, mapnotify);
 	LISTEN(&xdg_surface->events.unmap, &c->unmap, unmapnotify);
 	LISTEN(&xdg_surface->events.destroy, &c->destroy, destroynotify);
+	LISTEN(&xdg_surface->surface->events.commit, &c->commit, commitnotify);
 	LISTEN(&xdg_surface->toplevel->events.set_title, &c->set_title, updatetitle);
 	LISTEN(&xdg_surface->toplevel->events.request_fullscreen, &c->fullscreen,
 			fullscreennotify);
@@ -1139,8 +1134,9 @@ destroynotify(struct wl_listener *listener, void *data)
 		wl_list_remove(&c->configure.link);
 		wl_list_remove(&c->set_hints.link);
 		wl_list_remove(&c->activate.link);
-	}
+	} else
 #endif
+	{ wl_list_remove(&c->commit.link); }
 	free(c);
 }
 
@@ -1428,14 +1424,8 @@ mapnotify(struct wl_listener *listener, void *data)
 	c->scene_surface = c->type == XDGShell
 			? wlr_scene_xdg_surface_create(c->scene, c->surface.xdg)
 			: wlr_scene_subsurface_tree_create(c->scene, client_surface(c));
-	if (client_surface(c)) {
+	if (client_surface(c))
 		client_surface(c)->data = c->scene;
-		/* Ideally we should do this in createnotify{,x11} but at that moment
-		* wlr_xwayland_surface doesn't have wlr_surface yet
-		*/
-		LISTEN(&client_surface(c)->events.commit, &c->commit, commitnotify);
-
-	}
 	c->scene->data = c->scene_surface->data = c;
 
 #ifdef XWAYLAND
@@ -2416,7 +2406,6 @@ unmapnotify(struct wl_listener *listener, void *data)
 		wl_list_remove(&c->flink);
 	}
 
-	wl_list_remove(&c->commit.link);
 	wlr_scene_node_destroy(c->scene);
 	printstatus();
 	motionnotify(0);
@@ -2592,9 +2581,12 @@ void
 configurex11(struct wl_listener *listener, void *data)
 {
 	Client *c = wl_container_of(listener, c, configure);
-	struct wlr_xwayland_surface_configure_event *event = data;
-	wlr_xwayland_surface_configure(c->surface.xwayland,
-			event->x, event->y, event->width, event->height);
+	struct wlr_xwayland_surface_configure_event *e = data;
+	if (c->isfloating)
+		resize(c, (struct wlr_box){.x = e->x, .y = e->y,
+				.width = e->width, .height = e->height}, 0);
+	else
+		arrange(c->mon);
 }
 
 void