elput: Support sending of session activate/deactivate event

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>
This commit is contained in:
Chris Michael 2016-05-09 11:01:30 -04:00
parent 9ed2f42c08
commit 3de066469a
3 changed files with 39 additions and 9 deletions

View 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

View 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;

View File

@ -2,6 +2,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)
{
@ -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);
}
}