diff --git a/src/examples/ecore/ecore_evas_cursor_example.c b/src/examples/ecore/ecore_evas_cursor_example.c index 59ba1dfba2..16a3928f76 100644 --- a/src/examples/ecore/ecore_evas_cursor_example.c +++ b/src/examples/ecore/ecore_evas_cursor_example.c @@ -56,11 +56,11 @@ _mouse_pos_print(void *data) if (!seat) { fprintf(stderr, "Could not fetch the seat from mouse '%s'\n", - efl_input_device_name_get(pointer)); + efl_name_get(pointer)); continue; } printf("Mouse from seat '%s' is at (%d, %d)\n", - efl_input_device_name_get(seat), x, y); + efl_name_get(seat), x, y); } return EINA_TRUE; } @@ -109,14 +109,14 @@ _seat_children_print(Efl_Input_Device *seat) Efl_Input_Device *child; Eina_Iterator *it; - printf("Children of seat: %s (%s, seat id: %d)\n", efl_input_device_name_get(seat), + printf("Children of seat: %s (%s, seat id: %d)\n", efl_name_get(seat), _device_type_to_string(efl_input_device_type_get(seat)), efl_input_device_seat_id_get(seat)); it = efl_input_device_children_iterate(seat); EINA_ITERATOR_FOREACH(it, child) { - printf(" - Sub device: %s (%s, seat id: %d)\n", efl_input_device_name_get(child), + printf(" - Sub device: %s (%s, seat id: %d)\n", efl_name_get(child), _device_type_to_string(efl_input_device_type_get(child)), efl_input_device_seat_id_get(seat)); } @@ -135,10 +135,10 @@ _device_added(void *data, const Efl_Event *event) if (!seat) { fprintf(stderr, "Could not fetch the seat from pointer '%s'\n", - efl_input_device_name_get(pointer)); + efl_name_get(pointer)); return; } - printf("Setting cursor image at seat '%s'\n", efl_input_device_name_get(seat)); + printf("Setting cursor image at seat '%s'\n", efl_name_get(seat)); _cursor_set(data, pointer); _seat_children_print(seat); } diff --git a/src/examples/ecore/ecore_evas_vnc_example.c b/src/examples/ecore/ecore_evas_vnc_example.c index 69944bd5b5..b8489c9b48 100644 --- a/src/examples/ecore/ecore_evas_vnc_example.c +++ b/src/examples/ecore/ecore_evas_vnc_example.c @@ -81,7 +81,7 @@ _keyboard_event(void *data EINA_UNUSED, int type, void *event) seat = efl_input_device_seat_get(e->dev); printf("The keyboard on seat '%s' %s the key '%s'\n", seat ? - efl_input_device_name_get(seat) : "default", + efl_name_get(seat) : "default", type == ECORE_EVENT_KEY_DOWN ? "pressed" : "released", e->keyname); @@ -98,7 +98,7 @@ _mouse_move(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) seat = efl_input_device_seat_get(e->dev); printf("The mouse on seat '%s' is at X: %d Y:%d\n", - seat ? efl_input_device_name_get(seat) : "default", e->x, e->y); + seat ? efl_name_get(seat) : "default", e->x, e->y); return ECORE_CALLBACK_PASS_ON; } @@ -112,7 +112,7 @@ _mouse_button(void *data EINA_UNUSED, int type, void *event) seat = efl_input_device_seat_get(e->dev); printf("The mouse on seat '%s' %s the following button '%d'\n", - seat ? efl_input_device_name_get(seat) : "default", + seat ? efl_name_get(seat) : "default", type == ECORE_EVENT_MOUSE_BUTTON_DOWN ? "pressed" : "released", e->buttons); return ECORE_CALLBACK_PASS_ON; @@ -128,7 +128,7 @@ _mouse_wheel(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) seat = efl_input_device_seat_get(e->dev); printf("The mouse on seat '%s' moved the wheel '%s'\n", - seat ? efl_input_device_name_get(seat) : "default", + seat ? efl_name_get(seat) : "default", e->z < 0 ? "up" : "down"); return ECORE_CALLBACK_PASS_ON; } @@ -165,14 +165,14 @@ _seat_children_print(Efl_Input_Device *seat) Efl_Input_Device *child; Eina_Iterator *it; - printf("Children of seat: %s (%s, seat id: %d)\n", efl_input_device_name_get(seat), + printf("Children of seat: %s (%s, seat id: %d)\n", efl_name_get(seat), _device_type_to_string(efl_input_device_type_get(seat)), efl_input_device_seat_id_get(seat)); it = efl_input_device_children_iterate(seat); EINA_ITERATOR_FOREACH(it, child) { - printf(" - Sub device: %s (%s, seat id: %d)\n", efl_input_device_name_get(child), + printf(" - Sub device: %s (%s, seat id: %d)\n", efl_name_get(child), _device_type_to_string(efl_input_device_type_get(child)), efl_input_device_seat_id_get(seat)); } @@ -185,9 +185,9 @@ _dev_added_or_removed(void *data EINA_UNUSED, const Efl_Event *event) Efl_Input_Device *dev = event->info; printf("The device '%s' - class: '%s' - description: '%s' was '%s'\n", - efl_input_device_name_get(dev), + efl_name_get(dev), _device_type_to_string(efl_input_device_type_get(dev)), - efl_input_device_description_get(dev), + efl_comment_get(dev), event->desc == EFL_CANVAS_EVENT_DEVICE_ADDED ? "added" : "removed"); if (efl_input_device_type_get(dev) == EFL_INPUT_DEVICE_CLASS_SEAT) diff --git a/src/examples/ecore/ecore_evas_wayland_multiseat_example.c b/src/examples/ecore/ecore_evas_wayland_multiseat_example.c index db73889cbd..1ca70e12eb 100644 --- a/src/examples/ecore/ecore_evas_wayland_multiseat_example.c +++ b/src/examples/ecore/ecore_evas_wayland_multiseat_example.c @@ -19,7 +19,7 @@ _keyboard_event(void *data EINA_UNUSED, int type, void *event) seat = efl_input_device_seat_get(e->dev); printf("The keyboard on seat '%s' %s the key '%s'\n", seat ? - efl_input_device_name_get(seat) : "unknown", + efl_name_get(seat) : "unknown", type == ECORE_EVENT_KEY_DOWN ? "pressed" : "released", e->keyname); @@ -36,7 +36,7 @@ _mouse_move(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) seat = efl_input_device_seat_get(e->dev); printf("The mouse on seat '%s' is at X: %d Y:%d\n", - seat ? efl_input_device_name_get(seat) : "unknown", e->x, e->y); + seat ? efl_name_get(seat) : "unknown", e->x, e->y); return ECORE_CALLBACK_PASS_ON; } @@ -50,7 +50,7 @@ _mouse_button(void *data EINA_UNUSED, int type, void *event) seat = efl_input_device_seat_get(e->dev); printf("The mouse on seat '%s' %s the following button '%d'\n", - seat ? efl_input_device_name_get(seat) : "unknown", + seat ? efl_name_get(seat) : "unknown", type == ECORE_EVENT_MOUSE_BUTTON_DOWN ? "pressed" : "released", e->buttons); return ECORE_CALLBACK_PASS_ON; @@ -66,7 +66,7 @@ _mouse_wheel(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) seat = efl_input_device_seat_get(e->dev); printf("The mouse on seat '%s' moved the wheel '%s'\n", - seat ? efl_input_device_name_get(seat) : "unknown", + seat ? efl_name_get(seat) : "unknown", e->z < 0 ? "up" : "down"); return ECORE_CALLBACK_PASS_ON; } @@ -103,9 +103,9 @@ _dev_added_or_removed(void *data, const Efl_Event *event) Efl_Input_Device *dev = event->info; printf("The device %p '%s' - class: '%s' - desc: '%s' was '%s' on ee %p\n", - dev, efl_input_device_name_get(dev), + dev, efl_name_get(dev), _device_type_to_string(efl_input_device_type_get(dev)), - efl_input_device_description_get(dev), + efl_comment_get(dev), event->desc == EFL_CANVAS_EVENT_DEVICE_ADDED ? "added" : "removed", data); } @@ -116,7 +116,7 @@ _dev_changed(void *data, const Efl_Event *event) Efl_Input_Device *dev = event->info; printf("The device %p '%s' - class: '%s' was changed on ee %p\n", - dev, efl_input_device_name_get(dev), + dev, efl_name_get(dev), _device_type_to_string(efl_input_device_type_get(dev)), data); } diff --git a/src/examples/edje/edje-focus.c b/src/examples/edje/edje-focus.c index 01e9e2eeb6..5d9b63371c 100644 --- a/src/examples/edje/edje-focus.c +++ b/src/examples/edje/edje-focus.c @@ -66,7 +66,7 @@ _focus_obj_in_cb(void *data EINA_UNUSED, const Efl_Event *event) /* it always will print the default seat name, since FOCUS_OBJECT isn't setting a specific seat */ printf("Focus set to object %s (seat %s)\n", evas_object_name_get(rect), - efl_input_device_name_get(efl_input_device_get(ev))); + efl_name_get(efl_input_device_get(ev))); } static void @@ -75,7 +75,7 @@ _focus_obj_out_cb(void *data EINA_UNUSED, const Efl_Event *event) Efl_Input_Focus *ev = event->info; Evas_Object *rect = event->object; printf("Focus unset to object %s (seat %s)\n", evas_object_name_get(rect), - efl_input_device_name_get(efl_input_device_get(ev))); + efl_name_get(efl_input_device_get(ev))); } int diff --git a/src/examples/edje/edje-multiseat-custom-names.c b/src/examples/edje/edje-multiseat-custom-names.c index 7182d0c1ea..c74f28f299 100644 --- a/src/examples/edje/edje-multiseat-custom-names.c +++ b/src/examples/edje/edje-multiseat-custom-names.c @@ -52,13 +52,13 @@ _device_rename(Efl_Input_Device *dev) { if (!default_seat) { default_seat = dev; - efl_input_device_name_set(dev, "default"); + efl_name_set(dev, "default"); return; } if (!secondary_seat) { secondary_seat = dev; - efl_input_device_name_set(dev, "secondary"); + efl_name_set(dev, "secondary"); } } @@ -78,9 +78,9 @@ _device_changed(void *data EINA_UNUSED, const Efl_Event *event) Efl_Input_Device *dev = event->info; if (dev == default_seat) - efl_input_device_name_set(dev, "default"); + efl_name_set(dev, "default"); else if (dev == secondary_seat) - efl_input_device_name_set(dev, "secondary"); + efl_name_set(dev, "secondary"); } int diff --git a/src/examples/edje/edje-multiseat.c b/src/examples/edje/edje-multiseat.c index 3387fb11cc..4ab499c7c4 100644 --- a/src/examples/edje/edje-multiseat.c +++ b/src/examples/edje/edje-multiseat.c @@ -72,7 +72,7 @@ _on_rect_focus_in(void *data, const Efl_Event *event) name = edje_obj_seat_name_get(edje_obj, seat); printf("Seat %s (%s) focused the rect object\n", - efl_input_device_name_get(seat), name); + efl_name_get(seat), name); if (!strcmp(name, "seat1")) evas_object_color_set(rect, 200, 0, 0, 255); @@ -97,7 +97,7 @@ _on_rect_focus_out(void *data, const Efl_Event *event) name = edje_obj_seat_name_get(edje_obj, seat); printf("Seat %s (%s) unfocused the rect object\n", - efl_input_device_name_get(seat), name); + efl_name_get(seat), name); evas_object_color_set(rect, 200, 200, 200, 255); efl_canvas_object_seat_focus_add(edje_obj, seat); @@ -112,7 +112,7 @@ _on_key_down(void *data, Evas *e EINA_UNUSED, Evas_Object *o, void *event_info) Evas *evas = data; seat = efl_input_device_seat_get(ev->dev); - printf("Seat %s (%s) pressed key %s\n", efl_input_device_name_get(seat), + printf("Seat %s (%s) pressed key %s\n", efl_name_get(seat), edje_obj_seat_name_get(o, seat), ev->key); mods = evas_key_modifier_get(evas); @@ -141,7 +141,7 @@ _on_drag_started(void *data EINA_UNUSED, Evas_Object *o, const char *emission, c seat_name_str = emission + strlen("drag,start,"); seat_name = eina_stringshare_add(seat_name_str); seat = edje_obj_seat_get(o, seat_name); - printf("Seat %s (%s) started drag %s\n", efl_input_device_name_get(seat), + printf("Seat %s (%s) started drag %s\n", efl_name_get(seat), seat_name, source); eina_stringshare_del(seat_name); } diff --git a/src/examples/evas/evas-event-filter.c b/src/examples/evas/evas-event-filter.c index 5f46e95076..090a2c17c8 100644 --- a/src/examples/evas/evas-event-filter.c +++ b/src/examples/evas/evas-event-filter.c @@ -70,7 +70,7 @@ _allowed_seat_get(Evas_Object *filtered_obj, { printf("The '%s' shall only receive events from seat '%s'\n", evas_object_name_get(filtered_obj), - efl_input_device_name_get(seat)); + efl_name_get(seat)); allowed_seat_changed = EINA_TRUE; *allowed_seat = seat; efl_input_seat_event_filter_set(filtered_obj, seat, EINA_TRUE); @@ -78,7 +78,7 @@ _allowed_seat_get(Evas_Object *filtered_obj, { fprintf(stderr, "ERROR: The '%s' could not be focused by the seat '%s'\n", evas_object_name_get(filtered_obj), - efl_input_device_name_get(seat)); + efl_name_get(seat)); return EINA_FALSE; } } @@ -88,7 +88,7 @@ _allowed_seat_get(Evas_Object *filtered_obj, { fprintf(stderr, "ERROR: The '%s' should not be focused by the seat '%s'\n", evas_object_name_get(filtered_obj), - efl_input_device_name_get(seat)); + efl_name_get(seat)); return EINA_FALSE; } } @@ -138,13 +138,13 @@ _obj_events_cb(void *data, const Efl_Event *event) fprintf(stderr, "ERROR: The object '%s' should not receive the event" "'%s' from the seat '%s'\n", evas_object_name_get(event->object), event_name, - efl_input_device_name_get(seat)); + efl_name_get(seat)); ecore_main_loop_quit(); } else printf("The object '%s' recevied a '%s' event from seat '%s'\n", evas_object_name_get(event->object), event_name, - efl_input_device_name_get(seat)); + efl_name_get(seat)); } static void diff --git a/src/examples/evas/evas-multiseat-events.c b/src/examples/evas/evas-multiseat-events.c index 1a206b3db9..422c4690b4 100644 --- a/src/examples/evas/evas-multiseat-events.c +++ b/src/examples/evas/evas-multiseat-events.c @@ -40,7 +40,7 @@ _canvas_focus_in_cb(void *data EINA_UNUSED, const Efl_Event *event) printf("Object %s was focused by seat %s\n", evas_object_name_get(focused), - efl_input_device_name_get(seat)); + efl_name_get(seat)); } static void @@ -55,7 +55,7 @@ _hold_cb(void *data EINA_UNUSED, const Efl_Event *event) printf("Hold %s at object %s from seat %s\n", efl_input_hold_get(ev) ? "on" : "off", evas_object_name_get(event->object), - efl_input_device_name_get(seat)); + efl_name_get(seat)); } static void @@ -70,7 +70,7 @@ _focus_cb(void *data EINA_UNUSED, const Efl_Event *event) printf("Focus %s at object %s from seat %s\n", event->desc == EFL_EVENT_FOCUS_IN ? "in" : "out", evas_object_name_get(event->object), - efl_input_device_name_get(seat)); + efl_name_get(seat)); } static void @@ -85,7 +85,7 @@ _pointer_in_out_cb(void *data EINA_UNUSED, const Efl_Event *event) printf("Pointer %s at object %s from seat %s\n", event->desc == EFL_EVENT_POINTER_IN ? "in" : "out", evas_object_name_get(event->object), - efl_input_device_name_get(seat)); + efl_name_get(seat)); } static void @@ -115,7 +115,7 @@ _pointer_down_cb(void *data EINA_UNUSED, const Efl_Event *event) printf("%s at object %s from seat %s\n", buf, evas_object_name_get(event->object), - efl_input_device_name_get(seat)); + efl_name_get(seat)); } static void @@ -130,7 +130,7 @@ _pointer_up_cb(void *data EINA_UNUSED, const Efl_Event *event) printf("Pointer button %i up at object %s from seat %s\n", efl_input_pointer_button_get(ev), evas_object_name_get(event->object), - efl_input_device_name_get(seat)); + efl_name_get(seat)); } static void @@ -146,7 +146,7 @@ _pointer_move_cb(void *data EINA_UNUSED, const Efl_Event *event) efl_input_pointer_value_get(ev, EFL_INPUT_VALUE_X), efl_input_pointer_value_get(ev, EFL_INPUT_VALUE_Y), evas_object_name_get(event->object), - efl_input_device_name_get(seat)); + efl_name_get(seat)); } static void @@ -162,7 +162,7 @@ _pointer_wheel_cb(void *data EINA_UNUSED, const Efl_Event *event) efl_input_pointer_wheel_direction_get(ev), efl_input_pointer_wheel_delta_get(ev), evas_object_name_get(event->object), - efl_input_device_name_get(seat)); + efl_name_get(seat)); } static void @@ -179,11 +179,11 @@ _key_down_cb(void *data EINA_UNUSED, const Efl_Event *event) printf("Key down: '%s' on object %s from seat %s\n", efl_input_key_name_get(ev), evas_object_name_get(event->object), - efl_input_device_name_get(seat)); + efl_name_get(seat)); if (evas_seat_key_modifier_is_set(mods, "Control", seat)) printf("Ctrl is pressed by seat %s\n", - efl_input_device_name_get(seat)); + efl_name_get(seat)); } static void @@ -198,7 +198,7 @@ _key_up_cb(void *data EINA_UNUSED, const Efl_Event *event) printf("Key up: '%s' on object %s from seat %s\n", efl_input_key_name_get(ev), evas_object_name_get(event->object), - efl_input_device_name_get(seat)); + efl_name_get(seat)); } static void @@ -210,8 +210,8 @@ _dev_added_or_removed(void *data EINA_UNUSED, const Efl_Event *event) return; printf("The seat '%s' - description: '%s' was '%s'\n", - efl_input_device_name_get(dev), - efl_input_device_description_get(dev), + efl_name_get(dev), + efl_comment_get(dev), event->desc == EFL_CANVAS_EVENT_DEVICE_ADDED ? "added" : "removed"); } @@ -283,8 +283,8 @@ main(void) { if (efl_input_device_type_get(dev) == EFL_INPUT_DEVICE_CLASS_SEAT) printf("The seat '%s' - description: '%s' was 'added'\n", - efl_input_device_name_get(dev), - efl_input_device_description_get(dev)); + efl_name_get(dev), + efl_comment_get(dev)); } ecore_evas_show(ee); diff --git a/src/lib/edje/edje_entry.c b/src/lib/edje/edje_entry.c index 7a28d25288..113a75e897 100644 --- a/src/lib/edje/edje_entry.c +++ b/src/lib/edje/edje_entry.c @@ -172,7 +172,7 @@ _edje_focus_in(Edje *ed, Efl_Input_Device *seat) _edje_seat_emit(ed, seat, "focus,in", ""); #ifdef HAVE_ECORE_IMF - rp = _edje_focused_part_get(ed, efl_input_device_name_get(seat)); + rp = _edje_focused_part_get(ed, efl_name_get(seat)); if (!rp) return; if ((rp->type != EDJE_RP_TYPE_TEXT) || (!rp->typedata.text)) return; @@ -207,7 +207,7 @@ _edje_focus_out(Edje *ed, Efl_Input_Device *seat) _edje_seat_emit(ed, seat, "focus,out", ""); #ifdef HAVE_ECORE_IMF - rp = _edje_focused_part_get(ed, efl_input_device_name_get(seat)); + rp = _edje_focused_part_get(ed, efl_name_get(seat)); if (!rp) return; if ((rp->type != EDJE_RP_TYPE_TEXT) || (!rp->typedata.text)) return; diff --git a/src/lib/edje/edje_load.c b/src/lib/edje/edje_load.c index 5fc34a84c7..26ce5912e5 100644 --- a/src/lib/edje/edje_load.c +++ b/src/lib/edje/edje_load.c @@ -593,7 +593,7 @@ _edje_device_add(Edje *ed, Efl_Input_Device *dev) Eina_List *l; if (ed->collection && ed->collection->use_custom_seat_names) - name = eina_stringshare_add(efl_input_device_name_get(dev)); + name = eina_stringshare_add(efl_name_get(dev)); else { ed->seats_count++; @@ -619,7 +619,7 @@ _edje_device_add(Edje *ed, Efl_Input_Device *dev) seat->device = dev; snprintf(sig, sizeof(sig), "seat,added,%s,%s", seat->name, - efl_input_device_name_get(dev)); + efl_name_get(dev)); _edje_emit(ed, sig, ""); _edje_seat_event_filter_apply(ed, seat); @@ -692,7 +692,7 @@ _edje_device_changed_cb(void *data, const Efl_Event *event) if (!seat) return; - name = efl_input_device_name_get(dev); + name = efl_name_get(dev); if (!name) return; diff --git a/src/lib/efl/interfaces/efl_common_internal.h b/src/lib/efl/interfaces/efl_common_internal.h index 0270782fd8..77d0c3b5c7 100644 --- a/src/lib/efl/interfaces/efl_common_internal.h +++ b/src/lib/efl/interfaces/efl_common_internal.h @@ -90,11 +90,8 @@ struct _Efl_Input_Device_Data { Eo *eo; Eo *evas; /* Evas */ - Efl_Input_Device *parent; /* no ref */ Efl_Input_Device *source; /* ref */ - Eina_List *children; /* ref */ - Eina_Stringshare *name; - Eina_Stringshare *desc; + Eina_List *children; /* ref'ed by efl_parent, not by this list */ unsigned int id; Efl_Input_Device_Class klass; Efl_Input_Device_Sub_Class subclass; diff --git a/src/lib/efl/interfaces/efl_input_device.c b/src/lib/efl/interfaces/efl_input_device.c index faee0dd6e3..51a8aa1e42 100644 --- a/src/lib/efl/interfaces/efl_input_device.c +++ b/src/lib/efl/interfaces/efl_input_device.c @@ -7,6 +7,8 @@ #define EFL_INTERNAL_UNSTABLE #include "efl_common_internal.h" +#define MY_CLASS EFL_INPUT_DEVICE_CLASS + /* Efl Input Device = Evas Device */ typedef struct _Child_Device_Iterator Child_Device_Iterator; @@ -38,7 +40,7 @@ _seat_pointers_update(Efl_Input_Device_Data *seat, Efl_Input_Device_Data *dev) EOLIAN static Efl_Object * _efl_input_device_efl_object_constructor(Eo *obj, Efl_Input_Device_Data *pd) { - obj = efl_constructor(efl_super(obj, EFL_INPUT_DEVICE_CLASS)); + obj = efl_constructor(efl_super(obj, MY_CLASS)); pd->eo = obj; return obj; } @@ -46,34 +48,69 @@ _efl_input_device_efl_object_constructor(Eo *obj, Efl_Input_Device_Data *pd) EOLIAN static void _efl_input_device_efl_object_destructor(Eo *obj, Efl_Input_Device_Data *pd) { - Eo *eo_child; + pd->children = eina_list_free(pd->children); + if (pd->klass != EFL_INPUT_DEVICE_CLASS_SEAT) + { + Efl_Input_Device_Data *p; + Eo *seat; - eina_stringshare_del(pd->name); - eina_stringshare_del(pd->desc); - EINA_LIST_FREE(pd->children, eo_child) - { - Efl_Input_Device_Data *child = efl_data_scope_get(eo_child, EFL_INPUT_DEVICE_CLASS); - child->parent = NULL; - } - if (pd->parent) - { - Efl_Input_Device_Data *p = efl_data_scope_get(pd->parent, EFL_INPUT_DEVICE_CLASS); - p->children = eina_list_remove(p->children, obj); - if (_is_pointer(pd)) - p->pointer_count--; + seat = efl_input_device_seat_get(obj); + p = efl_data_scope_get(seat, MY_CLASS); + if (p) p->children = eina_list_remove(p->children, obj); } efl_unref(pd->source); - return efl_destructor(efl_super(obj, EFL_INPUT_DEVICE_CLASS)); + return efl_destructor(efl_super(obj, MY_CLASS)); } EOLIAN static void -_efl_input_device_device_type_set(Eo *obj EINA_UNUSED, Efl_Input_Device_Data *pd, Efl_Input_Device_Class klass) +_efl_input_device_efl_object_parent_set(Eo *obj, Efl_Input_Device_Data *pd EINA_UNUSED, Eo *parent) +{ + Efl_Input_Device_Data *p; + + if (parent) + { + if (efl_isa(parent, MY_CLASS)) + { + p = efl_data_scope_get(parent, MY_CLASS); + EINA_SAFETY_ON_FALSE_RETURN(p->klass == EFL_INPUT_DEVICE_CLASS_SEAT); + if (!eina_list_data_find(p->children, obj)) + { + p->children = eina_list_append(p->children, obj); + _seat_pointers_update(p, pd); + } + } + else if(!efl_isa(parent, EFL_CANVAS_INTERFACE)) + { + EINA_SAFETY_ERROR("The parent of a device must be a seat or the canvas"); + return; + } + } + else + { + Eo *old_parent = efl_parent_get(obj); + if (old_parent && efl_isa(old_parent, MY_CLASS)) + { + p = efl_data_scope_get(old_parent, MY_CLASS); + p->children = eina_list_remove(p->children, obj); + if (_is_pointer(pd)) + p->pointer_count--; + } + } + + efl_parent_set(efl_super(obj, MY_CLASS), parent); +} + +EOLIAN static void +_efl_input_device_device_type_set(Eo *obj, Efl_Input_Device_Data *pd, Efl_Input_Device_Class klass) { EINA_SAFETY_ON_TRUE_RETURN(pd->klass); pd->klass = klass; if (klass != EFL_INPUT_DEVICE_CLASS_SEAT) - _seat_pointers_update(efl_data_scope_get(pd->parent, EFL_INPUT_DEVICE_CLASS), pd); + { + Efl_Input_Device_Data *seat = efl_data_scope_get(efl_input_device_seat_get(obj), MY_CLASS); + _seat_pointers_update(seat, pd); + } } EOLIAN static Efl_Input_Device_Class @@ -108,30 +145,6 @@ _efl_input_device_source_get(Eo *obj EINA_UNUSED, Efl_Input_Device_Data *pd) return pd->source; } -EOLIAN static void -_efl_input_device_name_set(Eo *obj EINA_UNUSED, Efl_Input_Device_Data *pd, const char *name) -{ - eina_stringshare_replace(&pd->name, name); -} - -EOLIAN static const char * -_efl_input_device_name_get(Eo *obj EINA_UNUSED, Efl_Input_Device_Data *pd) -{ - return pd->name; -} - -EOLIAN static void -_efl_input_device_description_set(Eo *obj EINA_UNUSED, Efl_Input_Device_Data *pd, const char *desc) -{ - eina_stringshare_replace(&pd->desc, desc); -} - -EOLIAN static const char * -_efl_input_device_description_get(Eo *obj EINA_UNUSED, Efl_Input_Device_Data *pd) -{ - return pd->desc; -} - EOLIAN static void _efl_input_device_seat_id_set(Eo *obj EINA_UNUSED, Efl_Input_Device_Data *pd, unsigned int id) { @@ -148,46 +161,20 @@ _efl_input_device_seat_id_get(Eo *obj, Efl_Input_Device_Data *pd) } EOLIAN static Efl_Input_Device * -_efl_input_device_seat_get(Eo *obj EINA_UNUSED, Efl_Input_Device_Data *pd) +_efl_input_device_seat_get(Eo *obj, Efl_Input_Device_Data *pd) { - while (1) + for (; obj; obj = efl_parent_get(obj)) { if (pd->klass == EFL_INPUT_DEVICE_CLASS_SEAT) return pd->eo; - if (!pd->parent) - break; - - pd = efl_data_scope_get(pd->parent, EFL_INPUT_DEVICE_CLASS); + if (!efl_isa(obj, MY_CLASS)) break; + pd = efl_data_scope_get(obj, MY_CLASS); } return NULL; } -EOLIAN static Efl_Input_Device * -_efl_input_device_parent_get(Eo *obj EINA_UNUSED, Efl_Input_Device_Data *pd) -{ - return pd->parent; -} - -EOLIAN static void -_efl_input_device_parent_set(Eo *obj, Efl_Input_Device_Data *pd, Efl_Input_Device *parent) -{ - if (pd->parent == parent) return; - if (pd->parent) - { - Efl_Input_Device_Data *p = efl_data_scope_get(pd->parent, EFL_INPUT_DEVICE_CLASS); - p->children = eina_list_remove(p->children, obj); - } - pd->parent = parent; - if (parent) - { - Efl_Input_Device_Data *p = efl_data_scope_get(parent, EFL_INPUT_DEVICE_CLASS); - p->children = eina_list_append(p->children, obj); - _seat_pointers_update(p, pd); - } -} - static Eina_Bool _child_device_iterator_next(Child_Device_Iterator *it, void **data) { diff --git a/src/lib/efl/interfaces/efl_input_device.eo b/src/lib/efl/interfaces/efl_input_device.eo index 6528db76ce..1338d34f3b 100644 --- a/src/lib/efl/interfaces/efl_input_device.eo +++ b/src/lib/efl/interfaces/efl_input_device.eo @@ -67,24 +67,6 @@ class Efl.Input.Device (Efl.Object) src: Efl.Input.Device; [[Input device]] } } - @property name { - [[device name property]] - values { - name: string; [[Input device name]] - } - } - @property description { - [[device description property]] - values { - desc: string; [[Input device description]] - } - } - @property parent { - [[Device parent property]] - values { - parent: Efl.Input.Device; [[Parent input device]] - } - } @property seat { [[Get the @Efl.Input.Device that represents a seat. @@ -113,7 +95,7 @@ class Efl.Input.Device (Efl.Object) children_iterate { [[Lists the children attached to this device. - This is mostly meaningful with seat devices, as they are groups of + This is only meaningful with seat devices, as they are groups of real input devices. @since 1.20 @@ -135,5 +117,6 @@ class Efl.Input.Device (Efl.Object) implements { Efl.Object.constructor; Efl.Object.destructor; + Efl.Object.parent { set; } } } diff --git a/src/lib/evas/canvas/evas_device.c b/src/lib/evas/canvas/evas_device.c index e474540239..fafd6a5d5b 100644 --- a/src/lib/evas/canvas/evas_device.c +++ b/src/lib/evas/canvas/evas_device.c @@ -45,7 +45,7 @@ _new_default_device_find(Evas_Public_Data *e, Evas_Device *old_dev) if (e->cleanup) return NULL; old_class = efl_input_device_type_get(old_dev); - old_parent = efl_input_device_parent_get(old_dev); + old_parent = efl_parent_get(old_dev); def = NULL; EINA_LIST_FOREACH(e->devices, l, dev) @@ -55,7 +55,7 @@ _new_default_device_find(Evas_Public_Data *e, Evas_Device *old_dev) def = dev; //Prefer devices with the same parent. - if (efl_input_device_parent_get(dev) == old_parent) + if (efl_parent_get(dev) == old_parent) break; } @@ -112,7 +112,7 @@ evas_device_get(Evas *eo_e, const char *name) EINA_LIST_FOREACH(e->devices, l, dev) { - dev_name = efl_input_device_name_get(dev); + dev_name = efl_name_get(dev); if (eina_streq(dev_name, name)) return dev; @@ -163,13 +163,12 @@ 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, eo_e, - efl_input_device_name_set(efl_added, name), - efl_input_device_description_set(efl_added, desc), + 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_subtype_set(efl_added, sub_clas), - efl_input_device_source_set(efl_added, emulation_dev), - efl_input_device_parent_set(efl_added, parent_dev)); + efl_input_device_source_set(efl_added, emulation_dev)); d = efl_data_scope_get(dev, EFL_INPUT_DEVICE_CLASS); d->evas = eo_e; @@ -281,14 +280,14 @@ evas_device_name_set(Evas_Device *dev, const char *name) Efl_Input_Device_Data *d = efl_data_scope_get(dev, EFL_INPUT_DEVICE_CLASS); - efl_input_device_name_set(dev, name); + efl_name_set(dev, name); evas_event_callback_call(d->evas, EVAS_CALLBACK_DEVICE_CHANGED, dev); } EAPI const char * evas_device_name_get(const Evas_Device *dev) { - return efl_input_device_name_get(dev); + return efl_name_get(dev); } EAPI void @@ -296,7 +295,7 @@ evas_device_description_set(Evas_Device *dev, const char *desc) { SAFETY_CHECK(dev, EFL_INPUT_DEVICE_CLASS); - efl_input_device_description_set(dev, desc); + efl_comment_set(dev, desc); Efl_Input_Device_Data *d = efl_data_scope_get(dev, EFL_INPUT_DEVICE_CLASS); evas_event_callback_call(d->evas, EVAS_CALLBACK_DEVICE_CHANGED, dev); @@ -305,12 +304,16 @@ evas_device_description_set(Evas_Device *dev, const char *desc) EAPI const char * evas_device_description_get(const Evas_Device *dev) { - return efl_input_device_description_get(dev); + return efl_comment_get(dev); } EAPI void evas_device_parent_set(Evas_Device *dev, Evas_Device *parent) { + // Note: This function should be deprecated. parent_set doesn't make sense + // unless the parent is a seat device. Parent shouldn't be changed after + // creation. + SAFETY_CHECK(dev, EFL_INPUT_DEVICE_CLASS); Efl_Input_Device_Data *d = efl_data_scope_get(dev, EFL_INPUT_DEVICE_CLASS); @@ -318,15 +321,24 @@ evas_device_parent_set(Evas_Device *dev, Evas_Device *parent) { SAFETY_CHECK(parent, EFL_INPUT_DEVICE_CLASS); } + else if (efl_parent_get(dev)) + { + efl_ref(dev); + } - efl_input_device_parent_set(dev, parent); + efl_parent_set(dev, parent); evas_event_callback_call(d->evas, EVAS_CALLBACK_DEVICE_CHANGED, dev); } EAPI const Evas_Device * evas_device_parent_get(const Evas_Device *dev) { - return efl_input_device_parent_get(dev); + Eo *parent = efl_parent_get(dev); + + if (!efl_isa(parent, EFL_INPUT_DEVICE_CLASS)) + return NULL; + + return parent; } EAPI void diff --git a/src/lib/evas/canvas/evas_events.c b/src/lib/evas/canvas/evas_events.c index d4b728d307..a97129d1b4 100644 --- a/src/lib/evas/canvas/evas_events.c +++ b/src/lib/evas/canvas/evas_events.c @@ -3138,7 +3138,7 @@ _key_event_dispatch(Evas_Public_Data *e, void *event_info, device = e->default_seat; else { - const char *name = efl_input_device_name_get(device); + const char *name = efl_name_get(device); device = efl_input_device_seat_get(device); if (!device)