]> rtime.felk.cvut.cz Git - sojka/lightdm.git/commitdiff
Refactor DesktopNames support to be less confusing
authorRobert Ancell <robert.ancell@canonical.com>
Mon, 20 Oct 2014 13:54:54 +0000 (09:54 -0400)
committerRobert Ancell <robert.ancell@canonical.com>
Mon, 20 Oct 2014 13:54:54 +0000 (09:54 -0400)
src/seat.c
src/session-config.c
src/session-config.h

index 3be153c8420fd5c4768e67fadc90a099c01d53a9..9a56baf26075af40b67db7ae7e7be05a96f8416a 100644 (file)
@@ -933,15 +933,20 @@ find_session_config (Seat *seat, const gchar *sessions_dir, const gchar *session
 static void
 configure_session (Session *session, SessionConfig *config, const gchar *session_name, const gchar *language)
 {
-    const gchar *desktop_name;
+    gchar **desktop_names;
 
     session_set_config (session, config);
     session_set_env (session, "XDG_SESSION_DESKTOP", session_name);
     session_set_env (session, "DESKTOP_SESSION", session_name);
     session_set_env (session, "GDMSESSION", session_name);
-    desktop_name = session_config_get_desktop_name (config);
-    if (desktop_name)
-        session_set_env (session, "XDG_CURRENT_DESKTOP", desktop_name);
+    desktop_names = session_config_get_desktop_names (config);
+    if (desktop_names)
+    {
+        gchar *value;
+        value = g_strjoinv (":", desktop_names);
+        session_set_env (session, "XDG_CURRENT_DESKTOP", value);
+        g_free (value);
+    }
     if (language && language[0] != '\0')
     {
         session_set_env (session, "LANG", language);
index 834c1a6d7c3af64e32240520387de9f1c7f0d3cf..b5ea7228cf02cd54df676f9c174abf04c736cdea 100644 (file)
@@ -16,8 +16,8 @@ struct SessionConfigPrivate
     /* Session type */
     gchar *session_type;
 
-    /* Desktop name */
-    gchar *desktop_name;
+    /* Desktop names */
+    gchar **desktop_names;
 
     /* Command to run */
     gchar *command;
@@ -34,7 +34,6 @@ session_config_new_from_file (const gchar *filename, GError **error)
     GKeyFile *desktop_file;
     SessionConfig *config;
     gchar *command;
-    gchar **desktop_names;
 
     desktop_file = g_key_file_new ();
     if (!g_key_file_load_from_file (desktop_file, filename, G_KEY_FILE_NONE, error))
@@ -55,14 +54,19 @@ session_config_new_from_file (const gchar *filename, GError **error)
     if (!config->priv->session_type)
         config->priv->session_type = g_strdup ("x");
 
-    desktop_names = g_key_file_get_string_list (desktop_file, G_KEY_FILE_DESKTOP_GROUP, "DesktopNames", NULL, NULL);
-    if (desktop_names != NULL)
+    config->priv->desktop_names = g_key_file_get_string_list (desktop_file, G_KEY_FILE_DESKTOP_GROUP, "DesktopNames", NULL, NULL);
+    if (!config->priv->desktop_names)
     {
-        config->priv->desktop_name = g_strjoinv (":", desktop_names);
-        g_strfreev (desktop_names);
+        gchar *name;
+
+        name = g_key_file_get_string (desktop_file, G_KEY_FILE_DESKTOP_GROUP, "X-LightDM-DesktopName", NULL);
+        if (name)
+        {
+            config->priv->desktop_names = g_malloc (sizeof (gchar *) * 2);
+            config->priv->desktop_names[0] = name;
+            config->priv->desktop_names[1] = NULL;
+        }
     }
-    if (!config->priv->desktop_name)
-        config->priv->desktop_name = g_key_file_get_string (desktop_file, G_KEY_FILE_DESKTOP_GROUP, "X-LightDM-DesktopName", NULL);
     config->priv->compositor_command = g_key_file_get_string (desktop_file, G_KEY_FILE_DESKTOP_GROUP, "X-LightDM-System-Compositor-Command", NULL);
 
     g_key_file_free (desktop_file);
@@ -84,11 +88,11 @@ session_config_get_session_type (SessionConfig *config)
     return config->priv->session_type;
 }
 
-const gchar *
-session_config_get_desktop_name (SessionConfig *config)
+gchar **
+session_config_get_desktop_names (SessionConfig *config)
 {
     g_return_val_if_fail (config != NULL, NULL);
-    return config->priv->desktop_name;
+    return config->priv->desktop_names;
 }
 
 const gchar *
@@ -102,7 +106,6 @@ static void
 session_config_init (SessionConfig *config)
 {
     config->priv = G_TYPE_INSTANCE_GET_PRIVATE (config, SESSION_CONFIG_TYPE, SessionConfigPrivate);
-    config->priv->desktop_name = NULL;
 }
 
 static void
@@ -111,7 +114,7 @@ session_config_finalize (GObject *object)
     SessionConfig *self = SESSION_CONFIG (object);
 
     g_free (self->priv->session_type);
-    g_free (self->priv->desktop_name);
+    g_strfreev (self->priv->desktop_names);
     g_free (self->priv->command);
     g_free (self->priv->compositor_command);
 
index a86dc56d95d1d26e8b89f1f61d00d785bb45f7d1..2d3d52885f36a6c04415bdcd63145ea9ab3ce876 100644 (file)
@@ -42,7 +42,7 @@ const gchar *session_config_get_command (SessionConfig *config);
 
 const gchar *session_config_get_session_type (SessionConfig *config);
 
-const gchar *session_config_get_desktop_name (SessionConfig *config);
+gchar **session_config_get_desktop_names (SessionConfig *config);
 
 const gchar *session_config_get_compositor_command (SessionConfig *config);