[gtk+/bgo658280-filechooser-recently-used: 3/3] Save the last-used directory in gtkfilechooser.ini as well



commit 8907aedb5712818a1d9a8c6fe036b8e5141e4e66
Author: Federico Mena Quintero <federico gnome org>
Date:   Fri Nov 16 17:27:13 2012 -0600

    Save the last-used directory in gtkfilechooser.ini as well
    
    This is so that GTK+ 2.x apps can also share the same folder information as 3.x apps.
    
    Signed-off-by: Federico Mena Quintero <federico gnome org>

 gtk/gtkfilechooserdefault.c |   51 +++++++++++++++++++++++++++++++++++-------
 1 files changed, 42 insertions(+), 9 deletions(-)
---
diff --git a/gtk/gtkfilechooserdefault.c b/gtk/gtkfilechooserdefault.c
index f99fc17..8b3476c 100644
--- a/gtk/gtkfilechooserdefault.c
+++ b/gtk/gtkfilechooserdefault.c
@@ -6029,16 +6029,22 @@ settings_ensure (GtkFileChooserDefault *impl)
   g_settings_delay (impl->settings);
 }
 
+static char *
+get_settings_filename (void)
+{
+  /* Note that this is really "gtk-2.0" so that we can share the configuration
+   * with GTK2, for old applications.
+   */
+  return g_build_filename (g_get_user_config_dir (), "gtk-2.0", "gtkfilechooser.ini", NULL);
+}
+
 static GKeyFile *
 get_settings_keyfile (void)
 {
   char *filename;
   GKeyFile *keyfile;
 
-  /* Note that this is really "gtk-2.0" so that we can share the configuration
-   * with GTK2, for old applications.
-   */
-  filename = g_build_filename (g_get_user_config_dir (), "gtk-2.0", "gtkfilechooser.ini", NULL);
+  filename = get_settings_filename ();
 
   keyfile = g_key_file_new ();
   if (!g_key_file_load_from_file (keyfile,
@@ -6106,24 +6112,51 @@ save_dialog_geometry (GtkFileChooserDefault *impl)
 }
 
 static void
-settings_save (GtkFileChooserDefault *impl)
+save_current_folder_to_settings (GtkFileChooserDefault *impl)
 {
   char *current_folder_uri;
-
-  settings_ensure (impl);
-
-  /* Current folder */
+  GKeyFile *keyfile;
+  char *contents;
+  gsize len;
 
   if (impl->current_folder)
     current_folder_uri = g_file_get_uri (impl->current_folder);
   else
     current_folder_uri = "";
 
+  keyfile = get_settings_keyfile ();
+  if (keyfile)
+    g_key_file_set_string (keyfile,
+			   "Filechooser Settings",
+			   "DefaultFolder",
+			   current_folder_uri);
+
   g_settings_set_string (impl->settings, SETTINGS_KEY_LAST_FOLDER_URI, current_folder_uri);
 
   if (impl->current_folder)
     g_free (current_folder_uri);
 
+  contents = g_key_file_to_data (keyfile, &len, NULL); /* NULL-GError */
+
+  if (contents)
+    {
+      char *filename;
+
+      filename = get_settings_filename ();
+      g_file_set_contents (filename, contents, len, NULL); /* NULL-GError */
+      g_free (filename);
+    }
+}
+
+static void
+settings_save (GtkFileChooserDefault *impl)
+{
+  settings_ensure (impl);
+
+  /* Current folder */
+
+  save_current_folder_to_settings (impl);
+
   /* All the other state */
 
   g_settings_set_enum (impl->settings, SETTINGS_KEY_LOCATION_MODE, impl->location_mode);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]