From e152129787e85902dd509766f7ffa475eb7bf71d Mon Sep 17 00:00:00 2001 From: kanjitalk755 Date: Sat, 9 Sep 2023 09:10:06 +0900 Subject: [PATCH] Fixes #8190. From #7249, reverted the hunks other than #7239. --- src/video/cocoa/SDL_cocoamouse.m | 14 +++++--------- src/video/cocoa/SDL_cocoawindow.m | 15 +++++++++++++++ 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/video/cocoa/SDL_cocoamouse.m b/src/video/cocoa/SDL_cocoamouse.m index fc29c5a59c..2231ce7dcf 100644 --- a/src/video/cocoa/SDL_cocoamouse.m +++ b/src/video/cocoa/SDL_cocoamouse.m @@ -219,15 +219,11 @@ static int Cocoa_ShowCursor(SDL_Cursor *cursor) SDL_VideoDevice *device = SDL_GetVideoDevice(); SDL_Window *window = (device ? device->windows : NULL); for (; window != NULL; window = window->next) { - SDL_Mouse *mouse = SDL_GetMouse(); - if(mouse->focus) { - if (mouse->cursor_shown && mouse->cur_cursor && !mouse->relative_mode) { - [(__bridge NSCursor*)mouse->cur_cursor->driverdata set]; - } else { - [[NSCursor invisibleCursor] set]; - } - } else { - [[NSCursor arrowCursor] set]; + SDL_CocoaWindowData *driverdata = (__bridge SDL_CocoaWindowData *)window->driverdata; + if (driverdata) { + [driverdata.nswindow performSelectorOnMainThread:@selector(invalidateCursorRectsForView:) + withObject:[driverdata.nswindow contentView] + waitUntilDone:NO]; } } return 0; diff --git a/src/video/cocoa/SDL_cocoawindow.m b/src/video/cocoa/SDL_cocoawindow.m index ce110528c7..f86027e0e7 100644 --- a/src/video/cocoa/SDL_cocoawindow.m +++ b/src/video/cocoa/SDL_cocoawindow.m @@ -1727,6 +1727,21 @@ static int Cocoa_SendMouseButtonClicks(SDL_Mouse *mouse, NSEvent *theEvent, SDL_ return YES; } +- (void)resetCursorRects +{ + SDL_Mouse *mouse; + [super resetCursorRects]; + mouse = SDL_GetMouse(); + + if (mouse->cursor_shown && mouse->cur_cursor && !mouse->relative_mode) { + [self addCursorRect:[self bounds] + cursor:(__bridge NSCursor *)mouse->cur_cursor->driverdata]; + } else { + [self addCursorRect:[self bounds] + cursor:[NSCursor invisibleCursor]]; + } +} + - (BOOL)acceptsFirstMouse:(NSEvent *)theEvent { if (SDL_GetHint(SDL_HINT_MOUSE_FOCUS_CLICKTHROUGH)) {