diff --git a/src/lib/evas/gesture/efl_canvas_gesture_private.h b/src/lib/evas/gesture/efl_canvas_gesture_private.h --- a/src/lib/evas/gesture/efl_canvas_gesture_private.h +++ b/src/lib/evas/gesture/efl_canvas_gesture_private.h @@ -136,11 +136,13 @@ struct _Efl_Canvas_Gesture_Momentum_Data { + int id; Eina_Vector2 momentum; }; struct _Efl_Canvas_Gesture_Flick_Data { + int id; Eina_Vector2 momentum; double angle; }; diff --git a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_flick.c b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_flick.c --- a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_flick.c +++ b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_flick.c @@ -223,6 +223,8 @@ return EFL_GESTURE_RECOGNIZER_RESULT_IGNORE; } + if (pd->t_st && (fd->id != efl_gesture_touch_data_get(event)->id)) + return EFL_GESTURE_RECOGNIZER_RESULT_IGNORE; _single_line_process(obj, pd, gesture, fd, event); _vector_get(pd->st_line, efl_gesture_touch_cur_point_get(event), @@ -316,6 +318,9 @@ switch (efl_gesture_touch_state_get(event)) { case EFL_GESTURE_TOUCH_STATE_BEGIN: + if (!glayer_continues_enable) + fd->id = efl_gesture_touch_data_get(event)->id; + EINA_FALLTHROUGH; case EFL_GESTURE_TOUCH_STATE_UPDATE: { if (pd->t_st) diff --git a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_momentum.c b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_momentum.c --- a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_momentum.c +++ b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_momentum.c @@ -107,6 +107,8 @@ return EFL_GESTURE_RECOGNIZER_RESULT_IGNORE; } + if (pd->t_st && (md->id != efl_gesture_touch_data_get(event)->id)) + return EFL_GESTURE_RECOGNIZER_RESULT_IGNORE; switch (efl_gesture_touch_state_get(event)) { @@ -118,12 +120,19 @@ if (efl_gesture_touch_state_get(event) == EFL_GESTURE_TOUCH_STATE_BEGIN || glayer_continues_enable) { + if (efl_gesture_touch_prev_data_get(event)) + { + if (efl_gesture_touch_prev_data_get(event)->action == efl_gesture_touch_data_get(event)->action) + return EFL_GESTURE_RECOGNIZER_RESULT_IGNORE; + } pd->t_st = pd->t_end = efl_gesture_touch_cur_timestamp_get(event); pd->st_line = pd->end_line = efl_gesture_touch_start_point_get(event); efl_gesture_hotspot_set(gesture, pd->st_line); + if (!glayer_continues_enable) + md->id = efl_gesture_touch_data_get(event)->id; return EFL_GESTURE_RECOGNIZER_RESULT_TRIGGER; }