struct SessionConfigPrivate
{
+ /* Session type */
+ gchar *session_type;
+
+ /* Desktop names */
+ gchar **desktop_names;
+
/* Command to run */
gchar *command;
+
+ /* TRUE if can run a greeter inside the session */
+ gboolean allow_greeter;
};
G_DEFINE_TYPE (SessionConfig, session_config, G_TYPE_OBJECT);
SessionConfig *
-session_config_new_from_file (const gchar *filename, GError **error)
+session_config_new_from_file (const gchar *filename, const gchar *default_session_type, GError **error)
{
GKeyFile *desktop_file;
SessionConfig *config;
config = g_object_new (SESSION_CONFIG_TYPE, NULL);
config->priv->command = command;
+ config->priv->session_type = g_key_file_get_string (desktop_file, G_KEY_FILE_DESKTOP_GROUP, "X-LightDM-Session-Type", NULL);
+ if (!config->priv->session_type)
+ config->priv->session_type = g_strdup (default_session_type);
+
+ 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)
+ {
+ 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;
+ }
+ }
+ config->priv->allow_greeter = g_key_file_get_boolean (desktop_file, G_KEY_FILE_DESKTOP_GROUP, "X-LightDM-Allow-Greeter", NULL);
g_key_file_free (desktop_file);
return config->priv->command;
}
+const gchar *
+session_config_get_session_type (SessionConfig *config)
+{
+ g_return_val_if_fail (config != NULL, NULL);
+ return config->priv->session_type;
+}
+
+gchar **
+session_config_get_desktop_names (SessionConfig *config)
+{
+ g_return_val_if_fail (config != NULL, NULL);
+ return config->priv->desktop_names;
+}
+
+gboolean
+session_config_get_allow_greeter (SessionConfig *config)
+{
+ g_return_val_if_fail (config != NULL, FALSE);
+ return config->priv->allow_greeter;
+}
static void
session_config_init (SessionConfig *config)
{
SessionConfig *self = SESSION_CONFIG (object);
+ g_free (self->priv->session_type);
+ g_strfreev (self->priv->desktop_names);
g_free (self->priv->command);
G_OBJECT_CLASS (session_config_parent_class)->finalize (object);