]> spindle.queued.net Git - midori/commitdiff
Remember the last opened folder for File Open
authorEnrico Tröger <enrico.troeger@uvena.de>
Tue, 20 May 2008 01:01:54 +0000 (03:01 +0200)
committerChristian Dywan <christian@twotoasts.de>
Tue, 20 May 2008 01:01:54 +0000 (03:01 +0200)
The File Open dialog should remember the last opened folder
or try to obtain it from the currently opened web view.
Besides the dialog ought to be transient.

src/midori-browser.c

index 3d38029eae8529e039309944a3b0d1cdd4c52512..77ddae78eb0a34683aa5f8dbb2cfbc88a340f5aa 100644 (file)
@@ -736,6 +736,9 @@ static void
 _action_open_activate (GtkAction*     action,
                        MidoriBrowser* browser)
 {
+    static gchar* last_dir = NULL;
+    gchar* uri = NULL;
+    gboolean folder_set = FALSE;
     GtkWidget* dialog = gtk_file_chooser_dialog_new (
         ("Open file"), GTK_WINDOW (browser),
         GTK_FILE_CHOOSER_ACTION_OPEN,
@@ -743,11 +746,41 @@ _action_open_activate (GtkAction*     action,
         GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
         NULL);
      gtk_window_set_icon_name (GTK_WINDOW (dialog), GTK_STOCK_OPEN);
+     gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (browser));
+
+     // base the start folder on the current web view's uri if it is local
+     GtkWidget* web_view = midori_browser_get_current_web_view (browser);
+     if (web_view)
+         g_object_get (web_view, "uri", &uri, NULL);
+     if (uri)
+     {
+         gchar* filename = g_filename_from_uri (uri, NULL, NULL);
+         if (filename)
+         {
+             gchar* dirname = g_path_get_dirname (filename);
+             if (dirname && g_file_test (dirname, G_FILE_TEST_IS_DIR))
+             {
+                 gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), dirname);
+                 folder_set = TRUE;
+             }
+
+             g_free (dirname);
+             g_free (filename);
+         }
+         g_free (uri);
+     }
+
+     if (!folder_set && last_dir && *last_dir)
+         gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), last_dir);
+
      if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
      {
-         gchar* uri = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (dialog));
-         GtkWidget* web_view = midori_browser_get_current_web_view (browser);
+         uri = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (dialog));
+         gchar* folder = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER (dialog));
          g_object_set (web_view, "uri", uri, NULL);
+
+         g_free (last_dir);
+         last_dir = folder;
          g_free (uri);
      }
     gtk_widget_destroy (dialog);