mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-09-06 03:18:13 +00:00
cocoa: add explicit tracking areas to the window.
This makes sure we get reliable mouse enter/exit events from the system on older macOS releases. Newer releases don't have this problem--my assumption is that Cocoa has a more aggressive default tracking area installed for some newer UI feature. For 3.2.16, we'll use the explicit tracking area on older macOSes only, but I'll remove that check in revision control for newer OSes and see what happens. Fixes #12725.
This commit is contained in:
@@ -2019,6 +2019,7 @@ static void Cocoa_SendMouseButtonClicks(SDL_Mouse *mouse, NSEvent *theEvent, SDL
|
||||
@interface SDL3View : NSView
|
||||
{
|
||||
SDL_Window *_sdlWindow;
|
||||
NSTrackingArea *_trackingArea; // only used on macOS <= 11.0
|
||||
}
|
||||
|
||||
- (void)setSDLWindow:(SDL_Window *)window;
|
||||
@@ -2030,6 +2031,7 @@ static void Cocoa_SendMouseButtonClicks(SDL_Mouse *mouse, NSEvent *theEvent, SDL
|
||||
- (BOOL)acceptsFirstMouse:(NSEvent *)theEvent;
|
||||
- (BOOL)wantsUpdateLayer;
|
||||
- (void)updateLayer;
|
||||
- (void)updateTrackingAreas;
|
||||
@end
|
||||
|
||||
@implementation SDL3View
|
||||
@@ -2110,6 +2112,21 @@ static void Cocoa_SendMouseButtonClicks(SDL_Mouse *mouse, NSEvent *theEvent, SDL
|
||||
}
|
||||
}
|
||||
|
||||
- (void)updateTrackingAreas
|
||||
{
|
||||
[super updateTrackingAreas];
|
||||
|
||||
if (@available(macOS 12.0, *)) {
|
||||
// we (currently) use the tracking areas as a workaround for older macOSes, but we might be safe everywhere...
|
||||
} else {
|
||||
SDL_CocoaWindowData *windata = (__bridge SDL_CocoaWindowData *)_sdlWindow->internal;
|
||||
if (_trackingArea) {
|
||||
[self removeTrackingArea:_trackingArea];
|
||||
}
|
||||
_trackingArea = [[NSTrackingArea alloc] initWithRect:[self bounds] options:NSTrackingMouseEnteredAndExited|NSTrackingActiveAlways owner:windata.listener userInfo:nil];
|
||||
[self addTrackingArea:_trackingArea];
|
||||
}
|
||||
}
|
||||
@end
|
||||
|
||||
static void Cocoa_UpdateMouseFocus()
|
||||
|
Reference in New Issue
Block a user