diff --git a/legacy/evas/src/lib/Evas.h b/legacy/evas/src/lib/Evas.h index f99c4bbd3b..e78e9a9688 100644 --- a/legacy/evas/src/lib/Evas.h +++ b/legacy/evas/src/lib/Evas.h @@ -50,7 +50,8 @@ typedef enum _Evas_Callback_Type EVAS_CALLBACK_MOVE, /**< Move Event */ EVAS_CALLBACK_RESIZE, /**< Resize Event */ EVAS_CALLBACK_RESTACK, /**< Restack Event */ - EVAS_CALLBACK_DEL /**< Object Being Deleted (called before Free) */ + EVAS_CALLBACK_DEL, /**< Object Being Deleted (called before Free) */ + EVAS_CALLBACK_HOLD /**< Events go on/off hold */ } Evas_Callback_Type; /**< The type of event to trigger the callback */ typedef enum _Evas_Button_Flags @@ -147,6 +148,7 @@ typedef struct _Evas_Event_Mouse_Move Evas_Event_Mouse_Move; /**< Event structur typedef struct _Evas_Event_Mouse_Wheel Evas_Event_Mouse_Wheel; /**< Event structure for #EVAS_CALLBACK_MOUSE_WHEEL event callbacks */ typedef struct _Evas_Event_Key_Down Evas_Event_Key_Down; /**< Event structure for #EVAS_CALLBACK_KEY_DOWN event callbacks */ typedef struct _Evas_Event_Key_Up Evas_Event_Key_Up; /**< Event structure for #EVAS_CALLBACK_KEY_UP event callbacks */ +typedef struct _Evas_Event_Hold Evas_Event_Hold; /**< Event structure for #EVAS_CALLBACK_HOLD event callbacks */ #define EVAS_LOAD_ERROR_NONE 0 /**< No error on load */ #define EVAS_LOAD_ERROR_GENERIC 1 /**< A non-specific error occured */ @@ -350,6 +352,15 @@ struct _Evas_Event_Key_Up /** Key release event */ Evas_Event_Flags event_flags; }; +struct _Evas_Event_Hold /** Hold change event */ +{ + int hold; /**< The hold flag */ + void *data; + + unsigned int timestamp; + Evas_Event_Flags event_flags; +}; + typedef enum _Evas_Object_Pointer_Mode { EVAS_OBJECT_POINTER_MODE_AUTOGRAB, /**< default, X11-like */ @@ -759,6 +770,7 @@ extern "C" { EAPI void evas_event_feed_mouse_wheel (Evas *e, int direction, int z, unsigned int timestamp, const void *data); EAPI void evas_event_feed_key_down (Evas *e, const char *keyname, const char *key, const char *string, const char *compose, unsigned int timestamp, const void *data); EAPI void evas_event_feed_key_up (Evas *e, const char *keyname, const char *key, const char *string, const char *compose, unsigned int timestamp, const void *data); + EAPI void evas_event_feed_hold (Evas *e, int hold, unsigned int timestamp, const void *data); EAPI void evas_object_focus_set (Evas_Object *obj, Evas_Bool focus); EAPI Evas_Bool evas_object_focus_get (const Evas_Object *obj); diff --git a/legacy/evas/src/lib/canvas/evas_events.c b/legacy/evas/src/lib/canvas/evas_events.c index afe925e0b8..c31ac1534c 100644 --- a/legacy/evas/src/lib/canvas/evas_events.c +++ b/legacy/evas/src/lib/canvas/evas_events.c @@ -982,6 +982,45 @@ evas_event_feed_key_up(Evas *e, const char *keyname, const char *key, const char _evas_unwalk(e); } +/** + * To be documented. + * + * FIXME: To be fixed. + * + */ +EAPI void +evas_event_feed_hold(Evas *e, int hold, unsigned int timestamp, const void *data) +{ + Evas_List *l, *copy; + Evas_Event_Hold ev; + + MAGIC_CHECK(e, Evas, MAGIC_EVAS); + return; + MAGIC_CHECK_END(); + + if (e->events_frozen > 0) return; + e->last_timestamp = timestamp; + + ev.hold = hold; + ev.data = (void *)data; + ev.timestamp = timestamp; + ev.event_flags = EVAS_EVENT_FLAG_NONE; + + _evas_walk(e); + copy = evas_event_list_copy(e->pointer.object.in); + for (l = copy; l; l = l->next) + { + Evas_Object *obj; + + obj = l->data; + if (e->events_frozen <= 0) + evas_object_event_callback_call(obj, EVAS_CALLBACK_HOLD, &ev); + if (e->delete_me) break; + } + if (copy) copy = evas_list_free(copy); + _evas_unwalk(e); +} + /** * @defgroup Evas_Object_Event_Flags_Group Evas Object Event Flag Functions *