summaryrefslogtreecommitdiff
path: root/daemon/gdm-session-settings.c
diff options
context:
space:
mode:
authorRay Strode <rstrode@redhat.com>2008-02-26 21:10:10 +0000
committerRay Strode <halfline@src.gnome.org>2008-02-26 21:10:10 +0000
commite72519fda149e109868dc50e007dea43cf369ff3 (patch)
treea899d7a977d75859650f97c0cbea25299222d203 /daemon/gdm-session-settings.c
parentcc01b15ecaa5d67479cf7f15f05b3663fd3c8f6b (diff)
downloadgdm-e72519fda149e109868dc50e007dea43cf369ff3.tar.gz
Add save support to GdmSessionSettings object, so ~/.dmrc changes can be
2008-02-26 Ray Strode <rstrode@redhat.com> * daemon/gdm-session-settings.[ch]: (gdm_session_settings_save): Add save support to GdmSessionSettings object, so ~/.dmrc changes can be saved out. svn path=/trunk/; revision=5878
Diffstat (limited to 'daemon/gdm-session-settings.c')
-rw-r--r--daemon/gdm-session-settings.c60
1 files changed, 58 insertions, 2 deletions
diff --git a/daemon/gdm-session-settings.c b/daemon/gdm-session-settings.c
index 22bae824..227bec7e 100644
--- a/daemon/gdm-session-settings.c
+++ b/daemon/gdm-session-settings.c
@@ -288,7 +288,63 @@ out:
g_key_file_free (key_file);
g_free (filename);
- settings->priv->is_loaded = is_loaded;
-
return is_loaded;
}
+
+gboolean
+gdm_session_settings_save (GdmSessionSettings *settings,
+ const char *home_directory,
+ GError **error)
+{
+ GKeyFile *key_file;
+ GError *file_error;
+ gboolean is_saved;
+ char *filename;
+ gsize length;
+ gchar *contents;
+
+ g_return_val_if_fail (GDM_IS_SESSION_SETTINGS (settings), FALSE);
+ g_return_val_if_fail (home_directory != NULL, FALSE);
+ g_return_val_if_fail (gdm_session_settings_is_loaded (settings), FALSE);
+ filename = g_build_filename (home_directory, ".dmrc", NULL);
+
+ is_saved = FALSE;
+ key_file = g_key_file_new ();
+
+ file_error = NULL;
+ g_key_file_load_from_file (key_file, filename,
+ G_KEY_FILE_KEEP_COMMENTS |
+ G_KEY_FILE_KEEP_TRANSLATIONS,
+ NULL);
+
+ if (settings->priv->session_name != NULL) {
+ g_key_file_set_string (key_file, "Desktop", "Session",
+ settings->priv->session_name);
+ }
+
+ if (settings->priv->language_name != NULL) {
+ g_key_file_set_string (key_file, "Desktop", "Language",
+ settings->priv->language_name);
+ }
+
+ contents = g_key_file_to_data (key_file, &length, &file_error);
+
+ if (contents == NULL) {
+ g_propagate_error (error, file_error);
+ goto out;
+ }
+
+ if (!g_file_set_contents (filename, contents, length, &file_error)) {
+ g_free (contents);
+ g_propagate_error (error, file_error);
+ goto out;
+ }
+ g_free (contents);
+
+ is_saved = TRUE;
+out:
+ g_key_file_free (key_file);
+ g_free (filename);
+
+ return is_saved;
+}