diff --git a/src/SFML/Window/OSX/WindowImplCocoa.hpp b/src/SFML/Window/OSX/WindowImplCocoa.hpp index 49ee6324..9ccee81b 100644 --- a/src/SFML/Window/OSX/WindowImplCocoa.hpp +++ b/src/SFML/Window/OSX/WindowImplCocoa.hpp @@ -229,6 +229,13 @@ public: //////////////////////////////////////////////////////////// void ApplyContext(NSOpenGLContextRef context) const; + //////////////////////////////////////////////////////////// + /// \brief Change the type of the current process to become a full GUI app. + /// Also ensure NSApp is constructed. + /// + //////////////////////////////////////////////////////////// + static void SetUpProcess(void); + private: //////////////////////////////////////////////////////////// /// \brief Process incoming events from the operating system @@ -315,18 +322,6 @@ private: //////////////////////////////////////////////////////////// virtual void SetIcon(unsigned int width, unsigned int height, const Uint8* pixels); - //////////////////////////////////////////////////////////// - /// \brief Construct the pool after ensuring NSApp is valid. - /// - //////////////////////////////////////////////////////////// - void SetUpPoolAndApplication(void); - - //////////////////////////////////////////////////////////// - /// \brief Change the type of the current process to become a full GUI app. - /// - //////////////////////////////////////////////////////////// - static void SetUpProcessAsApplication(void); - //////////////////////////////////////////////////////////// // Member data //////////////////////////////////////////////////////////// diff --git a/src/SFML/Window/OSX/WindowImplCocoa.mm b/src/SFML/Window/OSX/WindowImplCocoa.mm index 61cfbb46..e6d531cc 100644 --- a/src/SFML/Window/OSX/WindowImplCocoa.mm +++ b/src/SFML/Window/OSX/WindowImplCocoa.mm @@ -43,8 +43,9 @@ namespace priv //////////////////////////////////////////////////////////// WindowImplCocoa::WindowImplCocoa(WindowHandle handle) -{ - SetUpPoolAndApplication(); +{ + // Create the pool. + myPool = [[NSAutoreleasePool alloc] init]; // Treat the handle as it real type id nsHandle = (id)handle; @@ -90,10 +91,11 @@ WindowImplCocoa::WindowImplCocoa(VideoMode mode, const std::string& title, unsigned long style) { - SetUpPoolAndApplication(); - // Transform the app process. - SetUpProcessAsApplication(); + SetUpProcess(); + + // Create the pool. + myPool = [[NSAutoreleasePool alloc] init]; // Don't forget to update our parent (that is, WindowImpl) size : myWidth = mode.Width; @@ -122,6 +124,30 @@ void WindowImplCocoa::ApplyContext(NSOpenGLContextRef context) const } +//////////////////////////////////////////////////////////// +void WindowImplCocoa::SetUpProcess(void) +{ + static bool isTheProcessSetAsApplication = false; + + if (!isTheProcessSetAsApplication) { + // Do it only once ! + isTheProcessSetAsApplication = true; + + // Set the process as a normal application so it can get focus. + ProcessSerialNumber psn; + if (!GetCurrentProcess(&psn)) { + TransformProcessType(&psn, kProcessTransformToForegroundApplication); + SetFrontProcess(&psn); + } + + // Tell the application to stop bouncing in the Dock. + [[NSApplication sharedApplication] finishLaunching]; + // NOTE : This last call won't harm anything even if SFML window was + // created with an external handle. + } +} + + #pragma mark #pragma mark WindowImplCocoa's window-event methods @@ -369,43 +395,6 @@ void WindowImplCocoa::SetIcon(unsigned int width, unsigned int height, const Uin { [myDelegate setIconTo:width by:height with:pixels]; } - -#pragma mark -#pragma mark WindowImplCocoa's init methods - -//////////////////////////////////////////////////////////// -void WindowImplCocoa::SetUpPoolAndApplication(void) -{ - // Ensure NSApp exists. - [NSApplication sharedApplication]; - - // Create the pool. - myPool = [[NSAutoreleasePool alloc] init]; -} - - -//////////////////////////////////////////////////////////// -void WindowImplCocoa::SetUpProcessAsApplication(void) -{ - static bool isTheProcessSetAsApplication = false; - - if (!isTheProcessSetAsApplication) { - // Do it only once ! - isTheProcessSetAsApplication = true; - - // Set the process as a normal application so it can get focus. - ProcessSerialNumber psn; - if (!GetCurrentProcess(&psn)) { - TransformProcessType(&psn, kProcessTransformToForegroundApplication); - SetFrontProcess(&psn); - } - - // Tell the application to stop bouncing in the Dock. - [[NSApplication sharedApplication] finishLaunching]; - // NOTE : This last call won't harm anything even if SFML window was - // created with an external handle. - } -} } // namespace priv