@@ -54,33 +54,37 @@ pub(crate) fn get_file_dialog_path(
5454
5555 dialog. set_select_multiple ( options. multi_selection ) ;
5656
57- let mut found_default_filter = false ;
58- if let Some ( file_types) = & options. allowed_types {
59- for f in file_types {
60- let filter = file_filter ( f) ;
61- dialog. add_filter ( & filter) ;
62-
63- if let Some ( default) = & options. default_type {
64- if default == f {
65- // Note that we're providing the same FileFilter object to
66- // add_filter and set_filter, because gtk checks them for
67- // identity, not structural equality.
68- dialog. set_filter ( & filter) ;
69- found_default_filter = true ;
57+ // Don't set the filters when showing the folder selection dialog,
58+ // because then folder traversing won't work.
59+ if action != FileChooserAction :: SelectFolder {
60+ let mut found_default_filter = false ;
61+ if let Some ( file_types) = & options. allowed_types {
62+ for f in file_types {
63+ let filter = file_filter ( f) ;
64+ dialog. add_filter ( & filter) ;
65+
66+ if let Some ( default) = & options. default_type {
67+ if default == f {
68+ // Note that we're providing the same FileFilter object to
69+ // add_filter and set_filter, because gtk checks them for
70+ // identity, not structural equality.
71+ dialog. set_filter ( & filter) ;
72+ found_default_filter = true ;
73+ }
7074 }
7175 }
7276 }
73- }
7477
75- if let Some ( default_file_type) = & options. default_type {
76- if options. allowed_types . is_some ( ) && !found_default_filter {
77- // It's ok to set a default file filter without providing a list of
78- // allowed filters, but it's not ok (or at least, doesn't work in gtk)
79- // to provide a default filter that isn't in the (present) list
80- // of allowed filters.
81- log:: warn!( "default file type not found in allowed types" ) ;
82- } else if !found_default_filter {
83- dialog. set_filter ( & file_filter ( default_file_type) ) ;
78+ if let Some ( default_file_type) = & options. default_type {
79+ if options. allowed_types . is_some ( ) && !found_default_filter {
80+ // It's ok to set a default file filter without providing a list of
81+ // allowed filters, but it's not ok (or at least, doesn't work in gtk)
82+ // to provide a default filter that isn't in the (present) list
83+ // of allowed filters.
84+ log:: warn!( "default file type not found in allowed types" ) ;
85+ } else if !found_default_filter {
86+ dialog. set_filter ( & file_filter ( default_file_type) ) ;
87+ }
8488 }
8589 }
8690
0 commit comments