jpeg pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=81eb7a3f0b1d5269a1dd4416836aff72e2db823d
commit 81eb7a3f0b1d5269a1dd4416836aff72e2db823d Author: Jean-Philippe Andre <[email protected]> Date: Wed May 24 15:31:45 2017 +0900 examples: Test API efl_input_device_children_iterate While the API seems to work fine, I am not 100% sure the device names are properly assigned. Run ecore_evas_cursor_example or ecore_evas_vnc_example and then connect to the VNC server locally or remotely. --- src/examples/ecore/ecore_evas_cursor_example.c | 64 ++++++++++++++++++++++++-- src/examples/ecore/ecore_evas_vnc_example.c | 24 ++++++++++ 2 files changed, 83 insertions(+), 5 deletions(-) diff --git a/src/examples/ecore/ecore_evas_cursor_example.c b/src/examples/ecore/ecore_evas_cursor_example.c index e5e83c5..59ba1df 100644 --- a/src/examples/ecore/ecore_evas_cursor_example.c +++ b/src/examples/ecore/ecore_evas_cursor_example.c @@ -77,6 +77,52 @@ _cursor_set(Ecore_Evas *ee, Efl_Input_Device *pointer) ecore_evas_object_cursor_device_set(ee, pointer, obj, 0, 10, 10); } +static const char * +_device_type_to_string(Efl_Input_Device_Class klass) +{ + switch (klass) + { + case EFL_INPUT_DEVICE_CLASS_NONE: + return "None"; + case EFL_INPUT_DEVICE_CLASS_SEAT: + return "Seat"; + case EFL_INPUT_DEVICE_CLASS_KEYBOARD: + return "Keyboard"; + case EFL_INPUT_DEVICE_CLASS_MOUSE: + return "Mouse"; + case EFL_INPUT_DEVICE_CLASS_TOUCH: + return "Touch"; + case EFL_INPUT_DEVICE_CLASS_PEN: + return "Pen"; + case EFL_INPUT_DEVICE_CLASS_WAND: + return "Wand"; + case EFL_INPUT_DEVICE_CLASS_GAMEPAD: + return "Gamepad"; + default: + return "Unknown"; + } +} + +static void +_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), + _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), + _device_type_to_string(efl_input_device_type_get(child)), + efl_input_device_seat_id_get(seat)); + } + eina_iterator_free(it); +} + static void _device_added(void *data, const Efl_Event *event) { @@ -94,13 +140,14 @@ _device_added(void *data, const Efl_Event *event) } printf("Setting cursor image at seat '%s'\n", efl_input_device_name_get(seat)); _cursor_set(data, pointer); + _seat_children_print(seat); } int main(int argc EINA_UNUSED, char *argv[] EINA_UNUSED) { const Eina_List *devs, *l; - Efl_Input_Device *pointer; + Efl_Input_Device *dev; Ecore_Evas *ee; Evas_Object *bg; Evas *e; @@ -140,11 +187,18 @@ main(int argc EINA_UNUSED, char *argv[] EINA_UNUSED) devs = evas_device_list(e, NULL); - EINA_LIST_FOREACH(devs, l, pointer) + EINA_LIST_FOREACH(devs, l, dev) { - if (efl_input_device_type_get(pointer) != EFL_INPUT_DEVICE_CLASS_MOUSE) - continue; - _cursor_set(ee, pointer); + switch (efl_input_device_type_get(dev)) + { + case EFL_INPUT_DEVICE_CLASS_SEAT: + _seat_children_print(dev); + break; + case EFL_INPUT_DEVICE_CLASS_MOUSE: + _cursor_set(ee, dev); + break; + default: break; + } } t = ecore_timer_add(TIMEOUT, _mouse_pos_print, ee); diff --git a/src/examples/ecore/ecore_evas_vnc_example.c b/src/examples/ecore/ecore_evas_vnc_example.c index 10e30e7..69944bd 100644 --- a/src/examples/ecore/ecore_evas_vnc_example.c +++ b/src/examples/ecore/ecore_evas_vnc_example.c @@ -160,6 +160,26 @@ _device_type_to_string(Efl_Input_Device_Class klass) } static void +_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), + _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), + _device_type_to_string(efl_input_device_type_get(child)), + efl_input_device_seat_id_get(seat)); + } + eina_iterator_free(it); +} + +static void _dev_added_or_removed(void *data EINA_UNUSED, const Efl_Event *event) { Efl_Input_Device *dev = event->info; @@ -169,6 +189,9 @@ _dev_added_or_removed(void *data EINA_UNUSED, const Efl_Event *event) _device_type_to_string(efl_input_device_type_get(dev)), efl_input_device_description_get(dev), event->desc == EFL_CANVAS_EVENT_DEVICE_ADDED ? "added" : "removed"); + + if (efl_input_device_type_get(dev) == EFL_INPUT_DEVICE_CLASS_SEAT) + _seat_children_print(dev); } int @@ -277,6 +300,7 @@ main(int argc, char *argv[]) mouse_wheel = ecore_event_handler_add(ECORE_EVENT_MOUSE_WHEEL, _mouse_wheel, NULL); + _seat_children_print(evas_canvas_default_device_get(evas, EFL_INPUT_DEVICE_CLASS_SEAT)); efl_event_callback_add(evas, EFL_CANVAS_EVENT_DEVICE_ADDED, _dev_added_or_removed, NULL); efl_event_callback_add(evas, EFL_CANVAS_EVENT_DEVICE_REMOVED, --
