diff --git a/src/lib/evas/canvas/efl_event_hold.c b/src/lib/evas/canvas/efl_event_hold.c index 099b34a152..4f169da2eb 100644 --- a/src/lib/evas/canvas/efl_event_hold.c +++ b/src/lib/evas/canvas/efl_event_hold.c @@ -2,6 +2,8 @@ # include #endif +#define EFL_EVENT_PROTECTED + #include #define EFL_INTERNAL_UNSTABLE @@ -53,4 +55,35 @@ _efl_event_hold_eo_base_constructor(Eo *obj, Efl_Event_Hold_Data *pd) return obj; } +EOLIAN static Efl_Event * +_efl_event_hold_efl_event_instance_get(Eo *klass EINA_UNUSED, void *_pd EINA_UNUSED, + Eo_Base *owner, void **priv) +{ + // TODO: Implement a cache. Depends only on how many hold events we trigger. + Efl_Event *evt = eo_add(MY_CLASS, owner); + if (priv) *priv = eo_data_scope_get(evt, MY_CLASS); + return evt; +} + +EOLIAN static void +_efl_event_hold_efl_event_reset(Eo *obj, Efl_Event_Hold_Data *pd) +{ + memset(pd, 0, sizeof(*pd)); + pd->eo = obj; +} + +EOLIAN static Efl_Event * +_efl_event_hold_efl_event_dup(Eo *obj, Efl_Event_Hold_Data *pd) +{ + Efl_Event_Hold_Data *ev; + Efl_Event *evt = eo_add(EFL_EVENT_HOLD_CLASS, eo_parent_get(obj)); + ev = eo_data_scope_get(evt, MY_CLASS); + if (ev) + { + memcpy(ev, pd, sizeof(*ev)); + ev->eo = evt; + } + return evt; +} + #include "efl_event_hold.eo.c" diff --git a/src/lib/evas/canvas/efl_event_hold.eo b/src/lib/evas/canvas/efl_event_hold.eo index 1b8d7f4c7e..4380c9f582 100644 --- a/src/lib/evas/canvas/efl_event_hold.eo +++ b/src/lib/evas/canvas/efl_event_hold.eo @@ -18,6 +18,9 @@ class Efl.Event.Hold (Eo.Base, Efl.Event.Input) } implements { Eo.Base.constructor; + Efl.Event.instance_get; + Efl.Event.reset; + Efl.Event.dup; Efl.Event.timestamp.get; Efl.Event.timestamp.set; }