diff --git a/src/lib/evas/Efl_Canvas.h b/src/lib/evas/Efl_Canvas.h index fe18f75353..9ef46201bf 100644 --- a/src/lib/evas/Efl_Canvas.h +++ b/src/lib/evas/Efl_Canvas.h @@ -118,9 +118,11 @@ extern "C" { #include #include #include +#include #include #include #include +#include #include diff --git a/src/lib/evas/Evas_Eo.h b/src/lib/evas/Evas_Eo.h index 356a8fcc53..68b65372c3 100644 --- a/src/lib/evas/Evas_Eo.h +++ b/src/lib/evas/Evas_Eo.h @@ -205,6 +205,7 @@ struct _Efl_Canvas_Object_Animation_Event #include "gesture/efl_canvas_gesture_momentum.eo.h" #include "gesture/efl_canvas_gesture_flick.eo.h" #include "gesture/efl_canvas_gesture_zoom.eo.h" +#include "gesture/efl_canvas_gesture_custom.eo.h" #include "gesture/efl_canvas_gesture_recognizer.eo.h" #include "gesture/efl_canvas_gesture_recognizer_tap.eo.h" #include "gesture/efl_canvas_gesture_recognizer_long_tap.eo.h" @@ -213,6 +214,7 @@ struct _Efl_Canvas_Object_Animation_Event #include "gesture/efl_canvas_gesture_recognizer_momentum.eo.h" #include "gesture/efl_canvas_gesture_recognizer_flick.eo.h" #include "gesture/efl_canvas_gesture_recognizer_zoom.eo.h" +#include "gesture/efl_canvas_gesture_recognizer_custom.eo.h" #include "gesture/efl_canvas_gesture_manager.eo.h" #include "gesture/efl_canvas_gesture_events.eo.h" diff --git a/src/lib/evas/gesture/efl_canvas_gesture_custom.c b/src/lib/evas/gesture/efl_canvas_gesture_custom.c new file mode 100644 index 0000000000..105558b57e --- /dev/null +++ b/src/lib/evas/gesture/efl_canvas_gesture_custom.c @@ -0,0 +1,38 @@ +#define EFL_CANVAS_GESTURE_CUSTOM_PROTECTED +#include "efl_canvas_gesture_private.h" + +#define MY_CLASS EFL_CANVAS_GESTURE_CUSTOM_CLASS + + +EOLIAN static void +_efl_canvas_gesture_custom_efl_object_destructor(Eo *obj, Efl_Canvas_Gesture_Custom_Data *pd) +{ + eina_stringshare_del(pd->gesture_name); + efl_destructor(efl_super(obj, MY_CLASS)); +} + +EOLIAN static Efl_Object * +_efl_canvas_gesture_custom_efl_object_constructor(Eo *obj, Efl_Canvas_Gesture_Custom_Data *pd EINA_UNUSED) +{ + Efl_Canvas_Gesture_Data *gd; + + obj = efl_constructor(efl_super(obj, MY_CLASS)); + + gd = efl_data_scope_get(obj, EFL_CANVAS_GESTURE_CLASS); + gd->type = EFL_EVENT_GESTURE_CUSTOM; + + return obj; +} + +EOLIAN static void +_efl_canvas_gesture_custom_gesture_name_set(Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Custom_Data *pd, const char *name) +{ + eina_stringshare_replace(&pd->gesture_name, name); +} + +EOLIAN static Eina_Stringshare * +_efl_canvas_gesture_custom_gesture_name_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Custom_Data *pd) +{ + return pd->gesture_name; +} +#include "efl_canvas_gesture_custom.eo.c" diff --git a/src/lib/evas/gesture/efl_canvas_gesture_custom.eo b/src/lib/evas/gesture/efl_canvas_gesture_custom.eo new file mode 100644 index 0000000000..6792d1ba8f --- /dev/null +++ b/src/lib/evas/gesture/efl_canvas_gesture_custom.eo @@ -0,0 +1,28 @@ +import eina_types; + +class @beta Efl.Canvas.Gesture_Custom extends Efl.Canvas.Gesture +{ + [[Custom gesture class holding state information. + See @Efl.Canvas.Gesture to see what this state is and + @[Efl.Canvas.Gesture_Events.gesture,custom] for a description of the Custom gesture. + + Application developers receive these objects inside a gesture event and do not typically need to create their own. + ]] + c_prefix: efl_gesture_custom; + methods { + @property gesture_name { + [[This is the name of the custom gesture.]] + get { + } + set @protected { + } + values { + gesture_name: string; [[The name of the custom gesture.]] + } + } + } + implements { + Efl.Object.constructor; + Efl.Object.destructor; + } +} diff --git a/src/lib/evas/gesture/efl_canvas_gesture_events.eo b/src/lib/evas/gesture/efl_canvas_gesture_events.eo index 9344d71edb..bbf9ef68fd 100644 --- a/src/lib/evas/gesture/efl_canvas_gesture_events.eo +++ b/src/lib/evas/gesture/efl_canvas_gesture_events.eo @@ -43,5 +43,9 @@ interface @beta Efl.Canvas.Gesture_Events getting closer ("zoom out" or "pinch"). This gesture cannot be performed with a mouse as it requires more than one pointer. ]] + gesture,custom: Efl.Canvas.Gesture_Custom; [[Emitted when a Custom gesture has been detected. + A Custom gesture is one which is custom-written for use in an application or toolkit and + is not shipped with EFL. + ]] } } diff --git a/src/lib/evas/gesture/efl_canvas_gesture_manager.c b/src/lib/evas/gesture/efl_canvas_gesture_manager.c index c78682c7c3..180cddb2be 100644 --- a/src/lib/evas/gesture/efl_canvas_gesture_manager.c +++ b/src/lib/evas/gesture/efl_canvas_gesture_manager.c @@ -1,4 +1,5 @@ #define EFL_CANVAS_GESTURE_PROTECTED +#define EFL_CANVAS_GESTURE_CUSTOM_PROTECTED #include "efl_canvas_gesture_private.h" #define MY_CLASS EFL_CANVAS_GESTURE_MANAGER_CLASS @@ -17,9 +18,10 @@ typedef struct _Efl_Canvas_Gesture_Manager_Data //Keeps track of all the gesture request for a particular target Eina_Hash *m_gesture_contex; // (*target, Eina_Hash(type, int)) //Keeps all the event directed to this particular object from touch_begin till touch_end - Eina_Hash *m_object_events; // (*target, *efl_gesture_touch) + Eina_Hash *m_object_events; // (*recognizer, *efl_gesture_touch) //Keeps all the recognizer registered to gesture manager Eina_Hash *m_recognizers; // (*gesture_type, *recognizer) + Eina_List *custom_recognizers; //Keeps track of all current object gestures. Eina_List *m_object_gestures; //(List of *object_gesture) //Lazy deletion of gestures @@ -29,7 +31,7 @@ typedef struct _Efl_Canvas_Gesture_Manager_Data } Efl_Canvas_Gesture_Manager_Data; static void _cleanup_cached_gestures(Efl_Canvas_Gesture_Manager_Data *pd, - Eo *target, const Efl_Event_Description *type); + Eo *target, const Efl_Event_Description *type, Efl_Canvas_Gesture_Recognizer *recognizer); static Efl_Canvas_Gesture * _get_state(Efl_Canvas_Gesture_Manager_Data *pd, Eo *target, Efl_Canvas_Gesture_Recognizer *recognizer, const Efl_Event_Description *type); @@ -151,8 +153,12 @@ _efl_canvas_gesture_manager_config_set(Eo *obj, Efl_Canvas_Gesture_Manager_Data EOLIAN static void _efl_canvas_gesture_manager_efl_object_destructor(Eo *obj, Efl_Canvas_Gesture_Manager_Data *pd EINA_UNUSED) { + Efl_Canvas_Gesture_Recognizer *recognizer; + eina_hash_free(pd->m_config); eina_hash_free(pd->m_recognizers); + EINA_LIST_FREE(pd->custom_recognizers, recognizer) + efl_unref(recognizer); eina_hash_free(pd->m_gesture_contex); eina_hash_free(pd->m_object_events); _cleanup_object(pd->m_gestures_to_delete); @@ -172,7 +178,12 @@ _efl_canvas_gesture_manager_callback_add_hook(void *data, Eo *target, const Efl_ { Efl_Canvas_Gesture_Manager_Data *pd = data; //If there is a recognizer registered for that event then add it to the gesture context - Efl_Canvas_Gesture_Recognizer *recognizer = eina_hash_find(pd->m_recognizers, &type); + Efl_Canvas_Gesture_Recognizer *recognizer; + + if (type == EFL_EVENT_GESTURE_CUSTOM) + recognizer = eina_list_data_get(pd->custom_recognizers); + else + recognizer = eina_hash_find(pd->m_recognizers, &type); if (recognizer) { //Add it to the gesture context. @@ -196,7 +207,12 @@ _efl_canvas_gesture_manager_callback_del_hook(void *data, Eo *target, const Efl_ { Efl_Canvas_Gesture_Manager_Data *pd = data; //If there is a recognizer registered for that event then add it to the gesture context - Efl_Canvas_Gesture_Recognizer *recognizer = eina_hash_find(pd->m_recognizers, &type); + Efl_Canvas_Gesture_Recognizer *recognizer; + + if (type == EFL_EVENT_GESTURE_CUSTOM) + recognizer = eina_list_data_get(pd->custom_recognizers); + else + recognizer = eina_hash_find(pd->m_recognizers, &type); if (recognizer) { Eina_Hash *thisisreallystupid = eina_hash_find(pd->m_gesture_contex, &target); @@ -211,20 +227,38 @@ _efl_canvas_gesture_manager_callback_del_hook(void *data, Eo *target, const Efl_ eina_hash_del_by_key(thisisreallystupid, &type); if (eina_hash_population(thisisreallystupid)) return; eina_hash_del_by_key(pd->m_gesture_contex, &target); - _cleanup_cached_gestures(pd, target, type); + _cleanup_cached_gestures(pd, target, type, NULL); } } static void _gesture_recognizer_process_internal(Efl_Canvas_Gesture_Manager_Data *pd, Efl_Canvas_Gesture_Recognizer *recognizer, - Eo *target, const Efl_Event_Description *gesture_type, Efl_Canvas_Gesture_Touch *touch_event) + Eo *target, const Efl_Event_Description *gesture_type, void *event) { Efl_Canvas_Gesture_Recognizer_Result recog_result; Efl_Canvas_Gesture_Recognizer_Result recog_state; + Efl_Canvas_Gesture_Touch *touch_event; //If the gesture canceled or already finished by recognizer. Efl_Canvas_Gesture *gesture = _get_state(pd, target, recognizer, gesture_type); if (!gesture) return; + //Check there is already created event exist or not. + touch_event = eina_hash_find(pd->m_object_events, &recognizer); + + if (!touch_event) + { + touch_event = efl_add_ref(EFL_CANVAS_GESTURE_TOUCH_CLASS, NULL); + eina_hash_add(pd->m_object_events, &recognizer, touch_event); + } + + efl_gesture_touch_point_record(touch_event, event); + + //This is for handling the case that mouse event pairs dont match. + //Such as the case of canceling gesture recognition after a mouse down. + if (efl_gesture_touch_state_get(touch_event) == EFL_GESTURE_TOUCH_STATE_UNKNOWN) + return; + + /* this is the "default" value for the event, recognizers may modify it if necessary */ efl_gesture_touch_count_set(gesture, efl_gesture_touch_points_count_get(touch_event)); @@ -273,8 +307,8 @@ post_event: if (((recog_state == EFL_GESTURE_RECOGNIZER_RESULT_FINISH) || (recog_state == EFL_GESTURE_RECOGNIZER_RESULT_CANCEL)) && !rd->continues) { - _cleanup_cached_gestures(pd, target, gesture_type); - eina_hash_del(pd->m_object_events, &gesture_type, NULL); + _cleanup_cached_gestures(pd, target, gesture_type, recognizer); + eina_hash_del(pd->m_object_events, &recognizer, NULL); //FIXME: delete it by object not list. _cleanup_object(pd->m_gestures_to_delete); pd->m_gestures_to_delete = NULL; @@ -289,7 +323,6 @@ _efl_canvas_gesture_manager_filter_event(void *data, Eo *target, void *event) Eina_Iterator *it; Eina_Hash_Tuple *tup; Efl_Canvas_Gesture_Recognizer *recognizer; - Efl_Canvas_Gesture_Touch *touch_event; thisisreallystupid = eina_hash_find(pd->m_gesture_contex, &target); if (!thisisreallystupid) return; @@ -297,24 +330,18 @@ _efl_canvas_gesture_manager_filter_event(void *data, Eo *target, void *event) EINA_ITERATOR_FOREACH(it, tup) { const Efl_Event_Description *gesture_type = *(void**)tup->key; - //Check there is already created event exist or not. - touch_event = eina_hash_find(pd->m_object_events, &gesture_type); - if (!touch_event) + if (gesture_type == EFL_EVENT_GESTURE_CUSTOM) { - touch_event = efl_add_ref(EFL_CANVAS_GESTURE_TOUCH_CLASS, NULL); - eina_hash_add(pd->m_object_events, &gesture_type, touch_event); + Eina_List *l; + EINA_LIST_FOREACH(pd->custom_recognizers, l, recognizer) + _gesture_recognizer_process_internal(pd, recognizer, target, gesture_type, event); + } + else + { + recognizer = eina_hash_find(pd->m_recognizers, &gesture_type); + _gesture_recognizer_process_internal(pd, recognizer, target, gesture_type, event); } - - efl_gesture_touch_point_record(touch_event, event); - - //This is for handling the case that mouse event pairs dont match. - //Such as the case of canceling gesture recognition after a mouse down. - if (efl_gesture_touch_state_get(touch_event) == EFL_GESTURE_TOUCH_STATE_UNKNOWN) - continue; - - recognizer = eina_hash_find(pd->m_recognizers, &gesture_type); - _gesture_recognizer_process_internal(pd, recognizer, target, gesture_type, touch_event); } eina_iterator_free(it); } @@ -329,11 +356,19 @@ _efl_canvas_gesture_manager_recognizer_register(Eo *obj EINA_UNUSED, Efl_Canvas_ return; const Efl_Event_Description *type = _efl_gesture_type_get(dummy); - - //Add the recognizer to the m_recognizers - eina_hash_add(pd->m_recognizers, &type, efl_ref(recognizer)); - efl_del(dummy); + //Add the recognizer to the m_recognizers + if (type == EFL_EVENT_GESTURE_CUSTOM) + { + EINA_SAFETY_ON_TRUE_RETURN(pd->custom_recognizers && eina_list_data_find(pd->custom_recognizers, recognizer)); + pd->custom_recognizers = eina_list_append(pd->custom_recognizers, efl_ref(recognizer)); + } + else + { + EINA_SAFETY_ON_TRUE_RETURN(!!eina_hash_find(pd->m_recognizers, &type)); + eina_hash_add(pd->m_recognizers, &type, efl_ref(recognizer)); + } + } EOLIAN static void @@ -353,24 +388,31 @@ _efl_canvas_gesture_manager_recognizer_unregister(Eo *obj EINA_UNUSED, Efl_Canva type = _efl_gesture_type_get(dummy); efl_del(dummy); - //Check if its already registered - recognizer = eina_hash_find(pd->m_recognizers, &type); - - if (!recognizer) return; + if (type == EFL_EVENT_GESTURE_CUSTOM) + { + EINA_SAFETY_ON_TRUE_RETURN((!pd->custom_recognizers) || (!eina_list_data_find(pd->custom_recognizers, recognizer))); + pd->custom_recognizers = eina_list_remove(pd->custom_recognizers, recognizer); + eina_hash_del_by_key(pd->m_object_events, &recognizer); + efl_unref(recognizer); + } + else + { + EINA_SAFETY_ON_TRUE_RETURN(!eina_hash_find(pd->m_recognizers, &type)); + eina_hash_del_by_key(pd->m_object_events, &recognizer); + eina_hash_del_by_key(pd->m_recognizers, &type); + } //Remove that gesture from the list of object gestures EINA_LIST_FOREACH_SAFE(pd->m_object_gestures, l, l_next, object_gesture) { - if (object_gesture->type == type) + if ((object_gesture->type == type) && (object_gesture->recognizer == recognizer)) { pd->m_gestures_to_delete = eina_list_append(pd->m_gestures_to_delete, object_gesture->gesture); free(object_gesture); pd->m_object_gestures = eina_list_remove_list(pd->m_object_gestures, l); } } - - eina_hash_del(pd->m_recognizers, &type, NULL); } // EOLIAN static void @@ -419,8 +461,8 @@ _get_state(Efl_Canvas_Gesture_Manager_Data *pd, (efl_gesture_state_get(object_gesture->gesture) == EFL_GESTURE_STATE_CANCELED)) && (!rd->continues)) { - _cleanup_cached_gestures(pd, target, type); - eina_hash_del(pd->m_object_events, &type, NULL); + _cleanup_cached_gestures(pd, target, type, recognizer); + eina_hash_del(pd->m_object_events, &recognizer, NULL); _cleanup_object(pd->m_gestures_to_delete); pd->m_gestures_to_delete = NULL; return NULL; @@ -438,6 +480,8 @@ _get_state(Efl_Canvas_Gesture_Manager_Data *pd, object_gesture->recognizer = recognizer; object_gesture->type = type; object_gesture->gesture = gesture; + if (type == EFL_EVENT_GESTURE_CUSTOM) + efl_gesture_custom_gesture_name_set(gesture, efl_gesture_recognizer_custom_gesture_name_get(recognizer)); pd->m_object_gestures = eina_list_append(pd->m_object_gestures, object_gesture); @@ -446,14 +490,15 @@ _get_state(Efl_Canvas_Gesture_Manager_Data *pd, static void _cleanup_cached_gestures(Efl_Canvas_Gesture_Manager_Data *pd, - Eo *target, const Efl_Event_Description *type) + Eo *target, const Efl_Event_Description *type, Efl_Canvas_Gesture_Recognizer *recognizer) { Eina_List *l, *l_next; Object_Gesture *object_gesture; EINA_LIST_FOREACH_SAFE(pd->m_object_gestures, l, l_next, object_gesture) { - if ((object_gesture->type == type) && (target == object_gesture->object)) + if ((object_gesture->type == type) && (target == object_gesture->object) && + ((!recognizer) || (object_gesture->recognizer == recognizer))) { pd->m_gestures_to_delete = eina_list_append(pd->m_gestures_to_delete, object_gesture->gesture); free(object_gesture); @@ -463,12 +508,13 @@ _cleanup_cached_gestures(Efl_Canvas_Gesture_Manager_Data *pd, } void -efl_gesture_manager_gesture_clean_up(Eo *obj, Eo *target, const Efl_Event_Description *type) +efl_gesture_manager_gesture_clean_up(Eo *obj, Eo *target, const Efl_Event_Description *type, Efl_Canvas_Gesture_Recognizer *recognizer) { Efl_Canvas_Gesture_Manager_Data *pd = efl_data_scope_get(obj, MY_CLASS); - _cleanup_cached_gestures(pd, target, type); - eina_hash_del(pd->m_object_events, &type, NULL); + EINA_SAFETY_ON_NULL_RETURN(recognizer); + _cleanup_cached_gestures(pd, target, type, recognizer); + eina_hash_del(pd->m_object_events, &recognizer, NULL); _cleanup_object(pd->m_gestures_to_delete); pd->m_gestures_to_delete = NULL; } diff --git a/src/lib/evas/gesture/efl_canvas_gesture_private.h b/src/lib/evas/gesture/efl_canvas_gesture_private.h index 5c32703d18..dadf5c0123 100644 --- a/src/lib/evas/gesture/efl_canvas_gesture_private.h +++ b/src/lib/evas/gesture/efl_canvas_gesture_private.h @@ -12,7 +12,7 @@ #define TAP_TOUCH_TIME_THRESHOLD (0.1 * 1000) const Efl_Event_Description * _efl_gesture_type_get(const Eo *obj); -void efl_gesture_manager_gesture_clean_up(Eo *obj, Eo *target, const Efl_Event_Description *type); +void efl_gesture_manager_gesture_clean_up(Eo *obj, Eo *target, const Efl_Event_Description *type, Efl_Canvas_Gesture_Recognizer *recognizer); int _direction_get(Evas_Coord xx1, Evas_Coord xx2); Eina_Value *_recognizer_config_get(const Eo *obj, const char *name); @@ -25,10 +25,12 @@ typedef struct _Efl_Canvas_Gesture_Recognizer_Triple_Tap_Data Efl_Canvas_Gestur typedef struct _Efl_Canvas_Gesture_Recognizer_Momentum_Data Efl_Canvas_Gesture_Recognizer_Momentum_Data; typedef struct _Efl_Canvas_Gesture_Recognizer_Flick_Data Efl_Canvas_Gesture_Recognizer_Flick_Data; typedef struct _Efl_Canvas_Gesture_Recognizer_Zoom_Data Efl_Canvas_Gesture_Recognizer_Zoom_Data; +typedef struct _Efl_Canvas_Gesture_Recognizer_Custom_Data Efl_Canvas_Gesture_Recognizer_Custom_Data; typedef struct _Efl_Canvas_Gesture_Data Efl_Canvas_Gesture_Data; typedef struct _Efl_Canvas_Gesture_Momentum_Data Efl_Canvas_Gesture_Momentum_Data; typedef struct _Efl_Canvas_Gesture_Flick_Data Efl_Canvas_Gesture_Flick_Data; typedef struct _Efl_Canvas_Gesture_Zoom_Data Efl_Canvas_Gesture_Zoom_Data; +typedef struct _Efl_Canvas_Gesture_Custom_Data Efl_Canvas_Gesture_Custom_Data; typedef struct _Efl_Canvas_Gesture_Touch_Data { @@ -130,6 +132,11 @@ struct _Efl_Canvas_Gesture_Recognizer_Zoom_Data Eina_Bool calc_temp; }; +struct _Efl_Canvas_Gesture_Recognizer_Custom_Data +{ + Eina_Stringshare *name; +}; + struct _Efl_Canvas_Gesture_Data { Efl_Canvas_Gesture_State state; @@ -158,4 +165,9 @@ struct _Efl_Canvas_Gesture_Zoom_Data double zoom; }; +struct _Efl_Canvas_Gesture_Custom_Data +{ + Eina_Stringshare *gesture_name; +}; + #endif diff --git a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_custom.c b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_custom.c new file mode 100644 index 0000000000..8900abe71a --- /dev/null +++ b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_custom.c @@ -0,0 +1,32 @@ +#include "efl_canvas_gesture_private.h" + +#define MY_CLASS EFL_CANVAS_GESTURE_RECOGNIZER_CUSTOM_CLASS + + +EOLIAN static Eo * +_efl_canvas_gesture_recognizer_custom_efl_object_finalize(Eo *obj, Efl_Canvas_Gesture_Recognizer_Custom_Data *pd) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(pd->name, NULL); + return efl_finalize(efl_super(obj, MY_CLASS)); +} + +EOLIAN static void +_efl_canvas_gesture_recognizer_custom_efl_object_destructor(Eo *obj, Efl_Canvas_Gesture_Recognizer_Custom_Data *pd) +{ + eina_stringshare_del(pd->name); + efl_destructor(efl_super(obj, MY_CLASS)); +} + +EOLIAN static void +_efl_canvas_gesture_recognizer_custom_gesture_name_set(Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Recognizer_Custom_Data *pd, const char *name) +{ + eina_stringshare_replace(&pd->name, name); +} + +EOLIAN static Eina_Stringshare * +_efl_canvas_gesture_recognizer_custom_gesture_name_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Recognizer_Custom_Data *pd) +{ + return pd->name; +} + +#include "efl_canvas_gesture_recognizer_custom.eo.c" diff --git a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_custom.eo b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_custom.eo new file mode 100644 index 0000000000..f691694e8c --- /dev/null +++ b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_custom.eo @@ -0,0 +1,23 @@ +abstract @beta Efl.Canvas.Gesture_Recognizer_Custom extends Efl.Canvas.Gesture_Recognizer +{ + [[This is the recognizer for Custom gestures. + See @Efl.Canvas.Gesture_Recognizer. + ]] + c_prefix: efl_gesture_recognizer_custom; + methods { + @property gesture_name { + [[This is the name of the gesture recognizer.]] + get { + } + set { + } + values { + gesture_name: string; [[The name of the gesture recognizer.]] + } + } + } + implements { + Efl.Object.destructor; + Efl.Object.finalize; + } +} diff --git a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_double_tap.c b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_double_tap.c index f6c7e0e44c..1db46da7c3 100644 --- a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_double_tap.c +++ b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_double_tap.c @@ -31,7 +31,7 @@ _tap_timeout_cb(void *data) efl_event_callback_call(pd->target, EFL_EVENT_GESTURE_DOUBLE_TAP, pd->gesture); efl_gesture_manager_gesture_clean_up(efl_provider_find(data, EFL_CANVAS_GESTURE_MANAGER_CLASS), - pd->target, EFL_EVENT_GESTURE_DOUBLE_TAP); + pd->target, EFL_EVENT_GESTURE_DOUBLE_TAP, data); pd->timeout = NULL; pd->tap_count = 0; diff --git a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_flick.c b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_flick.c index 3b89ebec32..de45dd762a 100644 --- a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_flick.c +++ b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_flick.c @@ -212,7 +212,7 @@ _efl_canvas_gesture_recognizer_flick_efl_canvas_gesture_recognizer_recognize(Eo //This is to handle a case with a mouse click on the target object. if (efl_gesture_touch_state_get(event) == EFL_GESTURE_TOUCH_STATE_END && !pd->touched) { - efl_gesture_manager_gesture_clean_up(efl_provider_find(obj, EFL_CANVAS_GESTURE_MANAGER_CLASS), watched, EFL_EVENT_GESTURE_FLICK); + efl_gesture_manager_gesture_clean_up(efl_provider_find(obj, EFL_CANVAS_GESTURE_MANAGER_CLASS), watched, EFL_EVENT_GESTURE_FLICK, obj); dead = EINA_TRUE; } diff --git a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_triple_tap.c b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_triple_tap.c index 9c7a70a2e4..3144aa30d1 100644 --- a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_triple_tap.c +++ b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_triple_tap.c @@ -30,7 +30,7 @@ _tap_timeout_cb(void *data) efl_gesture_state_set(pd->gesture, EFL_GESTURE_STATE_CANCELED); efl_event_callback_call(pd->target, EFL_EVENT_GESTURE_TRIPLE_TAP, pd->gesture); - efl_gesture_manager_gesture_clean_up(efl_provider_find(data, EFL_CANVAS_GESTURE_MANAGER_CLASS), pd->target, EFL_EVENT_GESTURE_TRIPLE_TAP); + efl_gesture_manager_gesture_clean_up(efl_provider_find(data, EFL_CANVAS_GESTURE_MANAGER_CLASS), pd->target, EFL_EVENT_GESTURE_TRIPLE_TAP, data); pd->timeout = NULL; pd->tap_count = 0; diff --git a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_zoom.c b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_zoom.c index 2857dd30d2..40e638a5df 100644 --- a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_zoom.c +++ b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_zoom.c @@ -267,7 +267,7 @@ _efl_canvas_gesture_recognizer_zoom_efl_canvas_gesture_recognizer_recognize(Eo * rd->continues = EINA_FALSE; _reset_recognizer(pd); - efl_gesture_manager_gesture_clean_up(efl_provider_find(obj, EFL_CANVAS_GESTURE_MANAGER_CLASS), watched, EFL_EVENT_GESTURE_ZOOM); + efl_gesture_manager_gesture_clean_up(efl_provider_find(obj, EFL_CANVAS_GESTURE_MANAGER_CLASS), watched, EFL_EVENT_GESTURE_ZOOM, obj); return EFL_GESTURE_RECOGNIZER_RESULT_IGNORE; } diff --git a/src/lib/evas/gesture/efl_canvas_gesture_types.eot b/src/lib/evas/gesture/efl_canvas_gesture_types.eot index ad3ebd7c64..e48c0abf3d 100644 --- a/src/lib/evas/gesture/efl_canvas_gesture_types.eot +++ b/src/lib/evas/gesture/efl_canvas_gesture_types.eot @@ -46,6 +46,7 @@ enum @beta Efl.Canvas.Gesture_Recognizer_Type momentum, flick, zoom, + custom, } struct @beta @c_name(Efl_Gesture_Touch_Point_Info) Efl.Canvas.Gesture_Touch_Point_Info { diff --git a/src/lib/evas/gesture/meson.build b/src/lib/evas/gesture/meson.build index 7838efdc9d..5daa6f6f30 100644 --- a/src/lib/evas/gesture/meson.build +++ b/src/lib/evas/gesture/meson.build @@ -8,6 +8,7 @@ pub_eo_files = [ 'efl_canvas_gesture_momentum.eo', 'efl_canvas_gesture_flick.eo', 'efl_canvas_gesture_zoom.eo', + 'efl_canvas_gesture_custom.eo', 'efl_canvas_gesture_recognizer.eo', 'efl_canvas_gesture_recognizer_tap.eo', 'efl_canvas_gesture_recognizer_double_tap.eo', @@ -16,6 +17,7 @@ pub_eo_files = [ 'efl_canvas_gesture_recognizer_momentum.eo', 'efl_canvas_gesture_recognizer_flick.eo', 'efl_canvas_gesture_recognizer_zoom.eo', + 'efl_canvas_gesture_recognizer_custom.eo', 'efl_canvas_gesture_manager.eo', 'efl_canvas_gesture_events.eo' ] @@ -70,6 +72,7 @@ evas_src += files([ 'efl_canvas_gesture_momentum.c', 'efl_canvas_gesture_flick.c', 'efl_canvas_gesture_zoom.c', + 'efl_canvas_gesture_custom.c', 'efl_canvas_gesture_recognizer.c', 'efl_canvas_gesture_recognizer_tap.c', 'efl_canvas_gesture_recognizer_double_tap.c', @@ -78,6 +81,7 @@ evas_src += files([ 'efl_canvas_gesture_recognizer_momentum.c', 'efl_canvas_gesture_recognizer_flick.c', 'efl_canvas_gesture_recognizer_zoom.c', + 'efl_canvas_gesture_recognizer_custom.c', 'efl_canvas_gesture_manager.c', ])