Ensure returned URLs are files before returning them in path prompts

Antonio Scandurra created

Change summary

gpui/src/platform/mac/platform.rs | 24 +++++++++++++++---------
1 file changed, 15 insertions(+), 9 deletions(-)

Detailed changes

gpui/src/platform/mac/platform.rs 🔗

@@ -7,7 +7,7 @@ use cocoa::{
         NSEventModifierFlags, NSMenu, NSMenuItem, NSModalResponse, NSOpenPanel, NSPasteboard,
         NSPasteboardTypeString, NSSavePanel, NSWindow,
     },
-    base::{id, nil, selector},
+    base::{id, nil, selector, YES},
     foundation::{NSArray, NSAutoreleasePool, NSData, NSInteger, NSString, NSURL},
 };
 use ctor::ctor;
@@ -283,10 +283,12 @@ impl platform::Platform for MacPlatform {
                     let urls = panel.URLs();
                     for i in 0..urls.count() {
                         let url = urls.objectAtIndex(i);
-                        let path = std::ffi::CStr::from_ptr(url.path().UTF8String())
-                            .to_string_lossy()
-                            .to_string();
-                        result.push(PathBuf::from(path));
+                        if url.isFileURL() == YES {
+                            let path = std::ffi::CStr::from_ptr(url.path().UTF8String())
+                                .to_string_lossy()
+                                .to_string();
+                            result.push(PathBuf::from(path));
+                        }
                     }
                     Some(result)
                 } else {
@@ -317,10 +319,14 @@ impl platform::Platform for MacPlatform {
             let block = ConcreteBlock::new(move |response: NSModalResponse| {
                 let result = if response == NSModalResponse::NSModalResponseOk {
                     let url = panel.URL();
-                    let path = std::ffi::CStr::from_ptr(url.path().UTF8String())
-                        .to_string_lossy()
-                        .to_string();
-                    Some(PathBuf::from(path))
+                    if url.isFileURL() == YES {
+                        let path = std::ffi::CStr::from_ptr(url.path().UTF8String())
+                            .to_string_lossy()
+                            .to_string();
+                        Some(PathBuf::from(path))
+                    } else {
+                        None
+                    }
                 } else {
                     None
                 };