diff --git a/gtk/gtkfilechooserdefault.c b/gtk/gtkfilechooserdefault.c index 6f16365b0b..1fa1d033c1 100644 --- a/gtk/gtkfilechooserdefault.c +++ b/gtk/gtkfilechooserdefault.c @@ -6559,7 +6559,6 @@ update_chooser_entry (GtkFileChooserDefault *impl) /* no need to update the file chooser's entry if there's no entry */ if (impl->operation_mode == OPERATION_MODE_SEARCH || - impl->operation_mode == OPERATION_MODE_RECENT || !impl->location_entry) return; @@ -6578,7 +6577,10 @@ update_chooser_entry (GtkFileChooserDefault *impl) if (closure.num_selected == 0) { - goto maybe_clear_entry; + if (impl->operation_mode == OPERATION_MODE_RECENT) + _gtk_file_chooser_entry_set_base_folder (GTK_FILE_CHOOSER_ENTRY (impl->location_entry), NULL); + else + goto maybe_clear_entry; } else if (closure.num_selected == 1) { @@ -6619,6 +6621,20 @@ update_chooser_entry (GtkFileChooserDefault *impl) return; } + else if (impl->operation_mode == OPERATION_MODE_RECENT + && impl->action == GTK_FILE_CHOOSER_ACTION_SAVE) + { + GFile *folder; + + /* Set the base folder on the name entry, so it will do completion relative to the correct recent-folder */ + + gtk_tree_model_get (GTK_TREE_MODEL (impl->recent_model), &closure.first_selected_iter, + MODEL_COL_FILE, &folder, + -1); + _gtk_file_chooser_entry_set_base_folder (GTK_FILE_CHOOSER_ENTRY (impl->location_entry), folder); + g_object_unref (folder); + return; + } } else {