shell/app: Re-order running-state cleanup
Since commit 1807be1, we clear the fallback icon when a window is removed, and notify the icon change. The notify call currently happens after removing the window from the running state, but before syncing the state (and possibly clear the running state altogether). That state is inconsistent and results in an assertion hit when some code tries to re-fetch the icon in response to the notify call. Address this by updating the state before clearing the fallback icon, so that the app will be in the correct STOPPED state after removing the last window. https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4888 Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2073>
This commit is contained in:
parent
7e0c6dc2c1
commit
331454a757
@ -1140,6 +1140,13 @@ _shell_app_remove_window (ShellApp *app,
|
||||
|
||||
app->running_state->windows = g_slist_remove (app->running_state->windows, window);
|
||||
|
||||
if (!meta_window_is_skip_taskbar (window))
|
||||
app->running_state->interesting_windows--;
|
||||
shell_app_sync_running_state (app);
|
||||
|
||||
if (app->running_state->windows == NULL)
|
||||
g_clear_pointer (&app->running_state, unref_running_state);
|
||||
|
||||
g_signal_handlers_disconnect_by_func (window, G_CALLBACK(shell_app_on_user_time_changed), app);
|
||||
g_signal_handlers_disconnect_by_func (window, G_CALLBACK(shell_app_on_skip_taskbar_changed), app);
|
||||
if (window == app->fallback_icon_window)
|
||||
@ -1152,15 +1159,8 @@ _shell_app_remove_window (ShellApp *app,
|
||||
g_object_notify (G_OBJECT (app), "icon");
|
||||
}
|
||||
|
||||
if (!meta_window_is_skip_taskbar (window))
|
||||
app->running_state->interesting_windows--;
|
||||
shell_app_sync_running_state (app);
|
||||
|
||||
g_object_unref (window);
|
||||
|
||||
if (app->running_state->windows == NULL)
|
||||
g_clear_pointer (&app->running_state, unref_running_state);
|
||||
|
||||
g_signal_emit (app, shell_app_signals[WINDOWS_CHANGED], 0);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user