evas: add getter for devices by name
authorBruno Dilly <bdilly@profusion.mobi>
Thu, 17 Nov 2016 18:50:44 +0000 (16:50 -0200)
committerBruno Dilly <bdilly@profusion.mobi>
Mon, 19 Dec 2016 16:58:35 +0000 (14:58 -0200)
Make it possible to get the evas device given
its name. It sounds useful for Edje since
programs will reference seats by name.

src/lib/evas/Evas_Common.h
src/lib/evas/canvas/evas_device.c

index 2f54174..8d2f85e 100644 (file)
@@ -1240,6 +1240,22 @@ EAPI void evas_device_pop(Evas *e);
 EAPI const Eina_List *evas_device_list(Evas *e, const Evas_Device *dev);
 
 /**
+ * Get a device by its name
+ *
+ * @param e The canvas to create the device node for.
+ * @param name The name of the device.
+ *
+ * Gets the first ocurrence of a device named as @p name
+ * on Evas @p e list of devices.
+ *
+ * @return the device or NULL if an error occurred, no name was provided,
+ * or no device with a matching name was found.
+ *
+ * @since 1.19
+ */
+EAPI Evas_Device *evas_device_get(Evas *e, const char *name);
+
+/**
  * Set the name of a device as a string
  *
  * @p dev The device to set the name of
index 4ab6d15..9a65d79 100644 (file)
@@ -95,6 +95,32 @@ _del_cb(void *data, const Efl_Event *ev)
 }
 
 EAPI Evas_Device *
+evas_device_get(Evas *eo_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);
+
+   EINA_LIST_FOREACH(e->devices, l, dev)
+     {
+        dev_name = efl_input_device_name_get(dev);
+
+        if (eina_streq(dev_name, name))
+          return dev;
+     }
+
+   return NULL;
+}
+
+EAPI Evas_Device *
 evas_device_add(Evas *eo_e)
 {
    return evas_device_add_full(eo_e, NULL, NULL, NULL, NULL,