diff --git a/src/shell-app.c b/src/shell-app.c index 0a919b97e..20a2e2412 100644 --- a/src/shell-app.c +++ b/src/shell-app.c @@ -36,6 +36,8 @@ typedef struct { GSList *windows; + guint interesting_windows; + /* Whether or not we need to resort the windows; this is done on demand */ gboolean window_sort_stale : 1; @@ -1034,7 +1036,11 @@ _shell_app_add_window (ShellApp *app, shell_app_update_app_menu (app, window); shell_app_ensure_busy_watch (app); - if (app->state != SHELL_APP_STATE_STARTING) + if (shell_window_tracker_is_window_interesting (window)) + app->running_state->interesting_windows++; + + if (app->state != SHELL_APP_STATE_STARTING && + app->running_state->interesting_windows > 0) shell_app_state_transition (app, SHELL_APP_STATE_RUNNING); g_object_thaw_notify (G_OBJECT (app)); @@ -1056,7 +1062,10 @@ _shell_app_remove_window (ShellApp *app, g_object_unref (window); app->running_state->windows = g_slist_remove (app->running_state->windows, window); - if (app->running_state->windows == NULL) + if (shell_window_tracker_is_window_interesting (window)) + app->running_state->interesting_windows--; + + if (app->running_state->interesting_windows == 0) shell_app_state_transition (app, SHELL_APP_STATE_STOPPED); g_signal_emit (app, shell_app_signals[WINDOWS_CHANGED], 0);