@@ -7,7 +7,7 @@ use objc2::{
77} ;
88use objc2_foundation:: { NSArray , NSObject , NSObjectProtocol , NSString , NSURL } ;
99use objc2_ui_kit:: { UIDocumentPickerDelegate , UIDocumentPickerViewController } ;
10- use objc2_uniform_type_identifiers:: UTType ;
10+ use objc2_uniform_type_identifiers:: { UTType , UTTypeData } ;
1111use winio_callback:: Callback ;
1212use winio_handle:: AsWindow ;
1313
@@ -87,21 +87,23 @@ async fn filebox(
8787) -> Result < Vec < PathBuf > > {
8888 let mtm = MainThreadMarker :: new ( ) . ok_or ( Error :: NotMainThread ) ?;
8989 let delegate = catch ( || {
90- let ns_filters = NSArray :: from_retained_slice (
91- & filters
92- . into_iter ( )
93- . filter_map ( |f| {
94- let pattern = f. pattern ;
95- if pattern == "*.*" || pattern == "*" {
96- None
97- } else {
98- UTType :: typeWithFilenameExtension ( & NSString :: from_str (
99- pattern. strip_prefix ( "*." ) . unwrap_or ( & pattern) ,
100- ) )
101- }
102- } )
103- . collect :: < Vec < _ > > ( ) ,
104- ) ;
90+ let mut ns_filters = filters
91+ . into_iter ( )
92+ . filter_map ( |f| {
93+ let pattern = f. pattern ;
94+ if pattern == "*.*" || pattern == "*" {
95+ Some ( unsafe { UTTypeData . retain ( ) } )
96+ } else {
97+ UTType :: typeWithFilenameExtension ( & NSString :: from_str (
98+ pattern. strip_prefix ( "*." ) . unwrap_or ( & pattern) ,
99+ ) )
100+ }
101+ } )
102+ . collect :: < Vec < _ > > ( ) ;
103+ if ns_filters. is_empty ( ) {
104+ ns_filters. push ( unsafe { UTTypeData . retain ( ) } ) ;
105+ }
106+ let ns_filters = NSArray :: from_retained_slice ( & ns_filters) ;
105107 let browser =
106108 UIDocumentPickerViewController :: initForOpeningContentTypes ( mtm. alloc ( ) , & ns_filters) ;
107109 browser. setAllowsMultipleSelection ( multiple) ;
0 commit comments