From 10ace666e1be45efbee7f3b01508dffb46af86af Mon Sep 17 00:00:00 2001 From: warmenhoven <eric@warmenhoven.org> Date: Thu, 26 Jan 2023 14:10:01 -0500 Subject: [PATCH] On iOS, pause while in background (#14907) --- .../project.pbxproj | 4 +++ ui/drivers/ui_cocoatouch.m | 36 +++++++++++++++---- 2 files changed, 33 insertions(+), 7 deletions(-) diff --git a/pkg/apple/RetroArch_iOS11_Metal.xcodeproj/project.pbxproj b/pkg/apple/RetroArch_iOS11_Metal.xcodeproj/project.pbxproj index 51d28ebe19..d990e52cf5 100644 --- a/pkg/apple/RetroArch_iOS11_Metal.xcodeproj/project.pbxproj +++ b/pkg/apple/RetroArch_iOS11_Metal.xcodeproj/project.pbxproj @@ -1405,6 +1405,8 @@ "-DHAVE_PATCH", "-DHAVE_UPDATE_CORE_INFO", "-DHAVE_VULKAN", + "-D_7ZIP_ST", + "-DHAVE_7ZIP", ); PRODUCT_BUNDLE_IDENTIFIER = com.libretro.dist.ios.RetroArch; PRODUCT_NAME = RetroArch; @@ -1513,6 +1515,8 @@ "-DHAVE_PATCH", "-DHAVE_UPDATE_CORE_INFO", "-DHAVE_VULKAN", + "-D_7ZIP_ST", + "-DHAVE_7ZIP", ); "OTHER_CFLAGS[arch=*]" = ( "-DNS_BLOCK_ASSERTIONS=1", diff --git a/ui/drivers/ui_cocoatouch.m b/ui/drivers/ui_cocoatouch.m index 615de9f4f9..cd272686bb 100644 --- a/ui/drivers/ui_cocoatouch.m +++ b/ui/drivers/ui_cocoatouch.m @@ -75,6 +75,27 @@ static void rarch_draw_observer(CFRunLoopObserverRef observer, CFRunLoopWakeUp(CFRunLoopGetMain()); } +static void rarch_start_draw_observer() +{ + if (iterate_observer && CFRunLoopObserverIsValid(iterate_observer)) + return; + + if (iterate_observer != NULL) + CFRelease(iterate_observer); + iterate_observer = CFRunLoopObserverCreate(0, kCFRunLoopBeforeWaiting, + true, 0, rarch_draw_observer, 0); + CFRunLoopAddObserver(CFRunLoopGetMain(), iterate_observer, kCFRunLoopCommonModes); +} + +static void rarch_stop_draw_observer() +{ + if (!iterate_observer || !CFRunLoopObserverIsValid(iterate_observer)) + return; + CFRunLoopObserverInvalidate(iterate_observer); + CFRelease(iterate_observer); + iterate_observer = NULL; +} + apple_frontend_settings_t apple_frontend_settings; void get_ios_version(int *major, int *minor) @@ -417,9 +438,7 @@ enum rarch_main(argc, argv, NULL); - iterate_observer = CFRunLoopObserverCreate(0, kCFRunLoopBeforeWaiting, - true, 0, rarch_draw_observer, 0); - CFRunLoopAddObserver(CFRunLoopGetMain(), iterate_observer, kCFRunLoopCommonModes); + rarch_start_draw_observer(); #ifdef HAVE_MFI extern void *apple_gamecontroller_joypad_init(void *data); @@ -427,17 +446,20 @@ enum #endif } -- (void)applicationDidEnterBackground:(UIApplication *)application { } +- (void)applicationDidEnterBackground:(UIApplication *)application +{ + rarch_stop_draw_observer(); +} - (void)applicationWillTerminate:(UIApplication *)application { - CFRunLoopObserverInvalidate(iterate_observer); - CFRelease(iterate_observer); - iterate_observer = NULL; + rarch_stop_draw_observer(); + retroarch_main_quit(); } - (void)applicationDidBecomeActive:(UIApplication *)application { + rarch_start_draw_observer(); settings_t *settings = config_get_ptr(); bool ui_companion_start_on_boot = settings->bools.ui_companion_start_on_boot;