shell: Use swapped signal connection for MetaWindowActor::destroy

The callback would schedule a clutter_actor_destroy() on the first
argument. Unless told otherwise, this is the same actor that is
already being destroyed, so this is a no-op.

Instead, the intent is to make the clone follow up destruction of
the window actor so that it results in correct removal of this
window from the ShellWindowPreviewLayout. Use a swapped connection
to pass the clone actor as the first argument of the signal callback.

Fixes: 04c781674c ("Move WindowPreviewLayout from JS to C")

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/6570
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2756>
This commit is contained in:
Carlos Garnacho 2023-05-01 17:04:46 +02:00 committed by Marge Bot
parent b6ab909180
commit 356bab1121

View File

@ -394,8 +394,8 @@ shell_window_preview_layout_add_window (ShellWindowPreviewLayout *self,
g_signal_connect (window, "position-changed", g_signal_connect (window, "position-changed",
G_CALLBACK (on_window_size_position_changed), self); G_CALLBACK (on_window_size_position_changed), self);
window_info->window_actor_destroy_id = window_info->window_actor_destroy_id =
g_signal_connect (window_actor, "destroy", g_signal_connect_swapped (window_actor, "destroy",
G_CALLBACK (on_window_destroyed), actor); G_CALLBACK (on_window_destroyed), actor);
window_info->destroy_id = window_info->destroy_id =
g_signal_connect (actor, "destroy", g_signal_connect (actor, "destroy",
G_CALLBACK (on_actor_destroyed), self); G_CALLBACK (on_actor_destroyed), self);