Eina_Bool enabled : 1;
} Ecore_Drm2_Event_Output_Changed;
+/* structure to represent event for session state changes */
+typedef struct _Ecore_Drm2_Event_Activate
+{
+ Eina_Bool active : 1;
+} Ecore_Drm2_Event_Activate;
+
EAPI extern int ECORE_DRM2_EVENT_OUTPUT_CHANGED;
+EAPI extern int ECORE_DRM2_EVENT_ACTIVATE;
/**
* @file
int _ecore_drm2_log_dom = -1;
EAPI int ECORE_DRM2_EVENT_OUTPUT_CHANGED = -1;
+EAPI int ECORE_DRM2_EVENT_ACTIVATE = -1;
EAPI int
ecore_drm2_init(void)
}
ECORE_DRM2_EVENT_OUTPUT_CHANGED = ecore_event_type_new();
+ ECORE_DRM2_EVENT_ACTIVATE = ecore_event_type_new();
return _ecore_drm2_init_count;
if (--_ecore_drm2_init_count != 0) return _ecore_drm2_init_count;
ECORE_DRM2_EVENT_OUTPUT_CHANGED = -1;
+ ECORE_DRM2_EVENT_ACTIVATE = -1;
eina_log_domain_unregister(_ecore_drm2_log_dom);
_ecore_drm2_log_dom = -1;
# define DRM_CAP_CURSOR_HEIGHT 0x9
#endif
+static Eina_Bool
+_cb_session_active(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
+{
+ Elput_Event_Session_Active *ev;
+ Ecore_Drm2_Event_Activate *ea;
+
+ ev = event;
+
+ ea = calloc(1, sizeof(Ecore_Drm2_Event_Activate));
+ if (!ea) return ECORE_CALLBACK_RENEW;
+
+ ea->active = ev->active;
+
+ ecore_event_add(ECORE_DRM2_EVENT_ACTIVATE, ea, NULL, NULL);
+
+ return ECORE_CALLBACK_RENEW;
+}
+
static const char *
_drm2_device_find(const char *seat)
{
DBG("Device Path: %s", device->path);
DBG("Device Fd: %d", device->fd);
+ device->active_hdlr =
+ ecore_event_handler_add(ELPUT_EVENT_SESSION_ACTIVE,
+ _cb_session_active, device);
+
/* NB: Not going to enable planes if we don't support atomic */
/* if (drmSetClientCap(device->fd, DRM_CLIENT_CAP_UNIVERSAL_PLANES, 1) < 0) */
/* ERR("Could not set Universal Plane support: %m"); */
{
EINA_SAFETY_ON_NULL_RETURN(device);
+ if (device->active_hdlr) ecore_event_handler_del(device->active_hdlr);
+ device->active_hdlr = NULL;
+
eina_stringshare_del(device->path);
free(device);
}