]> git.mdlowis.com Git - proto/labwc.git/commitdiff
xwayland: sync foreign-toplevel and associated outputs on re-map
authortokyo4j <hrak1529@gmail.com>
Tue, 13 Aug 2024 01:01:49 +0000 (10:01 +0900)
committerJohan Malm <johanmalm@users.noreply.github.com>
Fri, 16 Aug 2024 20:38:15 +0000 (21:38 +0100)
Fixes a bug that `zwlr_foreign_toplevel_handle_v1::output_enter` is not
sent when a xwayland surface is re-mapped (e.g. opening Slack desktop
app when it's running in background).

src/xwayland.c

index 738c2b17d0df566f072fc853ae3bd48d280155e3..b98a02c25b05c3b9801cf0a9dd3c35fc37007c88 100644 (file)
@@ -738,15 +738,6 @@ xwayland_view_map(struct view *view)
                view->scene_node = &tree->node;
        }
 
-       /*
-        * Exclude unfocusable views from wlr-foreign-toplevel. These
-        * views (notifications, floating toolbars, etc.) should not be
-        * shown in taskbars/docks/etc.
-        */
-       if (!view->toplevel.handle && view_is_focusable(view)) {
-               init_foreign_toplevel(view);
-       }
-
        if (!view->been_mapped) {
                check_natural_geometry(view);
                set_initial_position(view, xwayland_surface);
@@ -760,6 +751,16 @@ xwayland_view_map(struct view *view)
                view_moved(view);
        }
 
+       /*
+        * Exclude unfocusable views from wlr-foreign-toplevel. These
+        * views (notifications, floating toolbars, etc.) should not be
+        * shown in taskbars/docks/etc.
+        */
+       if (!view->toplevel.handle && view_is_focusable(view)) {
+               init_foreign_toplevel(view);
+               foreign_toplevel_update_outputs(view);
+       }
+
        /* Add commit here, as xwayland map/unmap can change the wlr_surface */
        wl_signal_add(&xwayland_surface->surface->events.commit, &view->commit);
        view->commit.notify = handle_commit;
@@ -797,7 +798,6 @@ xwayland_view_unmap(struct view *view, bool client_request)
 out:
        if (client_request && view->toplevel.handle) {
                wlr_foreign_toplevel_handle_v1_destroy(view->toplevel.handle);
-               view->toplevel.handle = NULL;
        }
 }