diff --git a/src/SFML/Window/OSX/WindowImplCocoa.hpp b/src/SFML/Window/OSX/WindowImplCocoa.hpp index cadf97c2e..7c3895159 100644 --- a/src/SFML/Window/OSX/WindowImplCocoa.hpp +++ b/src/SFML/Window/OSX/WindowImplCocoa.hpp @@ -311,7 +311,8 @@ private: //////////////////////////////////////////////////////////// // Member data //////////////////////////////////////////////////////////// - WindowImplDelegateRef myDelegate; ///< Implementation in Obj-C. + WindowImplDelegateRef myDelegate; ///< Implementation in Obj-C. + bool myShowCursor; ///< Is the cursor displayed or hidden ? }; } // namespace priv diff --git a/src/SFML/Window/OSX/WindowImplCocoa.mm b/src/SFML/Window/OSX/WindowImplCocoa.mm index 84c4ae827..7697e2eb0 100644 --- a/src/SFML/Window/OSX/WindowImplCocoa.mm +++ b/src/SFML/Window/OSX/WindowImplCocoa.mm @@ -44,6 +44,7 @@ namespace priv //////////////////////////////////////////////////////////// WindowImplCocoa::WindowImplCocoa(WindowHandle handle) +: myShowCursor(true) { // Ask for a pool. RetainPool(); @@ -91,6 +92,7 @@ WindowImplCocoa::WindowImplCocoa(WindowHandle handle) WindowImplCocoa::WindowImplCocoa(VideoMode mode, const std::string& title, unsigned long style) +: myShowCursor(true) { // Transform the app process. SetUpProcess(); @@ -183,6 +185,10 @@ void WindowImplCocoa::WindowResized(unsigned int width, unsigned int height) //////////////////////////////////////////////////////////// void WindowImplCocoa::WindowLostFocus(void) { + if (!myShowCursor) { + [myDelegate showMouseCursor]; // Make sur the cursor is visible + } + Event event; event.Type = Event::LostFocus; @@ -193,6 +199,10 @@ void WindowImplCocoa::WindowLostFocus(void) //////////////////////////////////////////////////////////// void WindowImplCocoa::WindowGainedFocus(void) { + if (!myShowCursor) { + [myDelegate hideMouseCursor]; // Restore user's setting + } + Event event; event.Type = Event::GainedFocus; @@ -255,6 +265,10 @@ void WindowImplCocoa::MouseWheelScrolledAt(float delta, int x, int y) //////////////////////////////////////////////////////////// void WindowImplCocoa::MouseMovedIn(void) { + if (!myShowCursor) { + [myDelegate hideMouseCursor]; // Restore user's setting + } + Event event; event.Type = Event::MouseEntered; @@ -264,6 +278,10 @@ void WindowImplCocoa::MouseMovedIn(void) //////////////////////////////////////////////////////////// void WindowImplCocoa::MouseMovedOut(void) { + if (!myShowCursor) { + [myDelegate showMouseCursor]; // Make sur the cursor is visible + } + Event event; event.Type = Event::MouseLeft; @@ -330,7 +348,9 @@ WindowHandle WindowImplCocoa::GetSystemHandle() const //////////////////////////////////////////////////////////// void WindowImplCocoa::ShowMouseCursor(bool show) { - if (show) { + myShowCursor = show; + + if (myShowCursor) { [myDelegate showMouseCursor]; } else { [myDelegate hideMouseCursor];