diff options
Diffstat (limited to 'platform')
-rw-r--r-- | platform/android/detect.py | 8 | ||||
-rw-r--r-- | platform/linuxbsd/display_server_x11.cpp | 8 | ||||
-rw-r--r-- | platform/osx/display_server_osx.mm | 4 | ||||
-rw-r--r-- | platform/osx/godot_application_delegate.h | 1 | ||||
-rw-r--r-- | platform/osx/godot_application_delegate.mm | 65 | ||||
-rw-r--r-- | platform/osx/godot_main_osx.mm | 9 | ||||
-rw-r--r-- | platform/osx/os_osx.h | 6 | ||||
-rw-r--r-- | platform/osx/os_osx.mm | 8 | ||||
-rw-r--r-- | platform/windows/display_server_windows.cpp | 4 |
9 files changed, 69 insertions, 44 deletions
diff --git a/platform/android/detect.py b/platform/android/detect.py index 47cfade765..2ff5bf59ea 100644 --- a/platform/android/detect.py +++ b/platform/android/detect.py @@ -96,22 +96,19 @@ def configure(env): if env["android_arch"] == "armv7": target_triple = "armv7a-linux-androideabi" - bin_utils = "arm-linux-androideabi" env.extra_suffix = ".armv7" + env.extra_suffix elif env["android_arch"] == "arm64v8": target_triple = "aarch64-linux-android" - bin_utils = target_triple env.extra_suffix = ".armv8" + env.extra_suffix elif env["android_arch"] == "x86": target_triple = "i686-linux-android" - bin_utils = target_triple env.extra_suffix = ".x86" + env.extra_suffix elif env["android_arch"] == "x86_64": target_triple = "x86_64-linux-android" - bin_utils = target_triple env.extra_suffix = ".x86_64" + env.extra_suffix target_option = ["-target", target_triple + str(get_min_sdk_version(env["ndk_platform"]))] + env.Append(ASFLAGS=[target_option, "-c"]) env.Append(CCFLAGS=target_option) env.Append(LINKFLAGS=target_option) @@ -152,13 +149,12 @@ def configure(env): toolchain_path = ndk_root + "/toolchains/llvm/prebuilt/" + host_subpath compiler_path = toolchain_path + "/bin" - bin_utils_path = toolchain_path + "/" + bin_utils + "/bin" env["CC"] = compiler_path + "/clang" env["CXX"] = compiler_path + "/clang++" env["AR"] = compiler_path + "/llvm-ar" env["RANLIB"] = compiler_path + "/llvm-ranlib" - env["AS"] = bin_utils_path + "/as" + env["AS"] = compiler_path + "/clang" # Disable exceptions and rtti on non-tools (template) builds if env["tools"]: diff --git a/platform/linuxbsd/display_server_x11.cpp b/platform/linuxbsd/display_server_x11.cpp index ee26abab86..b0f87484b9 100644 --- a/platform/linuxbsd/display_server_x11.cpp +++ b/platform/linuxbsd/display_server_x11.cpp @@ -4175,13 +4175,17 @@ void DisplayServerX11::process_events() { void DisplayServerX11::release_rendering_thread() { #if defined(GLES3_ENABLED) - gl_manager->release_current(); + if (gl_manager) { + gl_manager->release_current(); + } #endif } void DisplayServerX11::make_rendering_thread() { #if defined(GLES3_ENABLED) - gl_manager->make_current(); + if (gl_manager) { + gl_manager->make_current(); + } #endif } diff --git a/platform/osx/display_server_osx.mm b/platform/osx/display_server_osx.mm index b6a5813bd0..4307685422 100644 --- a/platform/osx/display_server_osx.mm +++ b/platform/osx/display_server_osx.mm @@ -2920,7 +2920,9 @@ void DisplayServerOSX::make_rendering_thread() { void DisplayServerOSX::swap_buffers() { #if defined(GLES3_ENABLED) - gl_manager->swap_buffers(); + if (gl_manager) { + gl_manager->swap_buffers(); + } #endif } diff --git a/platform/osx/godot_application_delegate.h b/platform/osx/godot_application_delegate.h index 8eec762d8f..f5b67b580f 100644 --- a/platform/osx/godot_application_delegate.h +++ b/platform/osx/godot_application_delegate.h @@ -40,6 +40,7 @@ - (void)forceUnbundledWindowActivationHackStep1; - (void)forceUnbundledWindowActivationHackStep2; - (void)forceUnbundledWindowActivationHackStep3; +- (void)handleAppleEvent:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent; @end #endif // GODOT_APPLICATION_DELEGATE_H diff --git a/platform/osx/godot_application_delegate.mm b/platform/osx/godot_application_delegate.mm index dc82075c44..4d3558b273 100644 --- a/platform/osx/godot_application_delegate.mm +++ b/platform/osx/godot_application_delegate.mm @@ -67,6 +67,52 @@ } } +- (id)init { + self = [super init]; + + NSAppleEventManager *aem = [NSAppleEventManager sharedAppleEventManager]; + [aem setEventHandler:self andSelector:@selector(handleAppleEvent:withReplyEvent:) forEventClass:kInternetEventClass andEventID:kAEGetURL]; + [aem setEventHandler:self andSelector:@selector(handleAppleEvent:withReplyEvent:) forEventClass:kCoreEventClass andEventID:kAEOpenDocuments]; + + return self; +} + +- (void)handleAppleEvent:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent { + OS_OSX *os = (OS_OSX *)OS::get_singleton(); + if (!event || !os) { + return; + } + + List<String> args; + if (([event eventClass] == kInternetEventClass) && ([event eventID] == kAEGetURL)) { + // Opening URL scheme. + NSString *url = [[event paramDescriptorForKeyword:keyDirectObject] stringValue]; + args.push_back(vformat("--uri=\"%s\"", String::utf8([url UTF8String]))); + } + + if (([event eventClass] == kCoreEventClass) && ([event eventID] == kAEOpenDocuments)) { + // Opening file association. + NSAppleEventDescriptor *files = [event paramDescriptorForKeyword:keyDirectObject]; + if (files) { + NSInteger count = [files numberOfItems]; + for (NSInteger i = 1; i <= count; i++) { + NSURL *url = [NSURL URLWithString:[[files descriptorAtIndex:i] stringValue]]; + args.push_back(String::utf8([url.path UTF8String])); + } + } + } + + if (!args.is_empty()) { + if (os->get_main_loop()) { + // Application is already running, open a new instance with the URL/files as command line arguments. + os->create_instance(args); + } else { + // Application is just started, add to the list of command line arguments and continue. + os->set_cmdline_platform_args(args); + } + } +} + - (void)applicationDidResignActive:(NSNotification *)notification { DisplayServerOSX *ds = (DisplayServerOSX *)DisplayServer::get_singleton(); if (ds) { @@ -99,25 +145,6 @@ } } -- (BOOL)application:(NSApplication *)sender openFile:(NSString *)filename { - // Note: may be called called before main loop init! - OS_OSX *os = (OS_OSX *)OS::get_singleton(); - if (os) { - os->set_open_with_filename(String::utf8([filename UTF8String])); - } - -#ifdef TOOLS_ENABLED - // Open new instance. - if (os && os->get_main_loop()) { - List<String> args; - args.push_back(os->get_open_with_filename()); - String exec = os->get_executable_path(); - os->create_process(exec, args); - } -#endif - return YES; -} - - (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender { DisplayServerOSX *ds = (DisplayServerOSX *)DisplayServer::get_singleton(); if (ds) { diff --git a/platform/osx/godot_main_osx.mm b/platform/osx/godot_main_osx.mm index 354edca096..722928ad60 100644 --- a/platform/osx/godot_main_osx.mm +++ b/platform/osx/godot_main_osx.mm @@ -74,14 +74,7 @@ int main(int argc, char **argv) { // We must override main when testing is enabled. TEST_MAIN_OVERRIDE - if (os.get_open_with_filename() != "") { - char *argv_c = (char *)malloc(os.get_open_with_filename().utf8().size()); - memcpy(argv_c, os.get_open_with_filename().utf8().get_data(), os.get_open_with_filename().utf8().size()); - err = Main::setup(argv[0], 1, &argv_c); - free(argv_c); - } else { - err = Main::setup(argv[0], argc - first_arg, &argv[first_arg]); - } + err = Main::setup(argv[0], argc - first_arg, &argv[first_arg]); if (err == ERR_HELP) { // Returned by --help and --version, so success. return 0; diff --git a/platform/osx/os_osx.h b/platform/osx/os_osx.h index e4ec411c96..b105be4a06 100644 --- a/platform/osx/os_osx.h +++ b/platform/osx/os_osx.h @@ -57,7 +57,7 @@ class OS_OSX : public OS_Unix { MainLoop *main_loop = nullptr; - String open_with_filename; + List<String> launch_service_args; static _FORCE_INLINE_ String get_framework_executable(const String &p_path); static void pre_wait_observer_cb(CFRunLoopObserverRef p_observer, CFRunLoopActivity p_activiy, void *p_context); @@ -73,8 +73,8 @@ protected: virtual void delete_main_loop() override; public: - String get_open_with_filename() const; - void set_open_with_filename(const String &p_path); + virtual void set_cmdline_platform_args(const List<String> &p_args); + virtual List<String> get_cmdline_platform_args() const override; virtual String get_name() const override; diff --git a/platform/osx/os_osx.mm b/platform/osx/os_osx.mm index a8fa56e34b..5230ed4155 100644 --- a/platform/osx/os_osx.mm +++ b/platform/osx/os_osx.mm @@ -121,12 +121,12 @@ void OS_OSX::delete_main_loop() { main_loop = nullptr; } -String OS_OSX::get_open_with_filename() const { - return open_with_filename; +void OS_OSX::set_cmdline_platform_args(const List<String> &p_args) { + launch_service_args = p_args; } -void OS_OSX::set_open_with_filename(const String &p_path) { - open_with_filename = p_path; +List<String> OS_OSX::get_cmdline_platform_args() const { + return launch_service_args; } String OS_OSX::get_name() const { diff --git a/platform/windows/display_server_windows.cpp b/platform/windows/display_server_windows.cpp index 03d0d0e0bd..e66fa142a7 100644 --- a/platform/windows/display_server_windows.cpp +++ b/platform/windows/display_server_windows.cpp @@ -656,7 +656,9 @@ void DisplayServerWindows::delete_sub_window(WindowID p_window) { void DisplayServerWindows::gl_window_make_current(DisplayServer::WindowID p_window_id) { #if defined(GLES3_ENABLED) - gl_manager->window_make_current(p_window_id); + if (gl_manager) { + gl_manager->window_make_current(p_window_id); + } #endif } |