]> rtime.felk.cvut.cz Git - sojka/lightdm.git/commitdiff
fixes 920150 for liblightdm-gobject by reading xsessions-directory from the conf...
authorSam Yates <Unknown>
Wed, 13 Jun 2012 21:53:38 +0000 (15:53 -0600)
committerMatthew Fischer <matthew.fischer@canonical.com>
Wed, 13 Jun 2012 21:53:38 +0000 (15:53 -0600)
liblightdm-gobject/Makefile.am
liblightdm-gobject/session.c

index 93f190b82b23f12773e9ae6600c7dfcb47ec6abe..8c0ce52617e7b88ea6858c95adb11c939fdf664d 100644 (file)
@@ -4,6 +4,7 @@ liblightdm_gobject_1_la_LDFLAGS = -export-symbols-regex \^lightdm_.*
 liblightdm_gobject_1_la_LIBADD = $(LIBLIGHTDM_GOBJECT_LIBS)
 liblightdm_gobject_1_la_CFLAGS = $(LIBLIGHTDM_GOBJECT_CFLAGS) \
        $(WARN_CFLAGS) \
+       -DCONFIG_DIR=\"$(sysconfdir)/lightdm\" \
        -DXSESSIONS_DIR=\"$(datadir)/xsessions\"
 
 mainheader_HEADERS = lightdm.h
index 7eb33373662b0c40c79ced1a3d5d17852c0b2471..082cc337a396be7b9463718c8403480fcafe7a2f 100644 (file)
@@ -112,15 +112,39 @@ update_sessions (void)
     GDir *directory;
     GError *error = NULL;
 
+    GKeyFile *config_key_file = NULL;
+    gchar *config_path = NULL;
+    gchar *xsessions_dir = g_strdup (XSESSIONS_DIR);
+
     if (have_sessions)
         return;
 
-    directory = g_dir_open (XSESSIONS_DIR, 0, &error);
+    config_path = g_build_filename (CONFIG_DIR, "lightdm.conf", NULL);
+    config_key_file = g_key_file_new ();
+    if (!g_key_file_load_from_file (config_key_file, config_path, G_KEY_FILE_NONE, &error)) {
+        if (error) {
+            g_warning ("Failed to open configuration file: %s", error->message);
+            g_clear_error (&error);
+        }
+    }
+    else {
+        gchar *xd_value = g_key_file_get_string (config_key_file, "LightDM", "xsessions-directory", NULL);
+        if (xd_value) {
+            g_free (xsessions_dir);
+            xsessions_dir = xd_value;
+        }
+    }
+    g_key_file_free (config_key_file);
+    g_free (config_path);
+    
+    directory = g_dir_open (xsessions_dir, 0, &error);
     if (error)
         g_warning ("Failed to open sessions directory: %s", error->message);
     g_clear_error (&error);
-    if (!directory)
+    if (!directory) {
+        g_free (xsessions_dir);
         return;
+    }
 
     while (TRUE)
     {
@@ -136,7 +160,7 @@ update_sessions (void)
         if (!g_str_has_suffix (filename, ".desktop"))
             continue;
 
-        path = g_build_filename (XSESSIONS_DIR, filename, NULL);
+        path = g_build_filename (xsessions_dir, filename, NULL);
 
         key_file = g_key_file_new ();
         result = g_key_file_load_from_file (key_file, path, G_KEY_FILE_NONE, &error);
@@ -163,6 +187,7 @@ update_sessions (void)
     }
 
     g_dir_close (directory);
+    g_free (xsessions_dir);
 
     have_sessions = TRUE;
 }