ecore_drm: Add event of ECORE_DRM_EVENT_SEAT_ADD.
authorSeunghun Lee <shiin.lee@samsung.com>
Tue, 24 Mar 2015 14:45:11 +0000 (10:45 -0400)
committerChris Michael <cp.michael@samsung.com>
Tue, 24 Mar 2015 14:45:11 +0000 (10:45 -0400)
Summary: To support multi-seat, ecore_drm need to issue the event to notify compositor of seat is added.

Test Plan: N/A

Reviewers: zmike, raster, gwanglim, devilhorns

Reviewed By: devilhorns

Subscribers: cedric

Differential Revision: https://phab.enlightenment.org/D2212

src/lib/ecore_drm/Ecore_Drm.h
src/lib/ecore_drm/ecore_drm.c
src/lib/ecore_drm/ecore_drm_inputs.c

index ff460e3..6378022 100644 (file)
@@ -162,6 +162,8 @@ EAPI extern int ECORE_DRM_EVENT_ACTIVATE;
 
 EAPI extern int ECORE_DRM_EVENT_OUTPUT; /**< @since 1.14 */
 
+EAPI extern int ECORE_DRM_EVENT_SEAT_ADD; /**< @since 1.14 */
+
 /**
  * @file
  * @brief Ecore functions for dealing with drm, virtual terminals
index 2ae0766..c2dbfb0 100644 (file)
@@ -90,6 +90,7 @@ ecore_drm_init(void)
 
    ECORE_DRM_EVENT_ACTIVATE = ecore_event_type_new();
    ECORE_DRM_EVENT_OUTPUT = ecore_event_type_new();
+   ECORE_DRM_EVENT_SEAT_ADD = ecore_event_type_new();
 
    /* return init count */
    return _ecore_drm_init_count;
index d83f229..bfd237c 100644 (file)
@@ -4,6 +4,8 @@
 
 #include "ecore_drm_private.h"
 
+EAPI int ECORE_DRM_EVENT_SEAT_ADD = -1;
+
 /* local functions */
 static int 
 _cb_open_restricted(const char *path, int flags, void *data)
@@ -59,17 +61,12 @@ _cb_close_restricted(int fd, void *data)
 }
 
 static Ecore_Drm_Seat *
-_seat_get(Ecore_Drm_Input *input, const char *seat)
+_seat_create(Ecore_Drm_Input *input, const char *seat)
 {
    Ecore_Drm_Seat *s;
-   Eina_List *l;
-
-   /* search for this name in existing seats */
-   EINA_LIST_FOREACH(input->dev->seats, l, s)
-     if (!strcmp(s->name, seat)) return s;
 
    /* try to allocate space for new seat */
-   if (!(s = calloc(1, sizeof(Ecore_Drm_Seat)))) 
+   if (!(s = calloc(1, sizeof(Ecore_Drm_Seat))))
      return NULL;
 
    s->input = input;
@@ -78,9 +75,24 @@ _seat_get(Ecore_Drm_Input *input, const char *seat)
    /* add this new seat to list */
    input->dev->seats = eina_list_append(input->dev->seats, s);
 
+   ecore_event_add(ECORE_DRM_EVENT_SEAT_ADD, NULL, NULL, NULL);
+
    return s;
 }
 
+static Ecore_Drm_Seat *
+_seat_get(Ecore_Drm_Input *input, const char *seat)
+{
+   Ecore_Drm_Seat *s;
+   Eina_List *l;
+
+   /* search for this name in existing seats */
+   EINA_LIST_FOREACH(input->dev->seats, l, s)
+     if (!strcmp(s->name, seat)) return s;
+
+   return _seat_create(input, seat);
+}
+
 static void 
 _device_added(Ecore_Drm_Input *input, struct libinput_device *device)
 {