forked from enlightenment/efl
Efl.Pointer.Event: Add dup() method to copy an event
This commit is contained in:
parent
05dfab8442
commit
8e31929aab
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue