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];
}