diff --git a/platform/macos/os_macos.h b/platform/macos/os_macos.h index c539f7f529c..eb7a30203aa 100644 --- a/platform/macos/os_macos.h +++ b/platform/macos/os_macos.h @@ -98,6 +98,7 @@ public: virtual String get_system_dir(SystemDir p_dir, bool p_shared_storage = true) const override; virtual Error shell_open(String p_uri) override; + virtual Error shell_show_in_file_manager(String p_path, bool p_open_folder) override; virtual String get_locale() const override; diff --git a/platform/macos/os_macos.mm b/platform/macos/os_macos.mm index 71a250153bc..74cdef6f259 100644 --- a/platform/macos/os_macos.mm +++ b/platform/macos/os_macos.mm @@ -287,6 +287,27 @@ String OS_MacOS::get_system_dir(SystemDir p_dir, bool p_shared_storage) const { return ret; } +Error OS_MacOS::shell_show_in_file_manager(String p_path, bool p_open_folder) { + bool open_folder = false; + if (DirAccess::dir_exists_absolute(p_path) && p_open_folder) { + open_folder = true; + } + + if (!p_path.begins_with("file://")) { + p_path = String("file://") + p_path; + } + + NSString *string = [NSString stringWithUTF8String:p_path.utf8().get_data()]; + NSURL *uri = [[NSURL alloc] initWithString:[string stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLFragmentAllowedCharacterSet]]]; + + if (open_folder) { + [[NSWorkspace sharedWorkspace] openURL:uri]; + } else { + [[NSWorkspace sharedWorkspace] activateFileViewerSelectingURLs:@[ uri ]]; + } + return OK; +} + Error OS_MacOS::shell_open(String p_uri) { NSString *string = [NSString stringWithUTF8String:p_uri.utf8().get_data()]; NSURL *uri = [[NSURL alloc] initWithString:string];