From: John Lindgren Date: Sat, 23 Jul 2022 15:20:34 +0000 (-0400) Subject: xwayland: Process unmanaged client configure requests more quickly X-Git-Url: https://git.mdlowis.com/?a=commitdiff_plain;h=5d0faa23337c632d32849e264f8ba8c46e0cc058;p=proto%2Flabwc.git 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. --- 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) {