From 6fb6107e6a9335c6ca43e262d51d6f0441c92a1c Mon Sep 17 00:00:00 2001 From: Hugo Locurcio Date: Tue, 28 Apr 2020 19:25:02 +0200 Subject: [PATCH] Warn when trying to open `res://` or `user://` with `OS.shell_open()` `OS.shell_open()` will pass on the path directly to the OS' shell handler (which can handle file paths or URLs). It can't handle Godot-specific paths, so these need to be converted with `ProjectSettings.globalize_path()` first. (cherry picked from commit d46e411b4475ffd5cc6871b5e5dc70150d930164) --- core/bind/core_bind.cpp | 5 +++++ doc/classes/OS.xml | 1 + 2 files changed, 6 insertions(+) diff --git a/core/bind/core_bind.cpp b/core/bind/core_bind.cpp index efd7e3dbf5b..60fa7df8605 100644 --- a/core/bind/core_bind.cpp +++ b/core/bind/core_bind.cpp @@ -489,6 +489,11 @@ String _OS::get_executable_path() const { Error _OS::shell_open(String p_uri) { + if (p_uri.begins_with("res://")) { + WARN_PRINT("Attempting to open an URL with the \"res://\" protocol. Use `ProjectSettings.globalize_path()` to convert a Godot-specific path to a system path before opening it with `OS.shell_open()`."); + } else if (p_uri.begins_with("user://")) { + WARN_PRINT("Attempting to open an URL with the \"user://\" protocol. Use `ProjectSettings.globalize_path()` to convert a Godot-specific path to a system path before opening it with `OS.shell_open()`."); + } return OS::get_singleton()->shell_open(p_uri); }; diff --git a/doc/classes/OS.xml b/doc/classes/OS.xml index c74926bd1be..82113d6b003 100644 --- a/doc/classes/OS.xml +++ b/doc/classes/OS.xml @@ -892,6 +892,7 @@ - [code]OS.shell_open("C:\\Users\name\Downloads")[/code] on Windows opens the file explorer at the user's Downloads folder. - [code]OS.shell_open("https://godotengine.org")[/code] opens the default web browser on the official Godot website. - [code]OS.shell_open("mailto:example@example.com")[/code] opens the default email client with the "To" field set to [code]example@example.com[/code]. See [url=https://blog.escapecreative.com/customizing-mailto-links/]Customizing [code]mailto:[/code] Links[/url] for a list of fields that can be added. + 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] This method is implemented on Android, iOS, HTML5, Linux, macOS and Windows.