bdilly pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=3bc27935887091b0c80c8c7935eee3b194b77c07

commit 3bc27935887091b0c80c8c7935eee3b194b77c07
Author: Bruno Dilly <[email protected]>
Date:   Fri Oct 7 15:57:04 2016 -0300

    examples/ecore: add example / test for wayland multiseat
---
 src/examples/ecore/.gitignore                      |   1 +
 src/examples/ecore/Makefile.am                     |   6 +
 .../ecore/ecore_evas_wayland_multiseat_example.c   | 242 +++++++++++++++++++++
 3 files changed, 249 insertions(+)

diff --git a/src/examples/ecore/.gitignore b/src/examples/ecore/.gitignore
index 18a9ea8..cf090e1 100644
--- a/src/examples/ecore/.gitignore
+++ b/src/examples/ecore/.gitignore
@@ -24,6 +24,7 @@
 /ecore_evas_extn_plug_example
 /ecore_evas_extn_socket_example
 /ecore_evas_object_example
+/ecore_evas_wayland_multiseat_example
 /ecore_evas_window_sizes_example
 /ecore_evas_vnc_example
 /ecore_event_example_01
diff --git a/src/examples/ecore/Makefile.am b/src/examples/ecore/Makefile.am
index fe23058..dde9e48 100644
--- a/src/examples/ecore/Makefile.am
+++ b/src/examples/ecore/Makefile.am
@@ -59,6 +59,7 @@ ecore_evas_extn_plug_example \
 ecore_evas_callbacks \
 ecore_evas_ews_example \
 ecore_evas_object_example \
+ecore_evas_wayland_multiseat_example \
 ecore_evas_window_sizes_example \
 ecore_evas_vnc_example \
 ecore_event_example_01 \
@@ -205,6 +206,10 @@ ecore_evas_ews_example_LDADD = $(ECORE_EVAS_COMMON_LDADD)
 ecore_evas_object_example_SOURCES = ecore_evas_object_example.c
 ecore_evas_object_example_LDADD = $(ECORE_EVAS_COMMON_LDADD)
 
+ecore_evas_wayland_multiseat_example_SOURCES = 
ecore_evas_wayland_multiseat_example.c
+ecore_evas_wayland_multiseat_example_LDADD = $(ECORE_EVAS_COMMON_LDADD) \
+$(top_builddir)/src/lib/ecore_input/libecore_input.la
+
 ecore_evas_window_sizes_example_SOURCES = ecore_evas_window_sizes_example.c
 ecore_evas_window_sizes_example_LDADD = $(ECORE_EVAS_COMMON_LDADD)
 
@@ -353,6 +358,7 @@ ecore_evas_extn_plug_example.c \
 ecore_evas_callbacks.c \
 ecore_evas_ews_example.c \
 ecore_evas_object_example.c \
+ecore_evas_wayland_multiseat_example.c \
 ecore_evas_window_sizes_example.c \
 ecore_evas_vnc_example.c \
 ecore_event_example_01.c \
diff --git a/src/examples/ecore/ecore_evas_wayland_multiseat_example.c 
b/src/examples/ecore/ecore_evas_wayland_multiseat_example.c
new file mode 100644
index 0000000..081a0fc
--- /dev/null
+++ b/src/examples/ecore/ecore_evas_wayland_multiseat_example.c
@@ -0,0 +1,242 @@
+#define EFL_EO_API_SUPPORT
+#define EFL_BETA_API_SUPPORT
+
+#include <Efl.h>
+#include <stdio.h>
+#include <Ecore.h>
+#include <Evas.h>
+#include <Eina.h>
+#include <Ecore_Evas.h>
+#include <Ecore_Input.h>
+
+static Efl_Input_Device *
+_get_seat(Efl_Input_Device *dev)
+{
+   if (!dev) return NULL;
+
+   while ((dev = efl_input_device_parent_get(dev)))
+     {
+        if (efl_input_device_type_get(dev) == EFL_INPUT_DEVICE_CLASS_SEAT)
+          return dev;
+     }
+   return NULL;
+}
+
+static Eina_Bool
+_keyboard_event(void *data EINA_UNUSED, int type, void *event)
+{
+   Ecore_Event_Key *e = event;
+   Efl_Input_Device *seat = NULL;
+
+   if (e->dev)
+     seat = _get_seat(e->dev);
+
+   printf("The keyboard on seat '%s' %s the key '%s'\n", seat ?
+          efl_input_device_name_get(seat) : "unknown",
+          type == ECORE_EVENT_KEY_DOWN ? "pressed" : "released",
+          e->keyname);
+
+   return ECORE_CALLBACK_PASS_ON;
+}
+
+static Eina_Bool
+_mouse_move(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
+{
+   Ecore_Event_Mouse_Move *e = event;
+   Efl_Input_Device *seat = NULL;
+
+   if (e->dev)
+     seat = _get_seat(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);
+   return ECORE_CALLBACK_PASS_ON;
+}
+
+static Eina_Bool
+_mouse_button(void *data EINA_UNUSED, int type, void *event)
+{
+   Ecore_Event_Mouse_Button *e = event;
+   Efl_Input_Device *seat = NULL;
+
+   if (e->dev)
+     seat = _get_seat(e->dev);
+
+   printf("The mouse on seat '%s' %s the following button '%d'\n",
+          seat ? efl_input_device_name_get(seat) : "unknown",
+          type == ECORE_EVENT_MOUSE_BUTTON_DOWN ? "pressed" : "released",
+          e->buttons);
+   return ECORE_CALLBACK_PASS_ON;
+}
+
+static Eina_Bool
+_mouse_wheel(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
+{
+   Ecore_Event_Mouse_Wheel *e = event;
+   Efl_Input_Device *seat = NULL;
+
+   if (e->dev)
+     seat = _get_seat(e->dev);
+
+   printf("The mouse on seat '%s' moved the wheel '%s'\n",
+          seat ? efl_input_device_name_get(seat) : "unknown",
+          e->z < 0 ? "up" : "down");
+   return ECORE_CALLBACK_PASS_ON;
+}
+
+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
+_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),
+          _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",
+          data);
+}
+
+static void
+_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),
+          _device_type_to_string(efl_input_device_type_get(dev)), data);
+}
+
+int
+main(int argc EINA_UNUSED, char *argv[] EINA_UNUSED)
+{
+   Ecore_Evas *ee1, *ee2;
+   Evas *evas1, *evas2;
+   Evas_Object *bg, *rect1, *rect2;
+   Ecore_Event_Handler *keydown_handler, *keyup_handler, *mouse_move,
+     *mouse_down, *mouse_up, *mouse_wheel;
+
+   ecore_evas_init();
+
+   ee1 = ecore_evas_new("wayland_shm", 0, 0, 800, 600, NULL);
+   if (!ee1)
+     ee1 = ecore_evas_new("wayland_egl", 0, 0, 800, 600, NULL);
+
+   if (!ee1)
+     {
+        fprintf(stderr, "Could not create the ecore evas\n");
+        return -1;
+     }
+
+   evas1 = ecore_evas_get(ee1);
+
+   bg = evas_object_rectangle_add(evas1);
+   evas_object_color_set(bg, 255, 255, 255, 255);
+   evas_object_move(bg, 0, 0);
+   evas_object_resize(bg, 800, 600);
+   evas_object_show(bg);
+
+   /* TODO play with focus */
+   rect1 = evas_object_rectangle_add(evas1);
+   evas_object_color_set(rect1, 0, 255, 0, 255);
+   evas_object_resize(rect1, 50, 50);
+   evas_object_move(rect1, (800 - 50) /2, (600 - 50)/2);
+   evas_object_show(rect1);
+
+   rect2 = evas_object_rectangle_add(evas1);
+   evas_object_color_set(rect2, 0, 0, 255, 255);
+   evas_object_resize(rect2, 50, 50);
+   evas_object_move(rect2, 50, 50);
+   evas_object_show(rect2);
+
+   ecore_evas_show(ee1);
+
+   ee2 = ecore_evas_new("wayland_shm", 0, 0, 300, 200, NULL);
+   if (!ee2)
+     ee2 = ecore_evas_new("wayland_egl", 0, 0, 300, 200, NULL);
+
+   if (!ee2)
+     {
+        fprintf(stderr, "Could not create the ecore evas\n");
+        return -1;
+     }
+
+   evas2 = ecore_evas_get(ee2);
+
+   bg = evas_object_rectangle_add(evas2);
+   evas_object_color_set(bg, 100, 100, 100, 255);
+   evas_object_move(bg, 0, 0);
+   evas_object_resize(bg, 300, 200);
+   evas_object_show(bg);
+
+   ecore_evas_show(ee2);
+
+   keydown_handler = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN,
+                                             _keyboard_event, NULL);
+   keyup_handler = ecore_event_handler_add(ECORE_EVENT_KEY_UP,
+                                           _keyboard_event, NULL);
+   mouse_move = ecore_event_handler_add(ECORE_EVENT_MOUSE_MOVE, _mouse_move,
+                                        NULL);
+   mouse_up = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_UP,
+                                      _mouse_button, NULL);
+   mouse_down = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN,
+                                        _mouse_button, NULL);
+   mouse_wheel = ecore_event_handler_add(ECORE_EVENT_MOUSE_WHEEL,
+                                        _mouse_wheel, NULL);
+
+   efl_event_callback_add(evas1, EFL_CANVAS_EVENT_DEVICE_ADDED,
+                          _dev_added_or_removed, ee1);
+   efl_event_callback_add(evas1, EFL_CANVAS_EVENT_DEVICE_REMOVED,
+                          _dev_added_or_removed, ee1);
+   efl_event_callback_add(evas1, EFL_CANVAS_EVENT_DEVICE_CHANGED,
+                          _dev_changed, ee1);
+
+   efl_event_callback_add(evas2, EFL_CANVAS_EVENT_DEVICE_ADDED,
+                          _dev_added_or_removed, ee2);
+   efl_event_callback_add(evas2, EFL_CANVAS_EVENT_DEVICE_REMOVED,
+                          _dev_added_or_removed, ee2);
+   efl_event_callback_add(evas2, EFL_CANVAS_EVENT_DEVICE_CHANGED,
+                          _dev_changed, ee2);
+
+   ecore_main_loop_begin();
+
+   ecore_event_handler_del(mouse_wheel);
+   ecore_event_handler_del(keydown_handler);
+   ecore_event_handler_del(keyup_handler);
+   ecore_event_handler_del(mouse_move);
+   ecore_event_handler_del(mouse_up);
+   ecore_event_handler_del(mouse_down);
+
+   ecore_evas_free(ee1);
+   ecore_evas_free(ee2);
+
+   ecore_evas_shutdown();
+
+   return 0;
+}

-- 


Reply via email to