You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
4.2 KiB
97 lines
4.2 KiB
7 years ago
|
From 622e54d54c65eba7c5d8e4172f8aae8a970126f9 Mon Sep 17 00:00:00 2001
|
||
|
From: Ray Strode <rstrode@redhat.com>
|
||
|
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
|
||
|
|