]> git.mdlowis.com Git - proto/labwc.git/commitdiff
xwayland: Process unmanaged client configure requests more quickly
authorJohn Lindgren <john@jlindgren.net>
Sat, 23 Jul 2022 15:20:34 +0000 (11:20 -0400)
committerConsolatis <35009135+Consolatis@users.noreply.github.com>
Sat, 23 Jul 2022 18:37:59 +0000 (20:37 +0200)
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
src/xwayland-unmanaged.c

index fd738c150fd80b31fb8d294ab263516d494862fd..fab99852c6a91e6ab17d4b63e2fe3bf608a63246 100644 (file)
@@ -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;
index 4c68223bc9821a4ce8d2d8b23387f044e9d84cb3..05c2ffc26ef2b5078f2376bb9b70c49046afda28 100644 (file)
@@ -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) {