summaryrefslogtreecommitdiff
path: root/src/lib/evas/canvas/evas_device.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/evas/canvas/evas_device.c')
-rw-r--r--src/lib/evas/canvas/evas_device.c36
1 files changed, 20 insertions, 16 deletions
diff --git a/src/lib/evas/canvas/evas_device.c b/src/lib/evas/canvas/evas_device.c
index 23eb01d08c..3f52d59635 100644
--- a/src/lib/evas/canvas/evas_device.c
+++ b/src/lib/evas/canvas/evas_device.c
@@ -76,6 +76,7 @@ _new_default_device_find(Evas_Public_Data *e, Evas_Device *old_dev)
static void
_del_cb(void *data, const Efl_Event *ev)
{
+ Efl_Input_Device_Type devtype;
Evas_Public_Data *e = data;
e->devices_modified = EINA_TRUE;
@@ -89,7 +90,8 @@ _del_cb(void *data, const Efl_Event *ev)
else if (e->default_keyboard == ev->object)
e->default_keyboard = _new_default_device_find(e, ev->object);
- if ((efl_input_device_type_get(ev->object) == EFL_INPUT_DEVICE_TYPE_SEAT) && (!e->default_seat))
+ devtype = efl_input_device_type_get(ev->object);
+ if ((devtype == EFL_INPUT_DEVICE_TYPE_SEAT) && (!e->default_seat))
{
Evas_Pointer_Data *pdata = _evas_pointer_data_by_device_get(e, ev->object);
if (pdata)
@@ -108,15 +110,16 @@ _del_cb(void *data, const Efl_Event *ev)
}
}
- _evas_pointer_data_remove(e, ev->object);
+ if (devtype == EFL_INPUT_DEVICE_TYPE_MOUSE)
+ _evas_pointer_data_remove(e, ev->object);
eina_hash_del_by_key(e->locks.masks, &ev->object);
eina_hash_del_by_key(e->modifiers.masks, &ev->object);
- efl_event_callback_call(e->evas, EFL_CANVAS_EVENT_DEVICE_REMOVED,
+ efl_event_callback_call(e->evas, EFL_CANVAS_SCENE_EVENT_DEVICE_REMOVED,
ev->object);
}
EOLIAN Efl_Input_Device *
-_evas_canvas_efl_canvas_device_get(Evas *eo_e EINA_UNUSED, Evas_Public_Data *e, const char *name)
+_evas_canvas_efl_canvas_scene_device_get(Evas *eo_e EINA_UNUSED, Evas_Public_Data *e, const char *name)
{
const char *dev_name;
Evas_Device *dev;
@@ -138,11 +141,11 @@ _evas_canvas_efl_canvas_device_get(Evas *eo_e EINA_UNUSED, Evas_Public_Data *e,
EAPI Evas_Device *
evas_device_get(Evas *eo_e, const char *name)
{
- return efl_canvas_device_get(eo_e, name);
+ return efl_canvas_scene_device_get(eo_e, name);
}
EOLIAN Efl_Input_Device *
-_evas_canvas_efl_canvas_seat_get(Evas *eo_e EINA_UNUSED, Evas_Public_Data *e, unsigned int id)
+_evas_canvas_efl_canvas_scene_seat_get(Evas *eo_e EINA_UNUSED, Evas_Public_Data *e, unsigned int id)
{
Evas_Device *dev;
Eina_List *l;
@@ -162,7 +165,7 @@ _evas_canvas_efl_canvas_seat_get(Evas *eo_e EINA_UNUSED, Evas_Public_Data *e, un
EAPI Evas_Device *
evas_device_get_by_seat_id(Evas *eo_e, unsigned int id)
{
- return efl_canvas_seat_get(eo_e, id);
+ return efl_canvas_scene_seat_get(eo_e, id);
}
EAPI Evas_Device *
@@ -184,11 +187,11 @@ evas_device_add_full(Evas *eo_e, const char *name, const char *desc,
SAFETY_CHECK(eo_e, EVAS_CANVAS_CLASS, NULL);
- dev = efl_add(EFL_INPUT_DEVICE_CLASS, parent_dev ?: eo_e,
- efl_name_set(efl_added, name),
- efl_comment_set(efl_added, desc),
- efl_input_device_type_set(efl_added, clas),
- efl_input_device_source_set(efl_added, emulation_dev));
+ dev = efl_add_ref(EFL_INPUT_DEVICE_CLASS, parent_dev ?: eo_e,
+ efl_name_set(efl_added, name),
+ efl_comment_set(efl_added, desc),
+ efl_input_device_type_set(efl_added, clas),
+ efl_input_device_source_set(efl_added, emulation_dev));
d = efl_data_scope_get(dev, EFL_INPUT_DEVICE_CLASS);
d->evas = eo_e;
@@ -247,7 +250,7 @@ evas_device_add_full(Evas *eo_e, const char *name, const char *desc,
e->devices = eina_list_append(e->devices, dev);
efl_event_callback_add(dev, EFL_EVENT_DEL, _del_cb, e);
- efl_event_callback_call(eo_e, EFL_CANVAS_EVENT_DEVICE_ADDED, dev);
+ efl_event_callback_call(eo_e, EFL_CANVAS_SCENE_EVENT_DEVICE_ADDED, dev);
// Keeping this event to do not break things...
evas_event_callback_call(eo_e, EVAS_CALLBACK_DEVICE_CHANGED, dev);
if (e->pending_default_focus_obj && (e->default_seat == dev))
@@ -264,8 +267,9 @@ EAPI void
evas_device_del(Evas_Device *dev)
{
SAFETY_CHECK(dev, EFL_INPUT_DEVICE_CLASS);
-
- efl_del(dev);
+ if (!efl_invalidated_get(dev))
+ efl_del(dev);
+ efl_unref(dev);
}
EAPI void
@@ -500,7 +504,7 @@ again:
*/
EINA_LIST_FREE(e->devices, dev)
{
- efl_event_callback_call(e->evas, EFL_CANVAS_EVENT_DEVICE_REMOVED, dev);
+ efl_event_callback_call(e->evas, EFL_CANVAS_SCENE_EVENT_DEVICE_REMOVED, dev);
efl_event_callback_del(dev, EFL_EVENT_DEL, _del_cb, e);
}
}