diff --git a/src/app/app.cpp b/src/app/app.cpp index 65d718bf3..425d7c552 100644 --- a/src/app/app.cpp +++ b/src/app/app.cpp @@ -658,6 +658,8 @@ void App::initialize(const AppOptions& options) LOG("Export sprite sheet: Done\n"); } + + she::instance()->finishLaunching(); } void App::run() diff --git a/src/she/alleg4/she.cpp b/src/she/alleg4/she.cpp index 37e14072a..b9ada0039 100644 --- a/src/she/alleg4/she.cpp +++ b/src/she/alleg4/she.cpp @@ -144,6 +144,10 @@ public: delete this; } + void finishLaunching() override { + // Do nothing + } + Capabilities capabilities() const override { return (Capabilities)(Capabilities::CanResizeDisplay); } @@ -197,6 +201,7 @@ public: set_color_conversion(old_color_conv); return sur; } + }; System* create_system() { diff --git a/src/she/osx/app.h b/src/she/osx/app.h index fa039f8eb..f0352b84d 100644 --- a/src/she/osx/app.h +++ b/src/she/osx/app.h @@ -16,10 +16,13 @@ namespace she { class OSXApp { public: + static OSXApp* instance(); + OSXApp(); ~OSXApp(); bool init(); + void finishLaunching(); private: class Impl; diff --git a/src/she/osx/app.mm b/src/she/osx/app.mm index 37c9cdb2d..801b0c962 100644 --- a/src/she/osx/app.mm +++ b/src/she/osx/app.mm @@ -28,23 +28,38 @@ public: [m_app setActivationPolicy:NSApplicationActivationPolicyRegular]; [m_app setDelegate:m_appDelegate]; [m_app activateIgnoringOtherApps:YES]; - [m_app finishLaunching]; return true; } + void finishLaunching() { + [m_app finishLaunching]; + } + private: NSApplication* m_app; OSXAppDelegate* m_appDelegate; }; +static OSXApp* g_instance = nullptr; + +// static +OSXApp* OSXApp::instance() +{ + return g_instance; +} + OSXApp::OSXApp() : m_impl(new Impl) { + ASSERT(!g_instance); + g_instance = this; } OSXApp::~OSXApp() { + ASSERT(g_instance == this); + g_instance = nullptr; } bool OSXApp::init() @@ -52,4 +67,9 @@ bool OSXApp::init() return m_impl->init(); } +void OSXApp::finishLaunching() +{ + m_impl->finishLaunching(); +} + } // namespace she diff --git a/src/she/skia/skia_system.h b/src/she/skia/skia_system.h index fcee2c9fb..a8a6d618a 100644 --- a/src/she/skia/skia_system.h +++ b/src/she/skia/skia_system.h @@ -21,6 +21,7 @@ #ifdef _WIN32 #include "she/win/event_queue.h" #elif __APPLE__ + #include "she/osx/app.h" #include "she/osx/event_queue.h" #else #include "she/x11/event_queue.h" @@ -51,6 +52,15 @@ public: delete this; } + void finishLaunching() override { +#if __APPLE__ + // Start processing NSApplicationDelegate events. (E.g. after + // calling this we'll receive application:openFiles: and we'll + // generate DropFiles events.) events + OSXApp::instance()->finishLaunching(); +#endif + } + Capabilities capabilities() const override { return Capabilities( int(Capabilities::MultipleDisplays) | diff --git a/src/she/system.h b/src/she/system.h index 7e7f0404a..2b1535b60 100644 --- a/src/she/system.h +++ b/src/she/system.h @@ -33,6 +33,7 @@ namespace she { public: virtual ~System() { } virtual void dispose() = 0; + virtual void finishLaunching() = 0; virtual Capabilities capabilities() const = 0; virtual Logger* logger() = 0; virtual NativeDialogs* nativeDialogs() = 0;