window: Don't change workspaces of unmanaged windows

If the ancestor a window is transient for has already been unmanaged
when the window is activated via meta_window_activate_full while its
transient_for property still points to that ancestor, this will cause
the already unmanaged ancestor to get added to the windows workspace.
This is after the ancestor had its workspace set to NULL when it was
unmanaged, causing this to look like an actual workspace change. Once
the window has been added to the workspace, it will never be removed
again, because the it has already been unmanaged. This confuses things
like the shell window tracker and leads to phantom windows being
considered present for apps that are not even running anymore.

Fixes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4184
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2003>
This commit is contained in:
Sebastian Keller 2021-09-16 19:58:57 +02:00 committed by Marge Bot
parent 89a13b4557
commit e38db1237d

View File

@ -4989,6 +4989,9 @@ static void
meta_window_change_workspace_without_transients (MetaWindow *window,
MetaWorkspace *workspace)
{
if (window->unmanaging)
return;
/* Try to unstick the window if it's stuck. This doesn't
* have any guarantee that we'll actually unstick the
* window, since it could be stuck for other reasons. */