elput: Support sending of session activate/deactivate event
authorChris Michael <cpmichael@osg.samsung.com>
Mon, 9 May 2016 15:01:30 +0000 (11:01 -0400)
committerChris Michael <cpmichael@osg.samsung.com>
Mon, 9 May 2016 15:01:30 +0000 (11:01 -0400)
This patch adds support for notifying when a session gets activated or
deactivated. This will be used in drm2 to notify compositor when to
pause/restart rendering during a vt switch

@feature

Signed-off-by: Chris Michael <cpmichael@osg.samsung.com>
src/lib/elput/Elput.h
src/lib/elput/elput.c
src/lib/elput/elput_logind.c

index f3fe16b..95adfce 100644 (file)
@@ -91,11 +91,19 @@ typedef struct _Elput_Event_Device_Change
    Elput_Device_Change_Type type;
 } Elput_Event_Device_Change;
 
+/* structure to represent session active changes */
+typedef struct _Elput_Event_Session_Active
+{
+   const char *session;
+   Eina_Bool active : 1;
+} Elput_Event_Session_Active;
+
 EAPI extern int ELPUT_EVENT_SEAT_CAPS;
 EAPI extern int ELPUT_EVENT_SEAT_FRAME;
 EAPI extern int ELPUT_EVENT_KEYMAP_SEND;
 EAPI extern int ELPUT_EVENT_MODIFIERS_SEND;
 EAPI extern int ELPUT_EVENT_DEVICE_CHANGE;
+EAPI extern int ELPUT_EVENT_SESSION_ACTIVE;
 
 /**
  * @file
index 2e54b3e..95d7a1e 100644 (file)
@@ -11,6 +11,7 @@ EAPI int ELPUT_EVENT_SEAT_FRAME = -1;
 EAPI int ELPUT_EVENT_KEYMAP_SEND = -1;
 EAPI int ELPUT_EVENT_MODIFIERS_SEND = -1;
 EAPI int ELPUT_EVENT_DEVICE_CHANGE = -1;
+EAPI int ELPUT_EVENT_SESSION_ACTIVE = -1;
 
 EAPI int
 elput_init(void)
@@ -34,6 +35,7 @@ elput_init(void)
    ELPUT_EVENT_KEYMAP_SEND = ecore_event_type_new();
    ELPUT_EVENT_MODIFIERS_SEND = ecore_event_type_new();
    ELPUT_EVENT_DEVICE_CHANGE = ecore_event_type_new();
+   ELPUT_EVENT_SESSION_ACTIVE = ecore_event_type_new();
 
    return _elput_init_count;
 
@@ -60,6 +62,7 @@ elput_shutdown(void)
    ELPUT_EVENT_KEYMAP_SEND = -1;
    ELPUT_EVENT_MODIFIERS_SEND = -1;
    ELPUT_EVENT_DEVICE_CHANGE = -1;
+   ELPUT_EVENT_SESSION_ACTIVE = -1;
 
    eina_log_domain_unregister(_elput_log_dom);
    _elput_log_dom = -1;
index 0f32b25..aedcd79 100644 (file)
@@ -3,6 +3,31 @@
 #ifdef HAVE_SYSTEMD
 
 static void
+_logind_session_active_cb_free(void *data EINA_UNUSED, void *event)
+{
+   Elput_Event_Session_Active *ev;
+
+   ev = event;
+   eina_stringshare_del(ev->session);
+   free(ev);
+}
+
+static void
+_logind_session_active_send(Elput_Manager *em, Eina_Bool active)
+{
+   Elput_Event_Session_Active *ev;
+
+   ev = calloc(1, sizeof(Elput_Event_Session_Active));
+   if (!ev) return;
+
+   ev->session = eina_stringshare_add(em->sid);
+   ev->active = active;
+
+   ecore_event_add(ELPUT_EVENT_SESSION_ACTIVE, ev,
+                   _logind_session_active_cb_free, NULL);
+}
+
+static void
 _logind_device_pause_complete(Elput_Manager *em, uint32_t major, uint32_t minor)
 {
    Eldbus_Proxy *proxy;
@@ -79,9 +104,7 @@ _cb_device_paused(void *data, const Eldbus_Message *msg)
           _logind_device_pause_complete(em, maj, min);
 
         if ((em->sync) && (maj == 226)) // DRM_MAJOR
-          {
-             /* TODO: _ecore_drm2_launcher_activate_send(em, EINA_FALSE); */
-          }
+          _logind_session_active_send(em, EINA_FALSE);
      }
 }
 
@@ -103,9 +126,7 @@ _cb_device_resumed(void *data, const Eldbus_Message *msg)
    if (eldbus_message_arguments_get(msg, "u", &maj))
      {
         if ((em->sync) && (maj == 226)) // DRM_MAJOR
-          {
-             /* TODO: _ecore_drm2_launcher_activate_send(em, EINA_TRUE); */
-          }
+          _logind_session_active_send(em, EINA_TRUE);
      }
 }
 
@@ -125,9 +146,7 @@ _cb_property_changed(void *data, Eldbus_Proxy *proxy EINA_UNUSED, void *event)
      {
         eina_value_get(ev->value, &active);
         if ((!em->sync) || (!active))
-          {
-             /* TODO: _ecore_drm2_launcher_activate_send(em, active); */
-          }
+          _logind_session_active_send(em, active);
      }
 }