From 6625203514e5a12a76ba968331bb3c6beea0c109 Mon Sep 17 00:00:00 2001 From: Sylvain Becker Date: Tue, 9 Jul 2019 11:46:42 +0200 Subject: [PATCH] SDL_Mouse/Touch: discard synthetic events when hints are not set. Those are generated/flagged by platform layer. --- src/events/SDL_mouse.c | 14 ++++++++++++++ src/events/SDL_touch.c | 22 ++++++++++++++++++++-- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/src/events/SDL_mouse.c b/src/events/SDL_mouse.c index c423c56e542ee..0ecb3cc77c533 100644 --- a/src/events/SDL_mouse.c +++ b/src/events/SDL_mouse.c @@ -338,6 +338,13 @@ SDL_PrivateSendMouseMotion(SDL_Window * window, SDL_MouseID mouseID, int relativ } } + /* SDL_HINT_TOUCH_MOUSE_EVENTS: if not set, discard synthetic mouse events coming from platform layer */ + if (mouse->touch_mouse_events == 0) { + if (mouseID == SDL_TOUCH_MOUSEID) { + return 0; + } + } + if (mouseID != SDL_TOUCH_MOUSEID && mouse->relative_mode_warp) { int center_x = 0, center_y = 0; SDL_GetWindowSize(window, ¢er_x, ¢er_y); @@ -499,6 +506,13 @@ SDL_PrivateSendMouseButton(SDL_Window * window, SDL_MouseID mouseID, Uint8 state } } + /* SDL_HINT_TOUCH_MOUSE_EVENTS: if not set, discard synthetic mouse events coming from platform layer */ + if (mouse->touch_mouse_events == 0) { + if (mouseID == SDL_TOUCH_MOUSEID) { + return 0; + } + } + /* Figure out which event to perform */ switch (state) { case SDL_PRESSED: diff --git a/src/events/SDL_touch.c b/src/events/SDL_touch.c index 6cf576dc1dc84..150acb8220183 100644 --- a/src/events/SDL_touch.c +++ b/src/events/SDL_touch.c @@ -244,16 +244,18 @@ SDL_SendTouch(SDL_TouchID id, SDL_FingerID fingerid, { int posted; SDL_Finger *finger; + SDL_Mouse *mouse; SDL_Touch* touch = SDL_GetTouch(id); if (!touch) { return -1; } + mouse = SDL_GetMouse(); + #if SYNTHESIZE_TOUCH_TO_MOUSE /* SDL_HINT_TOUCH_MOUSE_EVENTS: controlling whether touch events should generate synthetic mouse events */ { - SDL_Mouse *mouse = SDL_GetMouse(); if (mouse->touch_mouse_events) { /* FIXME: maybe we should only restrict to a few SDL_TouchDeviceType */ if (id != SDL_MOUSE_TOUCHID) { @@ -301,6 +303,13 @@ SDL_SendTouch(SDL_TouchID id, SDL_FingerID fingerid, } #endif + /* SDL_HINT_MOUSE_TOUCH_EVENTS: if not set, discard synthetic touch events coming from platform layer */ + if (mouse->mouse_touch_events == 0) { + if (id == SDL_MOUSE_TOUCHID) { + return 0; + } + } + finger = SDL_GetFinger(touch, fingerid); if (down) { if (finger) { @@ -357,6 +366,7 @@ SDL_SendTouchMotion(SDL_TouchID id, SDL_FingerID fingerid, { SDL_Touch *touch; SDL_Finger *finger; + SDL_Mouse *mouse; int posted; float xrel, yrel, prel; @@ -365,10 +375,11 @@ SDL_SendTouchMotion(SDL_TouchID id, SDL_FingerID fingerid, return -1; } + mouse = SDL_GetMouse(); + #if SYNTHESIZE_TOUCH_TO_MOUSE /* SDL_HINT_TOUCH_MOUSE_EVENTS: controlling whether touch events should generate synthetic mouse events */ { - SDL_Mouse *mouse = SDL_GetMouse(); if (mouse->touch_mouse_events) { if (id != SDL_MOUSE_TOUCHID) { SDL_Window *window = SDL_GetMouseFocus(); @@ -388,6 +399,13 @@ SDL_SendTouchMotion(SDL_TouchID id, SDL_FingerID fingerid, } #endif + /* SDL_HINT_MOUSE_TOUCH_EVENTS: if not set, discard synthetic touch events coming from platform layer */ + if (mouse->mouse_touch_events == 0) { + if (id == SDL_MOUSE_TOUCHID) { + return 0; + } + } + finger = SDL_GetFinger(touch,fingerid); if (!finger) { return SDL_SendTouch(id, fingerid, SDL_TRUE, x, y, pressure);