From ebdedf6f31f172b7865704b21f1ee5496a8a190e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrico=20Tr=C3=B6ger?= Date: Tue, 20 May 2008 03:01:54 +0200 Subject: [PATCH] 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. --- src/midori-browser.c | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) 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);