efl.canvas: Add "seat" (by id) and "device" (by name) properties
authorJean-Philippe Andre <jp.andre@samsung.com>
Thu, 8 Jun 2017 02:49:07 +0000 (11:49 +0900)
committerJean-Philippe Andre <jp.andre@samsung.com>
Mon, 12 Jun 2017 06:21:57 +0000 (15:21 +0900)
See d47197e65b59406e0f25c5a4db56e68da61bec30

@feature

src/lib/efl/Efl.h
src/lib/efl/interfaces/efl_canvas.eo
src/lib/evas/canvas/evas_canvas.eo
src/lib/evas/canvas/evas_device.c

index 8730bd6..840f6ea 100644 (file)
@@ -115,6 +115,10 @@ typedef Efl_Gfx_Path_Command_Type Efl_Gfx_Path_Command;
 #include "interfaces/efl_gfx_filter.eo.h"
 #include "interfaces/efl_gfx_size_hint.eo.h"
 
+/* Input events */
+#include "interfaces/efl_input_types.eot.h"
+#include "interfaces/efl_input_device.eo.h"
+
 /* Canvas & UI */
 #include "interfaces/efl_canvas.eo.h"
 #include "interfaces/efl_ui_view.eo.h"
@@ -133,10 +137,6 @@ typedef Efl_Gfx_Path_Command_Type Efl_Gfx_Path_Command;
 #include "interfaces/efl_pack_linear.eo.h"
 #include "interfaces/efl_pack_grid.eo.h"
 
-/* Input events */
-#include "interfaces/efl_input_types.eot.h"
-#include "interfaces/efl_input_device.eo.h"
-
 /* Input and Output */
 #include "interfaces/efl_io_closer.eo.h"
 #include "interfaces/efl_io_reader.eo.h"
index 0e2179f..5105d4a 100644 (file)
@@ -1,3 +1,5 @@
+import efl_input_device;
+
 interface Efl.Canvas ()
 {
    [[Common interface for window and some internal classes in EFL.]]
@@ -158,6 +160,47 @@ interface Efl.Canvas ()
             ]]
          }
       }
+      seats {
+         [[Iterate over the input device seats.
+
+           @since 1.20
+         ]]
+         return: own(free(iterator<Efl.Input.Device>, eina_iterator_free));
+            [[An iterator over the attached seats.]]
+      }
+      @property device {
+         [[An input device attached to this canvas, found by name.
+
+           Note: This function is meant to find seats and not individual
+           input devices.
+
+           See also @.seat to find a seat by id instead of by name.
+         ]]
+         get {
+            [[Get a device by name.]]
+         }
+         keys {
+            name: string; [[The name of the seat to find.]]
+         }
+         values {
+            seat: Efl.Input.Device; [[The device or seat, $null if not found.]]
+         }
+      }
+      @property seat {
+         [[A seat attached to this canvas, found by id.
+
+           See also @.device to find a seat by name instead of by id.
+         ]]
+         get {
+            [[Get a seat by id.]]
+         }
+         keys {
+            id: int; [[The id of the seat to find.]]
+         }
+         values {
+            seat: Efl.Input.Device; [[The seat or $null if not found.]]
+         }
+      }
    }
    events {
       focus,in: Efl.Input.Focus; [[Called when canvas got focus]]
index 7eb7024..139112d 100644 (file)
@@ -1118,7 +1118,8 @@ class Evas.Canvas (Efl.Object, Efl.Canvas, Efl.Animator, Efl.Input.Interface,
       }
       @property default_device {
          [[Return the default device of a given type.
-           \@note Currently Evas only creates a seat, mouse and keyboard.
+
+           Note: Currently EFL only creates a seat, mouse and keyboard.
            @since 1.19
          ]]
          get {}
@@ -1162,5 +1163,8 @@ class Evas.Canvas (Efl.Object, Efl.Canvas, Efl.Animator, Efl.Input.Interface,
       Efl.Object.event_freeze;
       Efl.Object.provider_find;
       Efl.Loop_User.loop { get; }
+      //Efl.Canvas.seats;
+      Efl.Canvas.device { get; }
+      Efl.Canvas.seat { get; }
    }
 }
index 19cd1fe..574f6e2 100644 (file)
@@ -95,20 +95,14 @@ _del_cb(void *data, const Efl_Event *ev)
                            ev->object);
 }
 
-EAPI Evas_Device *
-evas_device_get(Evas *eo_e, const char *name)
+EOLIAN Efl_Input_Device *
+_evas_canvas_efl_canvas_device_get(Evas *eo_e EINA_UNUSED, Evas_Public_Data *e, const char *name)
 {
    const char *dev_name;
-   Evas_Public_Data *e;
    Evas_Device *dev;
    Eina_List *l;
 
-   SAFETY_CHECK(eo_e, EVAS_CANVAS_CLASS, NULL);
-
-   if (!name)
-       return NULL;
-
-   e = efl_data_scope_get(eo_e, EVAS_CANVAS_CLASS);
+   if (!name) return NULL;
 
    EINA_LIST_FOREACH(e->devices, l, dev)
      {
@@ -122,22 +116,23 @@ evas_device_get(Evas *eo_e, const char *name)
 }
 
 EAPI Evas_Device *
-evas_device_get_by_seat_id(Evas *eo_e, unsigned int id)
+evas_device_get(Evas *eo_e, const char *name)
+{
+   return efl_canvas_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)
 {
-   unsigned int seat_id;
-   Evas_Public_Data *e;
    Evas_Device *dev;
    Eina_List *l;
 
-   SAFETY_CHECK(eo_e, EVAS_CANVAS_CLASS, NULL);
-
-   e = efl_data_scope_get(eo_e, EVAS_CANVAS_CLASS);
-
    EINA_LIST_FOREACH(e->devices, l, dev)
      {
-        seat_id = efl_input_device_seat_id_get(dev);
+        if (efl_input_device_type_get(dev) != EFL_INPUT_DEVICE_TYPE_SEAT)
+          continue;
 
-        if (seat_id == id)
+        if (efl_input_device_seat_id_get(dev) == id)
           return dev;
      }
 
@@ -145,6 +140,12 @@ evas_device_get_by_seat_id(Evas *eo_e, unsigned int id)
 }
 
 EAPI Evas_Device *
+evas_device_get_by_seat_id(Evas *eo_e, unsigned int id)
+{
+   return efl_canvas_seat_get(eo_e, id);
+}
+
+EAPI Evas_Device *
 evas_device_add(Evas *eo_e)
 {
    return evas_device_add_full(eo_e, NULL, NULL, NULL, NULL,