diff --git a/src/video/quartz/SDL_QuartzEvents.m b/src/video/quartz/SDL_QuartzEvents.m index 5b59a33b9..9878a5cc2 100644 --- a/src/video/quartz/SDL_QuartzEvents.m +++ b/src/video/quartz/SDL_QuartzEvents.m @@ -301,9 +301,10 @@ static void QZ_DoActivate (_THIS) { in_foreground = YES; - /* Hide the mouse cursor if was hidden */ - if (!cursor_visible) { + /* Hide the cursor if it was hidden by SDL_ShowCursor() */ + if (!cursor_visible && !cursor_hidden) { HideCursor (); + cursor_hidden = YES; } /* Regrab input, only if it was previously grabbed */ @@ -330,8 +331,11 @@ static void QZ_DoDeactivate (_THIS) { /* Reassociate mouse and cursor */ CGAssociateMouseAndMouseCursorPosition (1); - /* Show the cursor */ - ShowCursor (); + /* Show the cursor if it was hidden by SDL_ShowCursor() */ + if (!cursor_visible && cursor_hidden) { + ShowCursor (); + cursor_hidden = NO; + } SDL_PrivateAppActive (0, SDL_APPINPUTFOCUS); } diff --git a/src/video/quartz/SDL_QuartzVideo.h b/src/video/quartz/SDL_QuartzVideo.h index 3f71da9f2..a53515b41 100644 --- a/src/video/quartz/SDL_QuartzVideo.h +++ b/src/video/quartz/SDL_QuartzVideo.h @@ -138,7 +138,8 @@ typedef struct SDL_PrivateVideoData { Uint8 expect_mouse_up; /* used to determine when to send mouse up events */ Uint8 grab_state; /* used to manage grab behavior */ NSPoint cursor_loc; /* saved cursor coords, for activate/deactivate when grabbed */ - BOOL cursor_visible; /* tells if cursor was hidden or not */ + BOOL cursor_visible; /* tells if cursor was instructed to be hidden or not (SDL_ShowCursor) */ + BOOL cursor_hidden; /* tells if cursor is *actually* hidden or not */ Uint8* sw_buffers[2]; /* pointers to the two software buffers for double-buffer emulation */ SDL_Thread *thread; /* thread for async updates to the screen */ SDL_sem *sem1, *sem2; /* synchronization for async screen updates */ @@ -183,6 +184,7 @@ typedef struct SDL_PrivateVideoData { #define grab_state (this->hidden->grab_state) #define cursor_loc (this->hidden->cursor_loc) #define cursor_visible (this->hidden->cursor_visible) +#define cursor_hidden (this->hidden->cursor_hidden) #define sw_buffers (this->hidden->sw_buffers) #define thread (this->hidden->thread) #define sem1 (this->hidden->sem1) diff --git a/src/video/quartz/SDL_QuartzWM.m b/src/video/quartz/SDL_QuartzWM.m index 97c1a7f55..824d3eae7 100644 --- a/src/video/quartz/SDL_QuartzWM.m +++ b/src/video/quartz/SDL_QuartzWM.m @@ -72,7 +72,10 @@ static int QZ_ShowWMCursor (_THIS, WMcursor *cursor) { if ( cursor == NULL) { if ( cursor_visible ) { - HideCursor (); + if (!cursor_hidden) { + HideCursor (); + cursor_hidden = YES; + } cursor_visible = NO; QZ_ChangeGrabState (this, QZ_HIDECURSOR); } @@ -80,7 +83,10 @@ static int QZ_ShowWMCursor (_THIS, WMcursor *cursor) { else { SetCursor(&cursor->curs); if ( ! cursor_visible ) { - ShowCursor (); + if (cursor_hidden) { + ShowCursor (); + cursor_hidden = NO; + } cursor_visible = YES; QZ_ChangeGrabState (this, QZ_SHOWCURSOR); }