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!)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
diff --git a/src/events/SDL_mouse.c b/src/events/SDL_mouse.c
index c8c4494..79f7927 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 375f077..6357871 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 f0f856f..75bd03f 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. */