From 3f5f58b9d8a6f86c53e3b672e45b31c9ac85e993 Mon Sep 17 00:00:00 2001 From: Daniel Ting Date: Fri, 3 Jul 2020 23:00:48 -0500 Subject: [PATCH] Fix opening URLS with special characters in macOS The Online Tutorials section of InputMap in the editor's built-in documentation viewer contains this link: docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html#inputmap The macOS implementation for opening a link percent-encodes it before sending it to the browser, resulting in a 404. This is to fix #13422 where filenames with special characters could not be opened in Finder. However, this breaks URLS so I added a check to see if the resource scheme is file:// and if so, only then is it escaped. This allows other schemes like `http`, `ftp`, and `mailto` to be used. (cherry picked from commit b8e6ff9a7fb2eb98e92344d567a1ef085dfb78a4) --- platform/osx/os_osx.mm | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/platform/osx/os_osx.mm b/platform/osx/os_osx.mm index f330ec43a8f..ab31e99e113 100644 --- a/platform/osx/os_osx.mm +++ b/platform/osx/os_osx.mm @@ -2320,8 +2320,13 @@ void OS_OSX::make_rendering_thread() { } Error OS_OSX::shell_open(String p_uri) { - - [[NSWorkspace sharedWorkspace] openURL:[[NSURL alloc] initWithString:[[NSString stringWithUTF8String:p_uri.utf8().get_data()] stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLFragmentAllowedCharacterSet]]]]; + NSString *string = [NSString stringWithUTF8String:p_uri.utf8().get_data()]; + NSURL *uri = [[NSURL alloc] initWithString:string]; + // Escape special characters in filenames + if (!uri || !uri.scheme || [uri.scheme isEqual:@"file"]) { + uri = [[NSURL alloc] initWithString:[string stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLFragmentAllowedCharacterSet]]]; + } + [[NSWorkspace sharedWorkspace] openURL:uri]; return OK; }