diff --git a/gtk/gtkfilechooserdefault.c b/gtk/gtkfilechooserdefault.c index b8477f182e..db048f8b4a 100644 --- a/gtk/gtkfilechooserdefault.c +++ b/gtk/gtkfilechooserdefault.c @@ -327,6 +327,8 @@ static void gtk_file_chooser_default_get_default_size (GtkFileCh static gboolean gtk_file_chooser_default_should_respond (GtkFileChooserEmbed *chooser_embed); static void gtk_file_chooser_default_initial_focus (GtkFileChooserEmbed *chooser_embed); +static void add_selection_to_recent_list (GtkFileChooserDefault *impl); + static void location_popup_handler (GtkFileChooserDefault *impl, const gchar *path); static void location_popup_on_paste_handler (GtkFileChooserDefault *impl); @@ -8127,6 +8129,16 @@ struct GetDisplayNameData gchar *file_part; }; +/* Every time we request a response explicitly, we need to save the selection to the recently-used list, + * as requesting a response means, "the dialog is confirmed". + */ +static void +request_response_and_add_to_recent_list (GtkFileChooserDefault *impl) +{ + g_signal_emit_by_name (impl, "response-requested"); + add_selection_to_recent_list (impl); +} + static void confirmation_confirm_get_info_cb (GCancellable *cancellable, GFileInfo *info, @@ -8153,7 +8165,7 @@ confirmation_confirm_get_info_cb (GCancellable *cancellable, set_busy_cursor (data->impl, FALSE); if (should_respond) - g_signal_emit_by_name (data->impl, "response-requested"); + request_response_and_add_to_recent_list (data->impl); out: g_object_unref (data->impl); @@ -8253,7 +8265,7 @@ name_entry_get_parent_info_cb (GCancellable *cancellable, { if (data->impl->action == GTK_FILE_CHOOSER_ACTION_OPEN) { - g_signal_emit_by_name (data->impl, "response-requested"); /* even if the file doesn't exist, apps can make good use of that (e.g. Emacs) */ + request_response_and_add_to_recent_list (data->impl); /* even if the file doesn't exist, apps can make good use of that (e.g. Emacs) */ } else if (data->impl->action == GTK_FILE_CHOOSER_ACTION_SAVE) { @@ -8271,10 +8283,10 @@ name_entry_get_parent_info_cb (GCancellable *cancellable, g_free (file_part); if (retval) - g_signal_emit_by_name (data->impl, "response-requested"); + request_response_and_add_to_recent_list (data->impl); } else - g_signal_emit_by_name (data->impl, "response-requested"); + request_response_and_add_to_recent_list (data->impl); } else if (data->impl->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER || data->impl->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER) @@ -8290,7 +8302,7 @@ name_entry_get_parent_info_cb (GCancellable *cancellable, set_busy_cursor (data->impl, FALSE); if (!mkdir_error) - g_signal_emit_by_name (data->impl, "response-requested"); + request_response_and_add_to_recent_list (data->impl); else error_creating_folder_dialog (data->impl, data->file, mkdir_error); } @@ -8357,7 +8369,7 @@ file_exists_get_info_cb (GCancellable *cancellable, else { if (file_exists) - g_signal_emit_by_name (data->impl, "response-requested"); /* user typed an existing filename; we are done */ + request_response_and_add_to_recent_list (data->impl); /* user typed an existing filename; we are done */ else needs_parent_check = TRUE; /* file doesn't exist; see if its parent exists */ } @@ -8388,7 +8400,7 @@ file_exists_get_info_cb (GCancellable *cancellable, if (is_folder) { /* User typed a folder; we are done */ - g_signal_emit_by_name (data->impl, "response-requested"); + request_response_and_add_to_recent_list (data->impl); } else error_selecting_folder_over_existing_file_dialog (data->impl, data->file);