From 622e54d54c65eba7c5d8e4172f8aae8a970126f9 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Thu, 18 Jan 2018 10:09:36 -0500 Subject: [PATCH 2/2] autostart: ensure gnome-shell and mutter get right autostart phase Previous versions of gnome-shell neglected to save the autostart phases for required components in the session state. While that is now fixed, users may still have old saved state that lack the autostart phase. In order to ease upgrades, this commit manually adds in the phases that are important for a functioning GNOME desktop. --- gnome-session/gsm-autostart-app.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/gnome-session/gsm-autostart-app.c b/gnome-session/gsm-autostart-app.c index 9eb1db5b..5617e549 100644 --- a/gnome-session/gsm-autostart-app.c +++ b/gnome-session/gsm-autostart-app.c @@ -621,61 +621,71 @@ load_desktop_file (GsmAutostartApp *app) char *startup_id; char *phase_str; int phase; gboolean res; g_assert (app->priv->app_info != NULL); phase_str = g_desktop_app_info_get_string (app->priv->app_info, GSM_AUTOSTART_APP_PHASE_KEY); if (phase_str != NULL) { if (strcmp (phase_str, "EarlyInitialization") == 0) { phase = GSM_MANAGER_PHASE_EARLY_INITIALIZATION; } else if (strcmp (phase_str, "PreDisplayServer") == 0) { phase = GSM_MANAGER_PHASE_PRE_DISPLAY_SERVER; } else if (strcmp (phase_str, "DisplayServer") == 0) { phase = GSM_MANAGER_PHASE_DISPLAY_SERVER; } else if (strcmp (phase_str, "Initialization") == 0) { phase = GSM_MANAGER_PHASE_INITIALIZATION; } else if (strcmp (phase_str, "WindowManager") == 0) { phase = GSM_MANAGER_PHASE_WINDOW_MANAGER; } else if (strcmp (phase_str, "Panel") == 0) { phase = GSM_MANAGER_PHASE_PANEL; } else if (strcmp (phase_str, "Desktop") == 0) { phase = GSM_MANAGER_PHASE_DESKTOP; } else { phase = GSM_MANAGER_PHASE_APPLICATION; } g_free (phase_str); } else { - phase = GSM_MANAGER_PHASE_APPLICATION; + const char *app_id; + + app_id = g_app_info_get_id (G_APP_INFO (app->priv->app_info)); + + /* These hardcoded checks are to keep upgrades working */ + if (app_id != NULL && g_str_has_prefix (app_id, "org.gnome.Shell")) + phase = GSM_MANAGER_PHASE_DISPLAY_SERVER; + else if (app_id != NULL && g_str_has_prefix (app_id, "org.gnome.SettingsDaemon")) + phase = GSM_MANAGER_PHASE_INITIALIZATION; + else + phase = GSM_MANAGER_PHASE_APPLICATION; } dbus_name = g_desktop_app_info_get_string (app->priv->app_info, GSM_AUTOSTART_APP_DBUS_NAME_KEY); if (dbus_name != NULL) { app->priv->launch_type = AUTOSTART_LAUNCH_ACTIVATE; } else { app->priv->launch_type = AUTOSTART_LAUNCH_SPAWN; } /* this must only be done on first load */ switch (app->priv->launch_type) { case AUTOSTART_LAUNCH_SPAWN: startup_id = g_desktop_app_info_get_string (app->priv->app_info, GSM_AUTOSTART_APP_STARTUP_ID_KEY); if (startup_id == NULL) { startup_id = gsm_util_generate_startup_id (); } break; case AUTOSTART_LAUNCH_ACTIVATE: startup_id = g_strdup (dbus_name); break; default: g_assert_not_reached (); } res = g_desktop_app_info_has_key (app->priv->app_info, GSM_AUTOSTART_APP_AUTORESTART_KEY); -- 2.14.3