From 294574647dcc48b82c22555e023a9f7231ce13a0 Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Thu, 13 Jun 2019 01:57:13 -0400 Subject: [PATCH] cocoa: Revised synthesized mouse/touch event strategy. I _think_ I understand what Sylvain is working on here now, so hopefully I got this right. Fixes Bugzilla #4576. (I think!) --- src/events/SDL_mouse.c | 4 ++++ src/video/cocoa/SDL_cocoamouse.m | 7 +++---- src/video/cocoa/SDL_cocoawindow.m | 29 +++++++---------------------- 3 files changed, 14 insertions(+), 26 deletions(-) diff --git a/src/events/SDL_mouse.c b/src/events/SDL_mouse.c index c8c44947f..79f792714 100644 --- a/src/events/SDL_mouse.c +++ b/src/events/SDL_mouse.c @@ -103,7 +103,11 @@ SDL_TouchMouseEventsChanged(void *userdata, const char *name, const char *oldVal if (hint && (*hint == '0' || SDL_strcasecmp(hint, "false") == 0)) { mouse->touch_mouse_events = SDL_FALSE; } else { +#if defined(__MACOSX__) /* macOS synthesizes its own events for this. */ + mouse->touch_mouse_events = SDL_FALSE; +#else mouse->touch_mouse_events = SDL_TRUE; +#endif } } diff --git a/src/video/cocoa/SDL_cocoamouse.m b/src/video/cocoa/SDL_cocoamouse.m index 375f077ca..635787162 100644 --- a/src/video/cocoa/SDL_cocoamouse.m +++ b/src/video/cocoa/SDL_cocoamouse.m @@ -408,8 +408,7 @@ Cocoa_HandleMouseEvent(_THIS, NSEvent *event) DLog("Motion was (%g, %g), offset to (%g, %g)", [event deltaX], [event deltaY], deltaX, deltaY); } - const SDL_MouseID mouseID = ([event subtype] == NSEventSubtypeTouch) ? SDL_TOUCH_MOUSEID : mouse->mouseID; - SDL_SendMouseMotion(mouse->focus, mouseID, 1, (int)deltaX, (int)deltaY); + SDL_SendMouseMotion(mouse->focus, mouse->mouseID, 1, (int)deltaX, (int)deltaY); } void @@ -437,8 +436,8 @@ Cocoa_HandleMouseWheel(SDL_Window *window, NSEvent *event) } else if (y < 0) { y = SDL_floor(y); } - const SDL_MouseID mouseID = ([event subtype] == NSEventSubtypeTouch) ? SDL_TOUCH_MOUSEID : mouse->mouseID; - SDL_SendMouseWheel(window, mouseID, x, y, direction); + + SDL_SendMouseWheel(window, mouse->mouseID, x, y, direction); } void diff --git a/src/video/cocoa/SDL_cocoawindow.m b/src/video/cocoa/SDL_cocoawindow.m index f0f856f19..75bd03fa4 100644 --- a/src/video/cocoa/SDL_cocoawindow.m +++ b/src/video/cocoa/SDL_cocoawindow.m @@ -933,14 +933,8 @@ SetWindowStyle(SDL_Window * window, NSUInteger style) clicks = (int) [theEvent clickCount]; - SDL_MouseID mouseID; - if ([theEvent subtype] == NSEventSubtypeTouch) { - mouseID = SDL_TOUCH_MOUSEID; - } else { - SDL_Mouse *mouse = SDL_GetMouse(); - mouseID = mouse ? mouse->mouseID : 0; - } - + const SDL_Mouse *mouse = SDL_GetMouse(); + const SDL_MouseID mouseID = mouse ? mouse->mouseID : 0; SDL_SendMouseButtonClicks(_data->window, mouseID, SDL_PRESSED, button, clicks); } @@ -986,14 +980,8 @@ SetWindowStyle(SDL_Window * window, NSUInteger style) clicks = (int) [theEvent clickCount]; - SDL_MouseID mouseID; - if ([theEvent subtype] == NSEventSubtypeTouch) { - mouseID = SDL_TOUCH_MOUSEID; - } else { - SDL_Mouse *mouse = SDL_GetMouse(); - mouseID = mouse ? mouse->mouseID : 0; - } - + const SDL_Mouse *mouse = SDL_GetMouse(); + const SDL_MouseID mouseID = mouse ? mouse->mouseID : 0; SDL_SendMouseButtonClicks(_data->window, mouseID, SDL_RELEASED, button, clicks); } @@ -1058,8 +1046,7 @@ SetWindowStyle(SDL_Window * window, NSUInteger style) } } - const SDL_MouseID mouseID = ([theEvent subtype] == NSEventSubtypeTouch) ? SDL_TOUCH_MOUSEID : mouse->mouseID; - SDL_SendMouseMotion(window, mouseID, 0, x, y); + SDL_SendMouseMotion(window, mouse->mouseID, 0, x, y); } - (void)mouseDragged:(NSEvent *)theEvent @@ -1093,8 +1080,7 @@ SetWindowStyle(SDL_Window * window, NSUInteger style) } } if (existingTouchCount == 0) { - const BOOL ismouse = ([theEvent subtype] == NSEventSubtypeMouseEvent); - const SDL_TouchID touchID = ismouse ? SDL_MOUSE_TOUCHID : (SDL_TouchID)(intptr_t)[[touches anyObject] device]; + const SDL_TouchID touchID = (SDL_TouchID)(intptr_t)[[touches anyObject] device]; int numFingers = SDL_GetNumTouchFingers(touchID); DLog("Reset Lost Fingers: %d", numFingers); for (--numFingers; numFingers >= 0; --numFingers) { @@ -1124,11 +1110,10 @@ SetWindowStyle(SDL_Window * window, NSUInteger style) - (void)handleTouches:(NSTouchPhase) phase withEvent:(NSEvent *) theEvent { - const BOOL ismouse = ([theEvent subtype] == NSEventSubtypeMouseEvent); NSSet *touches = [theEvent touchesMatchingPhase:phase inView:nil]; for (NSTouch *touch in touches) { - const SDL_TouchID touchId = ismouse ? SDL_MOUSE_TOUCHID : (SDL_TouchID)(intptr_t)[touch device]; + const SDL_TouchID touchId = (SDL_TouchID)(intptr_t)[touch device]; SDL_TouchDeviceType devtype = SDL_TOUCH_DEVICE_INDIRECT_ABSOLUTE; #if MAC_OS_X_VERSION_MAX_ALLOWED >= 101202 /* Added in the 10.12.2 SDK. */