Eina_Bool plug : 1;
};
+struct _Ecore_Drm_Event_Input_Device_Add
+{
+ const char *name; /* descriptive device name */
+ const char *sysname; /* system name of the input device */
+ const char *seatname; /* logical name of the seat */
+ Ecore_Drm_Seat_Capabilities caps; /* capabilities on a device */
+};
+
+struct _Ecore_Drm_Event_Input_Device_Del
+{
+ const char *name; /* descriptive device name */
+ const char *sysname; /* system name of the input device */
+ const char *seatname; /* logical name of the seat */
+ Ecore_Drm_Seat_Capabilities caps; /* capabilities on a device */
+};
+
/* opaque structure to represent a drm device */
typedef struct _Ecore_Drm_Device Ecore_Drm_Device;
/* sturcture to inform drm vblank */
typedef struct _Ecore_Drm_Event_Vblank Ecore_Drm_Event_Vblank;
+/* sturcture to inform new input device added */
+typedef struct _Ecore_Drm_Event_Input_Device_Add Ecore_Drm_Event_Input_Device_Add;
+
+/* sturcture to inform old input device deleted */
+typedef struct _Ecore_Drm_Event_Input_Device_Del Ecore_Drm_Event_Input_Device_Del;
+
/* structure to inform drm output plug events */
/** @since 1.14 */
typedef struct _Ecore_Drm_Event_Output Ecore_Drm_Event_Output;
EAPI extern int ECORE_DRM_EVENT_ACTIVATE;
EAPI extern int ECORE_DRM_EVENT_PAGE_FLIP;
EAPI extern int ECORE_DRM_EVENT_VBLANK;
+EAPI extern int ECORE_DRM_EVENT_INPUT_DEVICE_ADD;
+EAPI extern int ECORE_DRM_EVENT_INPUT_DEVICE_DEL;
EAPI extern int ECORE_DRM_EVENT_OUTPUT; /**< @since 1.14 */
*/
EAPI Eina_Stringshare *ecore_drm_output_make_get(Ecore_Drm_Output *output);
+/**
+ * @since tizen 3.0
+ */
+EAPI Eina_List *ecore_drm_seat_evdev_list_get(Ecore_Drm_Seat *seat);
+EAPI const char *ecore_drm_evdev_name_get(Ecore_Drm_Evdev *evdev);
+EAPI const char *ecore_drm_evdev_sysname_get(Ecore_Drm_Evdev *evdev);
+
#endif
EAPI int ECORE_DRM_EVENT_ACTIVATE = 0;
EAPI int ECORE_DRM_EVENT_PAGE_FLIP = 0;
EAPI int ECORE_DRM_EVENT_VBLANK = 0;
+EAPI int ECORE_DRM_EVENT_INPUT_DEVICE_ADD = 0;
+EAPI int ECORE_DRM_EVENT_INPUT_DEVICE_DEL = 0;
static void
_ecore_drm_event_activate_free(void *data EINA_UNUSED, void *event)
ECORE_DRM_EVENT_PAGE_FLIP = ecore_event_type_new();
ECORE_DRM_EVENT_VBLANK = ecore_event_type_new();
ECORE_DRM_EVENT_OUTPUT = ecore_event_type_new();
+ ECORE_DRM_EVENT_INPUT_DEVICE_ADD = ecore_event_type_new();
+ ECORE_DRM_EVENT_INPUT_DEVICE_DEL = ecore_event_type_new();
/* return init count */
return _ecore_drm_init_count;
continue;
}
}
+
+EAPI const char *
+ecore_drm_evdev_name_get(Ecore_Drm_Evdev *evdev)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(evdev, NULL);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(evdev->device, NULL);
+
+ return libinput_device_get_name(evdev->device);
+}
+
+EAPI const char *
+ecore_drm_evdev_sysname_get(Ecore_Drm_Evdev *evdev)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(evdev, NULL);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(evdev->device, NULL);
+
+ return libinput_device_get_sysname(evdev->device);
+}
return s;
}
+static void
+_ecore_drm_event_input_device_add_free(void *data EINA_UNUSED, void *ev)
+{
+ Ecore_Drm_Event_Input_Device_Add *e;
+
+ e = ev;
+ eina_stringshare_del(e->name);
+ eina_stringshare_del(e->sysname);
+ eina_stringshare_del(e->seatname);
+
+ free(e);
+}
+
+static void
+_ecore_drm_event_input_device_del_free(void *data EINA_UNUSED, void *ev)
+{
+ Ecore_Drm_Event_Input_Device_Del *e;
+
+ e = ev;
+ eina_stringshare_del(e->name);
+ eina_stringshare_del(e->sysname);
+ eina_stringshare_del(e->seatname);
+
+ free(e);
+}
+
static void
_device_added(Ecore_Drm_Input *input, struct libinput_device *device)
{
const char *seat_name;
Ecore_Drm_Seat *seat;
Ecore_Drm_Evdev *edev;
+ Ecore_Drm_Event_Input_Device_Add *ev;
libinput_seat = libinput_device_get_seat(device);
seat_name = libinput_seat_get_logical_name(libinput_seat);
/* append this device to the seat */
seat->devices = eina_list_append(seat->devices, edev);
+
+ ev = calloc(1, sizeof(Ecore_Drm_Event_Input_Device_Add));
+ if (!ev) return;
+
+ ev->name = eina_stringshare_add(libinput_device_get_name(device));
+ ev->sysname = eina_stringshare_add(edev->path);
+ ev->seatname = eina_stringshare_add(edev->seat->name);
+ ev->caps = edev->seat_caps;
+
+ ecore_event_add(ECORE_DRM_EVENT_INPUT_DEVICE_ADD,
+ ev,
+ _ecore_drm_event_input_device_add_free,
+ NULL);
}
static void
-_device_removed(Ecore_Drm_Input *input EINA_UNUSED, struct libinput_device *device)
+_device_removed(Ecore_Drm_Input *input, struct libinput_device *device)
{
Ecore_Drm_Evdev *edev;
+ Ecore_Drm_Event_Input_Device_Del *ev;
/* try to get the evdev structure */
if (!(edev = libinput_device_get_user_data(device)))
return;
+ ev = calloc(1, sizeof(Ecore_Drm_Event_Input_Device_Del));
+ if (!ev) return;
+
+ ev->name = eina_stringshare_add(libinput_device_get_name(device));
+ ev->sysname = eina_stringshare_add(edev->path);
+ ev->seatname = eina_stringshare_add(edev->seat->name);
+ ev->caps = edev->seat_caps;
+
+ ecore_event_add(ECORE_DRM_EVENT_INPUT_DEVICE_DEL,
+ ev,
+ _ecore_drm_event_input_device_del_free,
+ NULL);
+
/* remove this evdev from the seat's list of devices */
edev->seat->devices = eina_list_remove(edev->seat->devices, edev);
input->suspended = EINA_TRUE;
}
+
+EAPI Eina_List *
+ecore_drm_seat_evdev_list_get(Ecore_Drm_Seat *seat)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(seat, NULL);
+ return seat->devices;
+}