From d2d06f444393c8e35fc8b7d20c4931620236556b Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Tue, 2 Jul 2019 12:29:36 -0400 Subject: [PATCH] cocoa: Don't report trackpad mouse events as synthesized touches. Fixes Bugzilla #4690, sort of. I guess. --- src/video/cocoa/SDL_cocoamouse.m | 6 ++++++ src/video/cocoa/SDL_cocoawindow.m | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/src/video/cocoa/SDL_cocoamouse.m b/src/video/cocoa/SDL_cocoamouse.m index 937057d57674f..f5c06be9c8b57 100644 --- a/src/video/cocoa/SDL_cocoamouse.m +++ b/src/video/cocoa/SDL_cocoamouse.m @@ -38,6 +38,8 @@ #define DLog(...) do { } while (0) #endif +#define TRACKPAD_REPORTS_TOUCH_MOUSEID 0 + @implementation NSCursor (InvisibleCursor) + (NSCursor *)invisibleCursor { @@ -379,6 +381,7 @@ + (NSCursor *)invisibleCursor } SDL_MouseID mouseID = mouse ? mouse->mouseID : 0; + #if TRACKPAD_REPORTS_TOUCH_MOUSEID if ([event subtype] == NSEventSubtypeTouch) { /* this is a synthetic from the OS */ if (mouse->touch_mouse_events) { mouseID = SDL_TOUCH_MOUSEID; /* Hint is set */ @@ -386,6 +389,7 @@ + (NSCursor *)invisibleCursor return; /* no hint set, drop this one. */ } } + #endif const SDL_bool seenWarp = driverdata->seenWarp; driverdata->seenWarp = NO; @@ -432,6 +436,7 @@ + (NSCursor *)invisibleCursor } SDL_MouseID mouseID = mouse->mouseID; + #if TRACKPAD_REPORTS_TOUCH_MOUSEID if ([event subtype] == NSEventSubtypeTouch) { /* this is a synthetic from the OS */ if (mouse->touch_mouse_events) { mouseID = SDL_TOUCH_MOUSEID; /* Hint is set */ @@ -439,6 +444,7 @@ + (NSCursor *)invisibleCursor return; /* no hint set, drop this one. */ } } + #endif CGFloat x = -[event deltaX]; CGFloat y = [event deltaY]; diff --git a/src/video/cocoa/SDL_cocoawindow.m b/src/video/cocoa/SDL_cocoawindow.m index e030d9e7bb59a..fd56f5c363f8c 100644 --- a/src/video/cocoa/SDL_cocoawindow.m +++ b/src/video/cocoa/SDL_cocoawindow.m @@ -922,6 +922,7 @@ - (void)mouseDown:(NSEvent *)theEvent int button; int clicks; + #if TRACKPAD_REPORTS_TOUCH_MOUSEID if ([theEvent subtype] == NSEventSubtypeTouch) { /* this is a synthetic from the OS */ if (mouse->touch_mouse_events) { mouseID = SDL_TOUCH_MOUSEID; /* Hint is set */ @@ -929,6 +930,7 @@ - (void)mouseDown:(NSEvent *)theEvent return; /* no hint set, drop this one. */ } } + #endif /* Ignore events that aren't inside the client area (i.e. title bar.) */ if ([theEvent window]) { @@ -991,6 +993,7 @@ - (void)mouseUp:(NSEvent *)theEvent int button; int clicks; + #if TRACKPAD_REPORTS_TOUCH_MOUSEID if ([theEvent subtype] == NSEventSubtypeTouch) { /* this is a synthetic from the OS */ if (mouse->touch_mouse_events) { mouseID = SDL_TOUCH_MOUSEID; /* Hint is set */ @@ -998,6 +1001,7 @@ - (void)mouseUp:(NSEvent *)theEvent return; /* no hint set, drop this one. */ } } + #endif if ([self processHitTest:theEvent]) { SDL_SendWindowEvent(_data->window, SDL_WINDOWEVENT_HIT_TEST, 0, 0); @@ -1051,6 +1055,7 @@ - (void)mouseMoved:(NSEvent *)theEvent NSPoint point; int x, y; + #if TRACKPAD_REPORTS_TOUCH_MOUSEID if ([theEvent subtype] == NSEventSubtypeTouch) { /* this is a synthetic from the OS */ if (mouse->touch_mouse_events) { mouseID = SDL_TOUCH_MOUSEID; /* Hint is set */ @@ -1058,6 +1063,7 @@ - (void)mouseMoved:(NSEvent *)theEvent return; /* no hint set, drop this one. */ } } + #endif if ([self processHitTest:theEvent]) { SDL_SendWindowEvent(window, SDL_WINDOWEVENT_HIT_TEST, 0, 0);