Elm glayer: Workaround a bug causing a delay with N_TAPS events.
SVN revision: 71147
This commit is contained in:
parent
c69b7f2b60
commit
f51e04c0f5
|
@ -617,10 +617,15 @@ _tap_gestures_test_reset(Gesture_Info *gesture)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Widget_Data *wd = elm_widget_data_get(gesture->obj);
|
Widget_Data *wd = elm_widget_data_get(gesture->obj);
|
||||||
wd->dbl_timeout = NULL;
|
|
||||||
Eina_List *data;
|
Eina_List *data;
|
||||||
Pointer_Event *pe;
|
Pointer_Event *pe;
|
||||||
|
|
||||||
|
if (wd->dbl_timeout)
|
||||||
|
{
|
||||||
|
ecore_timer_del(wd->dbl_timeout);
|
||||||
|
wd->dbl_timeout = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if (!gesture->data)
|
if (!gesture->data)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -1164,17 +1169,16 @@ _record_pointer_event(Taps_Type *st, Eina_List *pe_list, Pointer_Event *pe,
|
||||||
/**
|
/**
|
||||||
* @internal
|
* @internal
|
||||||
*
|
*
|
||||||
* This function sets state a tap-gesture to END or ABORT
|
* This function checks if the tap gesture is done.
|
||||||
*
|
*
|
||||||
* @param data gesture info pointer
|
* @param data gesture info pointer
|
||||||
|
* @return EINA_TRUE if it is done.
|
||||||
*
|
*
|
||||||
* @ingroup Elm_Gesture_Layer
|
* @ingroup Elm_Gesture_Layer
|
||||||
*/
|
*/
|
||||||
static void
|
static Eina_Bool
|
||||||
_tap_gesture_finish(void *data)
|
_tap_gesture_check_finish(Gesture_Info *gesture)
|
||||||
{ /* This function will test each tap gesture when timer expires */
|
{
|
||||||
Gesture_Info *gesture = data;
|
|
||||||
Elm_Gesture_State s = ELM_GESTURE_STATE_END;
|
|
||||||
/* Here we check if taps-gesture was completed successfuly */
|
/* Here we check if taps-gesture was completed successfuly */
|
||||||
/* Count how many taps were recieved on each device then */
|
/* Count how many taps were recieved on each device then */
|
||||||
/* determine if it matches n_taps_needed defined on START */
|
/* determine if it matches n_taps_needed defined on START */
|
||||||
|
@ -1185,11 +1189,32 @@ _tap_gesture_finish(void *data)
|
||||||
{
|
{
|
||||||
if (eina_list_count(pe_list) != st->n_taps_needed)
|
if (eina_list_count(pe_list) != st->n_taps_needed)
|
||||||
{ /* No match taps number on device, ABORT */
|
{ /* No match taps number on device, ABORT */
|
||||||
s = ELM_GESTURE_STATE_ABORT;
|
return EINA_FALSE;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return EINA_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @internal
|
||||||
|
*
|
||||||
|
* This function sets state a tap-gesture to END or ABORT
|
||||||
|
*
|
||||||
|
* @param data gesture info pointer
|
||||||
|
*
|
||||||
|
* @ingroup Elm_Gesture_Layer
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
_tap_gesture_finish(void *data)
|
||||||
|
{ /* This function will test each tap gesture when timer expires */
|
||||||
|
Elm_Gesture_State s = ELM_GESTURE_STATE_END;
|
||||||
|
Gesture_Info *gesture = data;
|
||||||
|
Taps_Type *st = gesture->data;
|
||||||
|
|
||||||
|
if (!_tap_gesture_check_finish(data))
|
||||||
|
s = ELM_GESTURE_STATE_ABORT;
|
||||||
|
|
||||||
st->info.n = eina_list_count(st->l);
|
st->info.n = eina_list_count(st->l);
|
||||||
_set_state(gesture, s, gesture->info, EINA_FALSE);
|
_set_state(gesture, s, gesture->info, EINA_FALSE);
|
||||||
_tap_gestures_test_reset(gesture);
|
_tap_gestures_test_reset(gesture);
|
||||||
|
@ -1212,13 +1237,13 @@ _multi_tap_timeout(void *data)
|
||||||
if (!wd) return EINA_FALSE;
|
if (!wd) return EINA_FALSE;
|
||||||
|
|
||||||
if (IS_TESTED(ELM_GESTURE_N_TAPS))
|
if (IS_TESTED(ELM_GESTURE_N_TAPS))
|
||||||
_tap_gesture_finish(wd->gesture[ELM_GESTURE_N_TAPS]);
|
_tap_gesture_finish(wd->gesture[ELM_GESTURE_N_TAPS]);
|
||||||
|
|
||||||
if (IS_TESTED(ELM_GESTURE_N_DOUBLE_TAPS))
|
if (IS_TESTED(ELM_GESTURE_N_DOUBLE_TAPS))
|
||||||
_tap_gesture_finish(wd->gesture[ELM_GESTURE_N_DOUBLE_TAPS]);
|
_tap_gesture_finish(wd->gesture[ELM_GESTURE_N_DOUBLE_TAPS]);
|
||||||
|
|
||||||
if (IS_TESTED(ELM_GESTURE_N_TRIPLE_TAPS))
|
if (IS_TESTED(ELM_GESTURE_N_TRIPLE_TAPS))
|
||||||
_tap_gesture_finish(wd->gesture[ELM_GESTURE_N_TRIPLE_TAPS]);
|
_tap_gesture_finish(wd->gesture[ELM_GESTURE_N_TRIPLE_TAPS]);
|
||||||
|
|
||||||
_clear_if_finished(data);
|
_clear_if_finished(data);
|
||||||
wd->dbl_timeout = NULL;
|
wd->dbl_timeout = NULL;
|
||||||
|
@ -1319,6 +1344,20 @@ _tap_gesture_start(Widget_Data *wd, Pointer_Event *pe,
|
||||||
return EINA_FALSE;
|
return EINA_FALSE;
|
||||||
|
|
||||||
pe_list = _record_pointer_event(st, pe_list, pe, wd, event_info, event_type);
|
pe_list = _record_pointer_event(st, pe_list, pe, wd, event_info, event_type);
|
||||||
|
|
||||||
|
if (((gesture->g_type == ELM_GESTURE_N_TAPS) &&
|
||||||
|
!IS_TESTED(ELM_GESTURE_N_DOUBLE_TAPS) &&
|
||||||
|
!IS_TESTED(ELM_GESTURE_N_TRIPLE_TAPS)) ||
|
||||||
|
((gesture->g_type == ELM_GESTURE_N_DOUBLE_TAPS) &&
|
||||||
|
!IS_TESTED(ELM_GESTURE_N_TRIPLE_TAPS)))
|
||||||
|
{
|
||||||
|
if (_tap_gesture_check_finish(gesture))
|
||||||
|
{
|
||||||
|
_tap_gesture_finish(gesture);
|
||||||
|
return EINA_FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EVAS_CALLBACK_MULTI_MOVE:
|
case EVAS_CALLBACK_MULTI_MOVE:
|
||||||
|
|
Loading…
Reference in New Issue