From: Matthias Clasen Date: Thu, 5 Jan 2023 13:37:29 +0000 (-0500) Subject: filechooser: Don't assert for possible cases X-Git-Tag: archive/raspbian/4.12.3+ds-1+rpi1~1^2^2^2~22^2~8^2~102^2 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=fc1f1366b45d43062e8646717c25fbefd31f4150;p=gtk4.git filechooser: Don't assert for possible cases switch_to_selected_folder can be called when the selection contains more than one item. Handle it like it used to be handled: switch to the first folder we find. Fixes: #5494 --- diff --git a/gtk/gtkfilechooserwidget.c b/gtk/gtkfilechooserwidget.c index ca1aa426b4..5152e090de 100644 --- a/gtk/gtkfilechooserwidget.c +++ b/gtk/gtkfilechooserwidget.c @@ -4914,17 +4914,31 @@ gtk_file_chooser_widget_get_shortcut_folders (GtkFileChooser *chooser) static void switch_to_selected_folder (GtkFileChooserWidget *impl) { - GFileInfo *info; - GFile *file; + GtkBitsetIter iter; + GtkBitset *bitset; + unsigned int i; - g_assert (!impl->select_multiple); - g_assert (GTK_IS_SINGLE_SELECTION (impl->selection_model)); + bitset = gtk_selection_model_get_selection (impl->selection_model); - info = gtk_single_selection_get_selected_item (GTK_SINGLE_SELECTION (impl->selection_model)); - g_assert (info != NULL); + for (gtk_bitset_iter_init_first (&iter, bitset, &i); + gtk_bitset_iter_is_valid (&iter); + gtk_bitset_iter_next (&iter, &i)) + { + GFileInfo *info; - file = _gtk_file_info_get_file (info); - change_folder_and_display_error (impl, file, FALSE); + info = g_list_model_get_item (G_LIST_MODEL (impl->selection_model), i); + if (_gtk_file_info_consider_as_directory (info)) + { + GFile *file; + + file = _gtk_file_info_get_file (info); + change_folder_and_display_error (impl, file, FALSE); + g_object_unref (info); + return; + } + + g_clear_object (&info); + } } /* Gets the display name of the selected file in the file list; assumes single