SDL: Fixes #8190.

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)) {