From 4af50da9f7e2e2d6a3aac567996d0f48e2bd5613 Mon Sep 17 00:00:00 2001 From: jules Date: Tue, 14 Apr 2015 11:30:25 +0100 Subject: [PATCH] Modified app startup code so that JUCEApplication::shutdown() will still get called even if the app is aborted during the initialise() method. --- .../messages/juce_ApplicationBase.cpp | 2 +- .../messages/juce_ApplicationBase.h | 3 +- .../native/juce_android_Windowing.cpp | 12 ++++++-- .../native/juce_ios_Windowing.mm | 29 ++++++++++++------- 4 files changed, 29 insertions(+), 17 deletions(-) diff --git a/modules/juce_events/messages/juce_ApplicationBase.cpp b/modules/juce_events/messages/juce_ApplicationBase.cpp index dafc27e66b..8bbda9bafe 100644 --- a/modules/juce_events/messages/juce_ApplicationBase.cpp +++ b/modules/juce_events/messages/juce_ApplicationBase.cpp @@ -232,7 +232,7 @@ int JUCEApplicationBase::main() jassert (app != nullptr); if (! app->initialiseApp()) - return app->getApplicationReturnValue(); + return app->shutdownApp(); JUCE_TRY { diff --git a/modules/juce_events/messages/juce_ApplicationBase.h b/modules/juce_events/messages/juce_ApplicationBase.h index 073e5d6c71..7335019804 100644 --- a/modules/juce_events/messages/juce_ApplicationBase.h +++ b/modules/juce_events/messages/juce_ApplicationBase.h @@ -259,6 +259,7 @@ public: static CreateInstanceFunction createInstance; virtual bool initialiseApp(); + int shutdownApp(); static void JUCE_CALLTYPE sendUnhandledException (const std::exception*, const char* sourceFile, int lineNumber); bool sendCommandLineToPreexistingInstance(); #endif @@ -274,8 +275,6 @@ private: friend struct ContainerDeletePolicy; ScopedPointer multipleInstanceHandler; - int shutdownApp(); - JUCE_DECLARE_NON_COPYABLE (JUCEApplicationBase) }; diff --git a/modules/juce_gui_basics/native/juce_android_Windowing.cpp b/modules/juce_gui_basics/native/juce_android_Windowing.cpp index 6946c68eaf..505625aef0 100644 --- a/modules/juce_gui_basics/native/juce_android_Windowing.cpp +++ b/modules/juce_gui_basics/native/juce_android_Windowing.cpp @@ -41,9 +41,15 @@ JUCE_JNI_CALLBACK (JUCE_ANDROID_ACTIVITY_CLASSNAME, launchApp, void, (JNIEnv* en initialiseJuce_GUI(); - JUCEApplicationBase* app = JUCEApplicationBase::createInstance(); - if (! app->initialiseApp()) - exit (app->getApplicationReturnValue()); + if (JUCEApplicationBase* app = JUCEApplicationBase::createInstance()) + { + if (! app->initialiseApp()) + exit (app->shutdownApp()); + } + else + { + jassertfalse; // you must supply an application object for an android app! + } jassert (MessageManager::getInstance()->isThisTheMessageThread()); } diff --git a/modules/juce_gui_basics/native/juce_ios_Windowing.mm b/modules/juce_gui_basics/native/juce_ios_Windowing.mm index 11af512e31..531d3787f7 100644 --- a/modules/juce_gui_basics/native/juce_ios_Windowing.mm +++ b/modules/juce_gui_basics/native/juce_ios_Windowing.mm @@ -43,44 +43,51 @@ extern bool isIOSAppActive; - (void) applicationDidFinishLaunching: (UIApplication*) application { - (void) application; + ignoreUnused (application); initialiseJuce_GUI(); - JUCEApplicationBase* app = JUCEApplicationBase::createInstance(); - - if (! app->initialiseApp()) - exit (0); + if (JUCEApplicationBase* app = JUCEApplicationBase::createInstance()) + { + if (! app->initialiseApp()) + exit (app->shutdownApp()); + } + else + { + jassertfalse; // you must supply an application object for an iOS app! + } } - (void) applicationWillTerminate: (UIApplication*) application { - (void) application; + ignoreUnused (application); JUCEApplicationBase::appWillTerminateByForce(); } - (void) applicationDidEnterBackground: (UIApplication*) application { - (void) application; + ignoreUnused (application); + if (JUCEApplicationBase* const app = JUCEApplicationBase::getInstance()) app->suspended(); } - (void) applicationWillEnterForeground: (UIApplication*) application { - (void) application; + ignoreUnused (application); + if (JUCEApplicationBase* const app = JUCEApplicationBase::getInstance()) app->resumed(); } - (void) applicationDidBecomeActive: (UIApplication*) application { - (void) application; + ignoreUnused (application); isIOSAppActive = true; } - (void) applicationWillResignActive: (UIApplication*) application { - (void) application; + ignoreUnused (application); isIOSAppActive = false; } @@ -207,7 +214,7 @@ void JUCE_CALLTYPE NativeMessageBox::showMessageBox (AlertWindow::AlertIconType JUCE_AUTORELEASEPOOL { iOSMessageBox mb (title, message, @"OK", nil, nil, nullptr, false); - (void) mb.getResult(); + ignoreUnused (mb.getResult()); } } #endif