SDL: windowWillStartLiveResize: legacy OS compatibility fix

From d58f0268277413994ca365637c17e9dcb6f3b2f3 Mon Sep 17 00:00:00 2001
From: Joshua Root <[EMAIL REDACTED]>
Date: Fri, 3 Jan 2025 04:19:51 +1100
Subject: [PATCH] windowWillStartLiveResize: legacy OS compatibility fix

---
 src/video/cocoa/SDL_cocoawindow.h |  1 +
 src/video/cocoa/SDL_cocoawindow.m | 20 +++++++++++++++-----
 2 files changed, 16 insertions(+), 5 deletions(-)

diff --git a/src/video/cocoa/SDL_cocoawindow.h b/src/video/cocoa/SDL_cocoawindow.h
index 2f9324617aafe..7ef0bc036414e 100644
--- a/src/video/cocoa/SDL_cocoawindow.h
+++ b/src/video/cocoa/SDL_cocoawindow.h
@@ -78,6 +78,7 @@ typedef enum
 /* Window delegate functionality */
 -(BOOL) windowShouldClose:(id) sender;
 -(void) windowDidExpose:(NSNotification *) aNotification;
+-(void) onLiveResizeTimerFire:(id) sender;
 -(void) windowWillStartLiveResize:(NSNotification *)aNotification;
 -(void) windowDidEndLiveResize:(NSNotification *)aNotification;
 -(void) windowDidMove:(NSNotification *) aNotification;
diff --git a/src/video/cocoa/SDL_cocoawindow.m b/src/video/cocoa/SDL_cocoawindow.m
index 0dc638390ae5d..19e5aae306e91 100644
--- a/src/video/cocoa/SDL_cocoawindow.m
+++ b/src/video/cocoa/SDL_cocoawindow.m
@@ -743,16 +743,26 @@ - (void)windowDidExpose:(NSNotification *)aNotification
     SDL_SendWindowEvent(_data.window, SDL_WINDOWEVENT_EXPOSED, 0, 0);
 }
 
+- (void)onLiveResizeTimerFire:(id)sender
+{
+    SDL_OnWindowLiveResizeUpdate(_data.window);
+}
+
 - (void)windowWillStartLiveResize:(NSNotification *)aNotification
 {
     // We'll try to maintain 60 FPS during live resizing
     const NSTimeInterval interval = 1.0 / 60.0;
+
+    NSMethodSignature *invocationSig = [Cocoa_WindowListener
+        instanceMethodSignatureForSelector:@selector(onLiveResizeTimerFire:)];
+    NSInvocation *invocation = [NSInvocation
+        invocationWithMethodSignature:invocationSig];
+    [invocation setTarget:self];
+    [invocation setSelector:@selector(onLiveResizeTimerFire:)];
+
     liveResizeTimer = [NSTimer scheduledTimerWithTimeInterval:interval
-                                                      repeats:TRUE
-                                                        block:^(NSTimer *unusedTimer)
-    {
-        SDL_OnWindowLiveResizeUpdate(_data.window);
-    }];
+                                                      invocation:invocation
+                                                      repeats:TRUE];
 
     [[NSRunLoop currentRunLoop] addTimer:liveResizeTimer forMode:NSRunLoopCommonModes];
 }