summaryrefslogtreecommitdiffstats
path: root/platform/ios
diff options
context:
space:
mode:
authorZach Coleman <ztc0611@gmail.com>2023-11-17 08:23:06 -0500
committerZach Coleman <ztc0611@gmail.com>2024-02-04 21:10:06 -0500
commitfc7a63cbf3dcec176046b3ba047f40d367213cfb (patch)
treed1483c12b03c31a953a9f299de669ae36fe4335d /platform/ios
parentb4e2a24c1f62088b3f7ce0197afc90832fc25009 (diff)
downloadredot-engine-fc7a63cbf3dcec176046b3ba047f40d367213cfb.tar.gz
Enhance mobile suspend MainLoop Notifications
Diffstat (limited to 'platform/ios')
-rw-r--r--platform/ios/app_delegate.mm8
-rw-r--r--platform/ios/os_ios.h3
-rw-r--r--platform/ios/os_ios.mm28
3 files changed, 39 insertions, 0 deletions
diff --git a/platform/ios/app_delegate.mm b/platform/ios/app_delegate.mm
index 8a16f8fcc1..32ebf7be44 100644
--- a/platform/ios/app_delegate.mm
+++ b/platform/ios/app_delegate.mm
@@ -167,6 +167,14 @@ static ViewController *mainViewController = nil;
OS_IOS::get_singleton()->on_focus_in();
}
+- (void)applicationDidEnterBackground:(UIApplication *)application {
+ OS_IOS::get_singleton()->on_enter_background();
+}
+
+- (void)applicationWillEnterForeground:(UIApplication *)application {
+ OS_IOS::get_singleton()->on_exit_background();
+}
+
- (void)dealloc {
self.window = nil;
}
diff --git a/platform/ios/os_ios.h b/platform/ios/os_ios.h
index 06724d763f..9248d30387 100644
--- a/platform/ios/os_ios.h
+++ b/platform/ios/os_ios.h
@@ -129,6 +129,9 @@ public:
void on_focus_out();
void on_focus_in();
+
+ void on_enter_background();
+ void on_exit_background();
};
#endif // IOS_ENABLED
diff --git a/platform/ios/os_ios.mm b/platform/ios/os_ios.mm
index 6ac21fa9c8..078f8e8494 100644
--- a/platform/ios/os_ios.mm
+++ b/platform/ios/os_ios.mm
@@ -601,6 +601,10 @@ void OS_IOS::on_focus_out() {
DisplayServerIOS::get_singleton()->send_window_event(DisplayServer::WINDOW_EVENT_FOCUS_OUT);
}
+ if (OS::get_singleton()->get_main_loop()) {
+ OS::get_singleton()->get_main_loop()->notification(MainLoop::NOTIFICATION_APPLICATION_FOCUS_OUT);
+ }
+
[AppDelegate.viewController.godotView stopRendering];
audio_driver.stop();
@@ -615,10 +619,34 @@ void OS_IOS::on_focus_in() {
DisplayServerIOS::get_singleton()->send_window_event(DisplayServer::WINDOW_EVENT_FOCUS_IN);
}
+ if (OS::get_singleton()->get_main_loop()) {
+ OS::get_singleton()->get_main_loop()->notification(MainLoop::NOTIFICATION_APPLICATION_FOCUS_IN);
+ }
+
[AppDelegate.viewController.godotView startRendering];
audio_driver.start();
}
}
+void OS_IOS::on_enter_background() {
+ // Do not check for is_focused, because on_focus_out will always be fired first by applicationWillResignActive.
+
+ if (OS::get_singleton()->get_main_loop()) {
+ OS::get_singleton()->get_main_loop()->notification(MainLoop::NOTIFICATION_APPLICATION_PAUSED);
+ }
+
+ on_focus_out();
+}
+
+void OS_IOS::on_exit_background() {
+ if (!is_focused) {
+ on_focus_in();
+
+ if (OS::get_singleton()->get_main_loop()) {
+ OS::get_singleton()->get_main_loop()->notification(MainLoop::NOTIFICATION_APPLICATION_RESUMED);
+ }
+ }
+}
+
#endif // IOS_ENABLED