From 2d9d758c8dec083178ff78b154da784b97260bd1 Mon Sep 17 00:00:00 2001 From: Leonardo Hernández Hernández Date: Sat, 15 Oct 2022 15:12:37 -0500 Subject: 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 -- cgit v1.2.3