Blame SOURCES/0002-autostart-ensure-gnome-shell-and-mutter-get-right-au.patch

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