[gnome-session] Use fallback session if required components are missing
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-session] Use fallback session if required components are missing
- Date: Thu, 27 Jan 2011 02:47:25 +0000 (UTC)
commit d77392333122e8a4177d9e58088706920ea94181
Author: Matthias Clasen <mclasen redhat com>
Date: Wed Jan 26 21:45:16 2011 -0500
Use fallback session if required components are missing
https://bugzilla.gnome.org/show_bug.cgi?id=639971
Also, avoid a segfault when no valid session is found.
gnome-session/gsm-session-fill.c | 62 ++++++++++++++++++++++++++++++++++++++
1 files changed, 62 insertions(+), 0 deletions(-)
---
diff --git a/gnome-session/gsm-session-fill.c b/gnome-session/gsm-session-fill.c
index c7ee61f..eb7de09 100644
--- a/gnome-session/gsm-session-fill.c
+++ b/gnome-session/gsm-session-fill.c
@@ -128,6 +128,58 @@ append_required_apps (GsmManager *manager,
g_strfreev (required_components);
}
+static gboolean
+check_required_components (GKeyFile *keyfile)
+{
+ char **required_components;
+ int i;
+ gboolean result;
+
+ g_debug ("fill: *** Checking required apps");
+
+ required_components = g_key_file_get_string_list (keyfile,
+ GSM_KEYFILE_SESSION_GROUP, GSM_KEYFILE_REQUIRED_KEY,
+ NULL, NULL);
+
+ if (required_components == NULL) {
+ return TRUE;
+ }
+
+ result = TRUE;
+ for (i = 0; result && required_components[i] != NULL; i++) {
+ char *key;
+ char *value;
+ char *app_path;
+
+ key = g_strdup_printf ("%s-%s", GSM_KEYFILE_REQUIRED_KEY, required_components[i]);
+ value = g_key_file_get_string (keyfile,
+ GSM_KEYFILE_SESSION_GROUP, key,
+ NULL);
+ g_free (key);
+
+ if (IS_STRING_EMPTY (value)) {
+ g_free (value);
+ continue;
+ }
+
+ g_debug ("fill: %s looking for component: '%s'", required_components[i], value);
+ app_path = gsm_util_find_desktop_file_for_app_name (value, NULL);
+ if (!app_path) {
+ g_warning ("Unable to find provider '%s' of required component '%s'",
+ required_components[i]);
+ result = FALSE;
+ }
+ g_free (app_path);
+ g_free (value);
+ }
+
+ g_debug ("fill: *** Done checking required apps");
+
+ g_strfreev (required_components);
+
+ return result;
+}
+
static void
maybe_load_saved_session_apps (GsmManager *manager)
{
@@ -318,6 +370,11 @@ get_session_keyfile (const char *session)
keyfile = find_valid_session_keyfile (session);
+
+ if (!keyfile) {
+ return NULL;
+ }
+
session_runnable = TRUE;
value = g_key_file_get_string (keyfile,
@@ -329,6 +386,11 @@ get_session_keyfile (const char *session)
}
g_free (value);
+ if (session_runnable) {
+ g_debug ("fill: *** Checking required components");
+ session_runnable = check_required_components (keyfile);
+ }
+
if (session_runnable)
return keyfile;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]