Browse Source

Fixed the fallback logic of OS::shell_show_in_file_manager

Daylily-Zeleen 2 years ago
parent
commit
9dd9818c88
2 changed files with 7 additions and 5 deletions
  1. 6 4
      core/os/os.cpp
  2. 1 1
      doc/classes/OS.xml

+ 6 - 4
core/os/os.cpp

@@ -295,12 +295,14 @@ Error OS::shell_open(String p_uri) {
 }
 }
 
 
 Error OS::shell_show_in_file_manager(String p_path, bool p_open_folder) {
 Error OS::shell_show_in_file_manager(String p_path, bool p_open_folder) {
-	if (!p_path.begins_with("file://")) {
-		p_path = String("file://") + p_path;
-	}
-	if (!p_path.ends_with("/")) {
+	p_path = p_path.trim_prefix("file://");
+
+	if (!DirAccess::dir_exists_absolute(p_path)) {
 		p_path = p_path.get_base_dir();
 		p_path = p_path.get_base_dir();
 	}
 	}
+
+	p_path = String("file://") + p_path;
+
 	return shell_open(p_path);
 	return shell_open(p_path);
 }
 }
 // implement these with the canvas?
 // implement these with the canvas?

+ 1 - 1
doc/classes/OS.xml

@@ -657,7 +657,7 @@
 				Requests the OS to open the file manager, then navigate to the given [param file_or_dir_path] and select the target file or folder.
 				Requests the OS to open the file manager, then navigate to the given [param file_or_dir_path] and select the target file or folder.
 				If [param file_or_dir_path] is a valid directory path, and [param open_folder] is [code]true[/code], the method will open the file manager and enter the target folder without selecting anything.
 				If [param file_or_dir_path] is a valid directory path, and [param open_folder] is [code]true[/code], the method will open the file manager and enter the target folder without selecting anything.
 				Use [method ProjectSettings.globalize_path] to convert a [code]res://[/code] or [code]user://[/code] path into a system path for use with this method.
 				Use [method ProjectSettings.globalize_path] to convert a [code]res://[/code] or [code]user://[/code] path into a system path for use with this method.
-				[b]Note:[/b] Currently this method is only implemented on Windows. On other platforms, it will fallback to [method shell_open] with a directory path for [param file_or_dir_path].
+				[b]Note:[/b] Currently this method is only implemented on Windows and macOS. On other platforms, it will fallback to [method shell_open] with a directory path of [param file_or_dir_path] with prefix [code]file://[/code].
 			</description>
 			</description>
 		</method>
 		</method>
 		<method name="unset_environment" qualifiers="const">
 		<method name="unset_environment" qualifiers="const">