Efl.Pointer.Event: Add dup() method to copy an event

This commit is contained in:
Jean-Philippe Andre 2016-05-12 15:07:49 +09:00
parent 05dfab8442
commit 8e31929aab
5 changed files with 32 additions and 4 deletions

View File

@ -4465,7 +4465,7 @@ _direct_mouse_inout(Ecore_Evas *ee, const Ecore_Event_Mouse_IO *info, Efl_Pointe
eo_event_callback_call(e, EVAS_CANVAS_EVENT_POINTER, evt);
processed = ev->evas_done;
eo_del(evt);
eo_unref(evt);
return processed;
}

View File

@ -37,5 +37,9 @@ interface Efl.Event
reset {
[[Resets the internal data to 0 or default values.]]
}
dup {
[[Creates a copy of this event.]]
return: own(Efl.Event);
}
}
}

View File

@ -91,6 +91,21 @@ _efl_pointer_event_efl_event_reset(Eo *obj, Efl_Pointer_Event_Data *pd)
pd->wheel.dir = EFL_ORIENT_VERTICAL;
}
EOLIAN static Efl_Event *
_efl_pointer_event_efl_event_dup(Eo *obj, Efl_Pointer_Event_Data *pd)
{
Efl_Pointer_Event_Data *ev;
Efl_Pointer_Event *evt;
evt = _efl_pointer_event_instance_get(EFL_POINTER_EVENT_CLASS, NULL, obj, &ev);
if (!evt) return NULL;
memcpy(ev, pd, sizeof(*ev));
ev->eo = evt;
return evt;
}
EOLIAN static void
_efl_pointer_event_action_set(Eo *obj EINA_UNUSED, Efl_Pointer_Event_Data *pd, Efl_Pointer_Action act)
{

View File

@ -126,6 +126,7 @@ class Efl.Pointer.Event (Eo.Base, Efl.Event)
Eo.Base.constructor;
class.destructor;
Efl.Event.reset;
Efl.Event.dup;
Efl.Event.timestamp.set;
Efl.Event.timestamp.get;
Efl.Event.event_type.set;

View File

@ -1271,7 +1271,7 @@ _feed_cancel_out(const Ecore_X_Event_Mouse_Out *e, Eina_Bool cancel)
*/
if (cancel)
{
Ecore_Event_Mouse_Button cancel = {
Ecore_Event_Mouse_Button ev = {
.event_window = (Ecore_Window) e->event_win,
.modifiers = e->modifiers,
.timestamp = e->time,
@ -1279,7 +1279,7 @@ _feed_cancel_out(const Ecore_X_Event_Mouse_Out *e, Eina_Bool cancel)
.x = e->x,
.y = e->y,
};
ecore_event_evas_mouse_button_cancel(NULL, ECORE_EVENT_MOUSE_BUTTON_CANCEL, &cancel);
ecore_event_evas_mouse_button_cancel(NULL, ECORE_EVENT_MOUSE_BUTTON_CANCEL, &ev);
}
Ecore_Event_Mouse_IO io = {
@ -1768,7 +1768,15 @@ _ecore_evas_x_event_window_hide(void *data EINA_UNUSED, int type EINA_UNUSED, vo
if (e->win != ee->prop.window) return ECORE_CALLBACK_PASS_ON;
if (ee->in)
{
_feed_cancel_out(e, EINA_TRUE);
Ecore_X_Event_Mouse_Out out = {
.event_win = e->event_win,
.modifiers = 0,
.time = e->time,
.win = e->win,
.x = 0,
.y = 0,
};
_feed_cancel_out(&out, EINA_TRUE);
if (ee->func.fn_mouse_out) ee->func.fn_mouse_out(ee);
if (ee->prop.cursor.object) evas_object_hide(ee->prop.cursor.object);
ee->in = EINA_FALSE;