From e152129787e85902dd509766f7ffa475eb7bf71d Mon Sep 17 00:00:00 2001
From: kanjitalk755 <[EMAIL REDACTED]>
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 fc29c5a59c67..2231ce7dcf39 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 ce110528c73b..f86027e0e768 100644
--- a/src/video/cocoa/SDL_cocoawindow.m
+++ b/src/video/cocoa/SDL_cocoawindow.m
@@ -1727,6 +1727,21 @@ - (BOOL)mouseDownCanMoveWindow
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)) {