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

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