From: Enrico Tröger Date: Tue, 20 May 2008 01:01:54 +0000 (+0200) Subject: Remember the last opened folder for File Open X-Git-Url: https://spindle.queued.net/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ebdedf6f31f172b7865704b21f1ee5496a8a190e;p=midori Remember the last opened folder for File Open 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. --- diff --git a/src/midori-browser.c b/src/midori-browser.c index 3d38029e..77ddae78 100644 --- a/src/midori-browser.c +++ b/src/midori-browser.c @@ -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);