forked from enlightenment/efl
Evas: Send Efl_Event_Key data to evas objects
This commit is contained in:
parent
d6b8f0a691
commit
350b465d22
|
@ -537,6 +537,7 @@ struct _Evas_Event_Key_Down /** Key press event */
|
|||
Evas_Device *dev;
|
||||
|
||||
unsigned int keycode; /**< Key scan code numeric value @since 1.10 */
|
||||
void *reserved; /**< Reserved field for internal use only. @since 1.18 */
|
||||
};
|
||||
|
||||
struct _Evas_Event_Key_Up /** Key release event */
|
||||
|
@ -554,6 +555,7 @@ struct _Evas_Event_Key_Up /** Key release event */
|
|||
Evas_Device *dev;
|
||||
|
||||
unsigned int keycode; /**< Key scan code numeric value @since 1.10 */
|
||||
void *reserved; /**< Reserved field for internal use only. @since 1.18 */
|
||||
};
|
||||
|
||||
struct _Evas_Event_Render_Post /** Send when the frame rendering is done @since 1.8 */
|
||||
|
|
|
@ -116,7 +116,6 @@ _efl_event_key_efl_event_dup(Eo *obj EINA_UNUSED, Efl_Event_Key_Data *pd)
|
|||
pd2->keyname = eina_stringshare_add(pd->keyname);
|
||||
pd2->string = eina_stringshare_add(pd->string);
|
||||
pd2->compose = eina_stringshare_add(pd->compose);
|
||||
pd2->legacy = NULL;
|
||||
pd2->evas_done = 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -71,54 +71,34 @@ typedef struct
|
|||
|
||||
|
||||
static inline void *
|
||||
_pointer_event_get(const _eo_evas_object_cb_info *info, const Eo_Event *event,
|
||||
const Eo_Event_Description **pdesc)
|
||||
_efl_event_get(const _eo_evas_object_cb_info *info, const Eo_Event *event,
|
||||
const Eo_Event_Description **pdesc, Efl_Event_Flags **pflags)
|
||||
{
|
||||
if (!info->data) return NULL;
|
||||
|
||||
/* See also evas_events.c: _pointer_event_create() */
|
||||
|
||||
#define EV_CASE(TYPE, NEWTYPE, Type) \
|
||||
case EVAS_CALLBACK_ ## TYPE: \
|
||||
*pdesc = EFL_EVENT_POINTER_ ## NEWTYPE; \
|
||||
return ((Evas_Event_ ## Type *) event->info)->reserved
|
||||
case EVAS_CALLBACK_ ## TYPE: \
|
||||
*pdesc = EFL_EVENT_ ## NEWTYPE; \
|
||||
*pflags = &((Evas_Event_ ## Type *) event->info)->event_flags; \
|
||||
return ((Evas_Event_ ## Type *) event->info)->reserved
|
||||
switch (info->type)
|
||||
{
|
||||
EV_CASE(MOUSE_MOVE, MOVE, Mouse_Move);
|
||||
EV_CASE(MOUSE_OUT, OUT, Mouse_Out);
|
||||
EV_CASE(MOUSE_IN, IN, Mouse_In);
|
||||
EV_CASE(MOUSE_DOWN, DOWN, Mouse_Down);
|
||||
EV_CASE(MOUSE_UP, UP, Mouse_Up);
|
||||
EV_CASE(MULTI_MOVE, MOVE, Multi_Move);
|
||||
EV_CASE(MULTI_DOWN, DOWN, Multi_Down);
|
||||
EV_CASE(MULTI_UP, UP, Multi_Up);
|
||||
EV_CASE(MOUSE_WHEEL, WHEEL, Mouse_Wheel);
|
||||
EV_CASE(MOUSE_MOVE, POINTER_MOVE, Mouse_Move);
|
||||
EV_CASE(MOUSE_OUT, POINTER_OUT, Mouse_Out);
|
||||
EV_CASE(MOUSE_IN, POINTER_IN, Mouse_In);
|
||||
EV_CASE(MOUSE_DOWN , POINTER_DOWN, Mouse_Down);
|
||||
EV_CASE(MOUSE_UP, POINTER_UP, Mouse_Up);
|
||||
EV_CASE(MULTI_MOVE, POINTER_MOVE, Multi_Move);
|
||||
EV_CASE(MULTI_DOWN, POINTER_DOWN, Multi_Down);
|
||||
EV_CASE(MULTI_UP, POINTER_UP, Multi_Up);
|
||||
EV_CASE(MOUSE_WHEEL, POINTER_WHEEL, Mouse_Wheel);
|
||||
EV_CASE(KEY_DOWN, KEY_DOWN, Key_Down);
|
||||
EV_CASE(KEY_UP, KEY_UP, Key_Up);
|
||||
default: return NULL;
|
||||
}
|
||||
#undef EV_CASE
|
||||
|
||||
}
|
||||
|
||||
static void
|
||||
_event_flags_adjust(void *ev, const Efl_Event_Pointer_Data *pedata)
|
||||
{
|
||||
#define EV_CASE(NEWTYPE, Type) \
|
||||
case EFL_POINTER_ACTION_ ## NEWTYPE: \
|
||||
((Evas_Event_ ## Type *) ev)->event_flags = pedata->event_flags; \
|
||||
break;
|
||||
|
||||
switch (pedata->action)
|
||||
{
|
||||
EV_CASE(MOVE, Mouse_Move);
|
||||
EV_CASE(OUT, Mouse_Out);
|
||||
EV_CASE(IN, Mouse_In);
|
||||
EV_CASE(DOWN, Mouse_Down);
|
||||
EV_CASE(UP, Mouse_Up);
|
||||
EV_CASE(WHEEL, Mouse_Wheel);
|
||||
default: break;
|
||||
}
|
||||
|
||||
#undef EV_CASE
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
|
@ -127,19 +107,16 @@ _eo_evas_object_cb(void *data, const Eo_Event *event)
|
|||
_eo_evas_object_cb_info *info = data;
|
||||
const Eo_Event_Description *desc;
|
||||
Evas *evas = evas_object_evas_get(event->object);
|
||||
Efl_Event_Flags *pflags;
|
||||
void *pe;
|
||||
|
||||
pe = _pointer_event_get(info, event, &desc);
|
||||
pe = _efl_event_get(info, event, &desc, &pflags);
|
||||
if (pe)
|
||||
{
|
||||
Efl_Event_Pointer_Data *pedata;
|
||||
Efl_Event_Flags flags;
|
||||
|
||||
pedata = eo_data_scope_get(pe, EFL_EVENT_POINTER_CLASS);
|
||||
flags = pedata->event_flags;
|
||||
Efl_Event_Flags flags = efl_event_flags_get(pe);
|
||||
eo_event_callback_call(event->object, desc, pe);
|
||||
if (flags != pedata->event_flags)
|
||||
_event_flags_adjust(event->info, pedata);
|
||||
// write changes to event_flags back to the legacy struct
|
||||
*pflags = flags;
|
||||
}
|
||||
if (info->func)
|
||||
{
|
||||
|
|
|
@ -2636,7 +2636,8 @@ _canvas_event_feed_key_down_internal(Eo *eo_e,
|
|||
const char *compose,
|
||||
unsigned int timestamp,
|
||||
const void *data,
|
||||
unsigned int keycode)
|
||||
unsigned int keycode,
|
||||
Efl_Event_Key_Data *ke)
|
||||
{
|
||||
Evas_Public_Data *e = _pd;
|
||||
int event_id = 0;
|
||||
|
@ -2666,6 +2667,16 @@ _canvas_event_feed_key_down_internal(Eo *eo_e,
|
|||
ev.keycode = keycode;
|
||||
if (ev.dev) eo_ref(ev.dev);
|
||||
|
||||
ev.reserved = ke ? ke->eo : NULL;
|
||||
if (ke)
|
||||
{
|
||||
ke->device = ev.dev;
|
||||
ke->event_flags = ev.event_flags;
|
||||
ke->modifiers = ev.modifiers;
|
||||
ke->locks = ev.locks;
|
||||
ke->legacy = &ev;
|
||||
}
|
||||
|
||||
if (e->grabs)
|
||||
{
|
||||
Eina_List *l;
|
||||
|
@ -2732,6 +2743,15 @@ _canvas_event_feed_key_down_internal(Eo *eo_e,
|
|||
_evas_post_event_callback_call(eo_e, e);
|
||||
if (ev.dev) eo_unref(ev.dev);
|
||||
_evas_unwalk(e);
|
||||
|
||||
if (ke)
|
||||
{
|
||||
ke->device = NULL;
|
||||
ke->event_flags = 0;
|
||||
ke->modifiers = NULL;
|
||||
ke->locks = NULL;
|
||||
ke->legacy = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -2743,7 +2763,8 @@ _canvas_event_feed_key_up_internal(Eo *eo_e,
|
|||
const char *compose,
|
||||
unsigned int timestamp,
|
||||
const void *data,
|
||||
unsigned int keycode)
|
||||
unsigned int keycode,
|
||||
Efl_Event_Key_Data *ke)
|
||||
{
|
||||
Evas_Public_Data *e = _pd;
|
||||
int event_id = 0;
|
||||
|
@ -2772,6 +2793,16 @@ _canvas_event_feed_key_up_internal(Eo *eo_e,
|
|||
ev.keycode = keycode;
|
||||
if (ev.dev) eo_ref(ev.dev);
|
||||
|
||||
ev.reserved = ke ? ke->eo : NULL;
|
||||
if (ke)
|
||||
{
|
||||
ke->device = ev.dev;
|
||||
ke->event_flags = ev.event_flags;
|
||||
ke->modifiers = ev.modifiers;
|
||||
ke->locks = ev.locks;
|
||||
ke->legacy = &ev;
|
||||
}
|
||||
|
||||
if (e->grabs)
|
||||
{
|
||||
Eina_List *l;
|
||||
|
@ -2838,6 +2869,15 @@ _canvas_event_feed_key_up_internal(Eo *eo_e,
|
|||
_evas_post_event_callback_call(eo_e, e);
|
||||
if (ev.dev) eo_unref(ev.dev);
|
||||
_evas_unwalk(e);
|
||||
|
||||
if (ke)
|
||||
{
|
||||
ke->device = NULL;
|
||||
ke->event_flags = 0;
|
||||
ke->modifiers = NULL;
|
||||
ke->locks = NULL;
|
||||
ke->legacy = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
EAPI void
|
||||
|
@ -2845,7 +2885,7 @@ evas_event_feed_key_down(Eo *eo_e, const char *keyname, const char *key, const c
|
|||
{
|
||||
Evas_Public_Data *e = eo_data_scope_get(eo_e, EVAS_CANVAS_CLASS);
|
||||
_canvas_event_feed_key_down_internal(eo_e, e, keyname, key, string,
|
||||
compose, timestamp, data, 0);
|
||||
compose, timestamp, data, 0, NULL);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
|
@ -2853,7 +2893,7 @@ evas_event_feed_key_up(Eo *eo_e, const char *keyname, const char *key, const cha
|
|||
{
|
||||
Evas_Public_Data *e = eo_data_scope_get(eo_e, EVAS_CANVAS_CLASS);
|
||||
_canvas_event_feed_key_up_internal(eo_e, e, keyname, key, string,
|
||||
compose, timestamp, data, 0);
|
||||
compose, timestamp, data, 0, NULL);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
|
@ -2861,7 +2901,7 @@ evas_event_feed_key_down_with_keycode(Eo *eo_e, const char *keyname, const char
|
|||
{
|
||||
Evas_Public_Data *e = eo_data_scope_get(eo_e, EVAS_CANVAS_CLASS);
|
||||
_canvas_event_feed_key_down_internal(eo_e, e, keyname, key, string,
|
||||
compose, timestamp, data, keycode);
|
||||
compose, timestamp, data, keycode, NULL);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
|
@ -2869,7 +2909,7 @@ evas_event_feed_key_up_with_keycode(Eo *eo_e, const char *keyname, const char *k
|
|||
{
|
||||
Evas_Public_Data *e = eo_data_scope_get(eo_e, EVAS_CANVAS_CLASS);
|
||||
_canvas_event_feed_key_up_internal(eo_e, e, keyname, key, string,
|
||||
compose, timestamp, data, keycode);
|
||||
compose, timestamp, data, keycode, NULL);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
|
@ -3298,6 +3338,35 @@ _evas_canvas_event_pointer_cb(void *data, const Eo_Event *event)
|
|||
return EO_CALLBACK_CONTINUE;
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
_evas_canvas_event_key_cb(void *data, const Eo_Event *event)
|
||||
{
|
||||
Efl_Event_Key *evt = event->info;
|
||||
Evas_Public_Data *e = data;
|
||||
Efl_Event_Key_Data *ev;
|
||||
|
||||
ev = eo_data_scope_get(evt, EFL_EVENT_KEY_CLASS);
|
||||
if (!ev) return EO_CALLBACK_CONTINUE;
|
||||
|
||||
if (ev->pressed)
|
||||
{
|
||||
_canvas_event_feed_key_down_internal(e->evas, e, ev->keyname, ev->key,
|
||||
ev->string, ev->compose,
|
||||
ev->timestamp, ev->data,
|
||||
ev->keycode, ev);
|
||||
}
|
||||
else
|
||||
{
|
||||
_canvas_event_feed_key_up_internal(e->evas, e, ev->keyname, ev->key,
|
||||
ev->string, ev->compose,
|
||||
ev->timestamp, ev->data,
|
||||
ev->keycode, ev);
|
||||
}
|
||||
|
||||
ev->evas_done = EINA_FALSE;
|
||||
return EO_CALLBACK_CONTINUE;
|
||||
}
|
||||
|
||||
EO_CALLBACKS_ARRAY_DEFINE(_evas_canvas_event_pointer_callbacks,
|
||||
{ EFL_EVENT_POINTER_MOVE, _evas_canvas_event_pointer_cb },
|
||||
{ EFL_EVENT_POINTER_DOWN, _evas_canvas_event_pointer_cb },
|
||||
|
@ -3305,7 +3374,9 @@ EO_CALLBACKS_ARRAY_DEFINE(_evas_canvas_event_pointer_callbacks,
|
|||
{ EFL_EVENT_POINTER_IN, _evas_canvas_event_pointer_cb },
|
||||
{ EFL_EVENT_POINTER_OUT, _evas_canvas_event_pointer_cb },
|
||||
{ EFL_EVENT_POINTER_CANCEL, _evas_canvas_event_pointer_cb },
|
||||
{ EFL_EVENT_POINTER_WHEEL, _evas_canvas_event_pointer_cb })
|
||||
{ EFL_EVENT_POINTER_WHEEL, _evas_canvas_event_pointer_cb },
|
||||
{ EFL_EVENT_KEY_DOWN, _evas_canvas_event_key_cb },
|
||||
{ EFL_EVENT_KEY_UP, _evas_canvas_event_key_cb })
|
||||
|
||||
void
|
||||
_evas_canvas_event_init(Evas *eo_e, Evas_Public_Data *e)
|
||||
|
|
|
@ -1940,6 +1940,7 @@ Evas_Device *_evas_device_top_get(const Evas *e);
|
|||
/* legacy/eo events */
|
||||
Eina_Bool efl_event_pointer_legacy_info_set(Efl_Event_Pointer *evt, const void *event_info, Evas_Callback_Type type);
|
||||
const void *efl_event_pointer_legacy_info_get(const Efl_Event_Pointer *evt, Evas_Callback_Type *ptype, Eina_Bool multi);
|
||||
Eina_Bool efl_event_key_legacy_info_set(Efl_Event_Key *evt, const void *event_info, Evas_Callback_Type type);
|
||||
|
||||
Eina_Bool evas_vg_loader_svg(Evas_Object *vg, const Eina_File *f, const char *key EINA_UNUSED);
|
||||
|
||||
|
|
Loading…
Reference in New Issue