From 5d0faa23337c632d32849e264f8ba8c46e0cc058 Mon Sep 17 00:00:00 2001 From: John Lindgren Date: Sat, 23 Jul 2022 11:20:34 -0400 Subject: [PATCH] xwayland: Process unmanaged client configure requests more quickly This is a similar fix to 065c37d3f5ee but for unmanaged windows. The issue could be seen for example when moving the undocked Search Tool window in Audacious. For unmanaged windows, we don't track any pending move/resizes, so just process all client configure requests immediately. --- include/labwc.h | 2 -- src/xwayland-unmanaged.c | 31 +++---------------------------- 2 files changed, 3 insertions(+), 30 deletions(-) diff --git a/include/labwc.h b/include/labwc.h index fd738c15..fab99852 100644 --- a/include/labwc.h +++ b/include/labwc.h @@ -368,12 +368,10 @@ struct xwayland_unmanaged { struct wlr_xwayland_surface *xwayland_surface; struct wlr_scene_node *node; struct wl_list link; - int lx, ly; struct wl_listener request_activate; struct wl_listener request_configure; /* struct wl_listener request_fullscreen; */ - struct wl_listener commit; struct wl_listener set_geometry; struct wl_listener map; struct wl_listener unmap; diff --git a/src/xwayland-unmanaged.c b/src/xwayland-unmanaged.c index 4c68223b..05c2ffc2 100644 --- a/src/xwayland-unmanaged.c +++ b/src/xwayland-unmanaged.c @@ -10,18 +10,7 @@ unmanaged_handle_request_configure(struct wl_listener *listener, void *data) struct wlr_xwayland_surface_configure_event *ev = data; wlr_xwayland_surface_configure(xsurface, ev->x, ev->y, ev->width, ev->height); -} - -static void -unmanaged_handle_commit(struct wl_listener *listener, void *data) -{ - struct xwayland_unmanaged *unmanaged = - wl_container_of(listener, unmanaged, commit); - struct wlr_xwayland_surface *xsurface = unmanaged->xwayland_surface; - unmanaged->lx = xsurface->x; - unmanaged->ly = xsurface->y; - wlr_scene_node_set_position(unmanaged->node, - unmanaged->lx, unmanaged->ly); + wlr_scene_node_set_position(unmanaged->node, ev->x, ev->y); } static void @@ -30,14 +19,7 @@ unmanaged_handle_set_geometry(struct wl_listener *listener, void *data) struct xwayland_unmanaged *unmanaged = wl_container_of(listener, unmanaged, set_geometry); struct wlr_xwayland_surface *xsurface = unmanaged->xwayland_surface; - - if (xsurface->x != unmanaged->lx || xsurface->y != unmanaged->ly) { - wlr_log(WLR_DEBUG, "xwayland-unmanaged surface has moved"); - unmanaged->lx = xsurface->x; - unmanaged->ly = xsurface->y; - wlr_scene_node_set_position(unmanaged->node, - unmanaged->lx, unmanaged->ly); - } + wlr_scene_node_set_position(unmanaged->node, xsurface->x, xsurface->y); } void @@ -50,14 +32,9 @@ unmanaged_handle_map(struct wl_listener *listener, void *data) wl_list_insert(unmanaged->server->unmanaged_surfaces.prev, &unmanaged->link); - wl_signal_add(&xsurface->surface->events.commit, &unmanaged->commit); - unmanaged->commit.notify = unmanaged_handle_commit; - wl_signal_add(&xsurface->events.set_geometry, &unmanaged->set_geometry); unmanaged->set_geometry.notify = unmanaged_handle_set_geometry; - unmanaged->lx = xsurface->x; - unmanaged->ly = xsurface->y; if (wlr_xwayland_or_surface_wants_focus(xsurface)) { seat_focus_surface(&unmanaged->server->seat, xsurface->surface); } @@ -66,8 +43,7 @@ unmanaged_handle_map(struct wl_listener *listener, void *data) unmanaged->node = &wlr_scene_surface_create( unmanaged->server->unmanaged_tree, xsurface->surface)->buffer->node; - wlr_scene_node_set_position(unmanaged->node, - unmanaged->lx, unmanaged->ly); + wlr_scene_node_set_position(unmanaged->node, xsurface->x, xsurface->y); } static void @@ -78,7 +54,6 @@ unmanaged_handle_unmap(struct wl_listener *listener, void *data) struct wlr_xwayland_surface *xsurface = unmanaged->xwayland_surface; wl_list_remove(&unmanaged->link); wl_list_remove(&unmanaged->set_geometry.link); - wl_list_remove(&unmanaged->commit.link); struct seat *seat = &unmanaged->server->seat; if (seat->seat->keyboard_state.focused_surface == xsurface->surface) { -- 2.52.0