SDL_Mouse/Touch: discard synthetic events when hints are not set. Those are generated/flagged by platform layer.
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
diff --git a/src/events/SDL_mouse.c b/src/events/SDL_mouse.c
index c423c56..0ecb3cc 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 6cf576d..150acb8 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);