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);
/* Session type */
gchar *session_type;
- /* Desktop name */
- gchar *desktop_name;
+ /* Desktop names */
+ gchar **desktop_names;
/* Command to run */
gchar *command;
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))
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);
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 *
session_config_init (SessionConfig *config)
{
config->priv = G_TYPE_INSTANCE_GET_PRIVATE (config, SESSION_CONFIG_TYPE, SessionConfigPrivate);
- config->priv->desktop_name = NULL;
}
static void
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);