ecore-drm: Add event to notify session activation state.
Summary: this event is to notify session activation state to compositor. thus compositor can change composite state by this event. Reviewers: devilhorns Subscribers: torori, cedric Differential Revision: https://phab.enlightenment.org/D1767
This commit is contained in:
parent
5d767aff32
commit
5720a350f9
|
@ -108,6 +108,11 @@ struct _Ecore_Drm_Device
|
|||
unsigned int window;
|
||||
};
|
||||
|
||||
struct _Ecore_Drm_Event_Activate
|
||||
{
|
||||
Eina_Bool active;
|
||||
};
|
||||
|
||||
/* opaque structure to represent a drm device */
|
||||
typedef struct _Ecore_Drm_Device Ecore_Drm_Device;
|
||||
|
||||
|
@ -129,6 +134,11 @@ typedef struct _Ecore_Drm_Seat Ecore_Drm_Seat;
|
|||
/* opaque structure to represent a drm sprite */
|
||||
typedef struct _Ecore_Drm_Sprite Ecore_Drm_Sprite;
|
||||
|
||||
/* sturcture to inform drm activation state */
|
||||
typedef struct _Ecore_Drm_Event_Activate Ecore_Drm_Event_Activate;
|
||||
|
||||
EAPI extern int ECORE_DRM_EVENT_ACTIVATE;
|
||||
|
||||
/**
|
||||
* @file
|
||||
* @brief Ecore functions for dealing with drm, virtual terminals
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
# include "config.h"
|
||||
#endif
|
||||
|
||||
#include "Ecore_Drm.h"
|
||||
#include "ecore_drm_private.h"
|
||||
|
||||
/* local variables */
|
||||
|
@ -10,6 +11,24 @@ static int _ecore_drm_init_count = 0;
|
|||
/* external variables */
|
||||
int _ecore_drm_log_dom = -1;
|
||||
|
||||
EAPI int ECORE_DRM_EVENT_ACTIVATE = 0;
|
||||
|
||||
static void
|
||||
_ecore_drm_event_activate_free(void *data EINA_UNUSED, void *event)
|
||||
{
|
||||
free(event);
|
||||
}
|
||||
|
||||
void
|
||||
_ecore_drm_event_activate_send(Eina_Bool active)
|
||||
{
|
||||
Ecore_Drm_Event_Activate *e;
|
||||
|
||||
e = calloc(1, sizeof(Ecore_Drm_Event_Activate));
|
||||
e->active = active;
|
||||
ecore_event_add(ECORE_DRM_EVENT_ACTIVATE, e, _ecore_drm_event_activate_free, NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
* @defgroup Ecore_Drm_Init_Group Drm Library Init and Shutdown Functions
|
||||
*
|
||||
|
@ -67,6 +86,8 @@ ecore_drm_init(void)
|
|||
/* try to init eeze */
|
||||
if (!eeze_init()) goto eeze_err;
|
||||
|
||||
ECORE_DRM_EVENT_ACTIVATE = ecore_event_type_new();
|
||||
|
||||
/* return init count */
|
||||
return _ecore_drm_init_count;
|
||||
|
||||
|
|
|
@ -68,10 +68,8 @@ _cb_device_paused(void *ctxt EINA_UNUSED, const Eldbus_Message *msg)
|
|||
_ecore_drm_dbus_device_pause_done(maj, min);
|
||||
}
|
||||
|
||||
/* if (maj == DRM_MAJOR) */
|
||||
/* { */
|
||||
/* // emit paused to compositor */
|
||||
/* } */
|
||||
if (maj == DRM_MAJOR)
|
||||
_ecore_drm_event_activate_send(EINA_FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -90,10 +88,8 @@ _cb_device_resumed(void *ctxt EINA_UNUSED, const Eldbus_Message *msg)
|
|||
|
||||
if (eldbus_message_arguments_get(msg, "uuh", &maj, &min, &fd))
|
||||
{
|
||||
/* if (maj == DRM_MAJOR) */
|
||||
/* { */
|
||||
/* // emit active to compositor */
|
||||
/* } */
|
||||
if (maj == DRM_MAJOR)
|
||||
_ecore_drm_event_activate_send(EINA_TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
# define KDSKBMUTE 0x4B51
|
||||
#endif
|
||||
|
||||
Ecore_Event_Handler *active_hdl;
|
||||
static char *sid;
|
||||
|
||||
static Eina_Bool
|
||||
|
@ -52,15 +53,40 @@ _ecore_drm_logind_cb_vt_signal(void *data, int type EINA_UNUSED, void *event)
|
|||
|
||||
if (ev->number == 1)
|
||||
{
|
||||
Ecore_Drm_Input *input;
|
||||
Ecore_Drm_Output *output;
|
||||
Ecore_Drm_Sprite *sprite;
|
||||
Eina_List *l;
|
||||
if (!ecore_drm_tty_release(dev))
|
||||
ERR("Could not release VT: %m");
|
||||
}
|
||||
else if (ev->number == 2)
|
||||
{
|
||||
if (!ecore_drm_tty_acquire(dev))
|
||||
ERR("Could not acquire VT: %m");
|
||||
}
|
||||
|
||||
/* disable inputs (suspends) */
|
||||
EINA_LIST_FOREACH(dev->inputs, l, input)
|
||||
ecore_drm_inputs_disable(input);
|
||||
return ECORE_CALLBACK_PASS_ON;
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
_ecore_drm_logind_cb_activate(void *data, int type EINA_UNUSED, void *event)
|
||||
{
|
||||
Ecore_Drm_Event_Activate *e;
|
||||
Ecore_Drm_Device *dev;
|
||||
Ecore_Drm_Sprite *sprite;
|
||||
Ecore_Drm_Output *output;
|
||||
Eina_List *l;
|
||||
|
||||
|
||||
if ((!event) || (!data)) return ECORE_CALLBACK_RENEW;
|
||||
e = event;
|
||||
dev = data;
|
||||
|
||||
if (e->active)
|
||||
{
|
||||
/* set output mode */
|
||||
EINA_LIST_FOREACH(dev->outputs, l, output)
|
||||
ecore_drm_output_enable(output);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* disable hardware cursor */
|
||||
EINA_LIST_FOREACH(dev->outputs, l, output)
|
||||
ecore_drm_output_cursor_size_set(output, 0, 0, 0);
|
||||
|
@ -68,34 +94,12 @@ _ecore_drm_logind_cb_vt_signal(void *data, int type EINA_UNUSED, void *event)
|
|||
/* disable sprites */
|
||||
EINA_LIST_FOREACH(dev->sprites, l, sprite)
|
||||
ecore_drm_sprites_fb_set(sprite, 0, 0);
|
||||
|
||||
if (!ecore_drm_tty_release(dev))
|
||||
ERR("Could not release VT: %m");
|
||||
}
|
||||
else if (ev->number == 2)
|
||||
{
|
||||
if (ecore_drm_tty_acquire(dev))
|
||||
{
|
||||
Ecore_Drm_Output *output;
|
||||
Ecore_Drm_Input *input;
|
||||
Eina_List *l;
|
||||
|
||||
/* set output mode */
|
||||
EINA_LIST_FOREACH(dev->outputs, l, output)
|
||||
ecore_drm_output_enable(output);
|
||||
|
||||
/* enable inputs */
|
||||
EINA_LIST_FOREACH(dev->inputs, l, input)
|
||||
ecore_drm_inputs_enable(input);
|
||||
}
|
||||
else
|
||||
ERR("Could not acquire VT: %m");
|
||||
}
|
||||
|
||||
return ECORE_CALLBACK_PASS_ON;
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
static Eina_Bool
|
||||
_ecore_drm_logind_tty_setup(Ecore_Drm_Device *dev)
|
||||
{
|
||||
struct stat st;
|
||||
|
@ -160,7 +164,6 @@ err_kmode:
|
|||
return EINA_FALSE;
|
||||
}
|
||||
|
||||
|
||||
static Eina_Bool
|
||||
_ecore_drm_logind_vt_open(Ecore_Drm_Device *dev, const char *name)
|
||||
{
|
||||
|
@ -222,6 +225,10 @@ _ecore_drm_logind_vt_open(Ecore_Drm_Device *dev, const char *name)
|
|||
ecore_event_handler_add(ECORE_EVENT_KEY_DOWN,
|
||||
_ecore_drm_logind_cb_vt_switch, dev);
|
||||
|
||||
active_hdl =
|
||||
ecore_event_handler_add(ECORE_DRM_EVENT_ACTIVATE,
|
||||
_ecore_drm_logind_cb_activate, dev);
|
||||
|
||||
/* set current tty into env */
|
||||
setenv("ECORE_DRM_TTY", tty, 1);
|
||||
|
||||
|
@ -278,6 +285,12 @@ _ecore_drm_logind_disconnect(Ecore_Drm_Device *dev)
|
|||
{
|
||||
_ecore_drm_logind_vt_close(dev);
|
||||
_ecore_drm_dbus_shutdown();
|
||||
|
||||
if (active_hdl)
|
||||
{
|
||||
ecore_event_handler_del(active_hdl);
|
||||
active_hdl = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
Eina_Bool
|
||||
|
|
|
@ -229,6 +229,8 @@ struct _Ecore_Drm_Sprite
|
|||
|
||||
typedef void (*Ecore_Drm_Open_Cb)(void *data, int fd, Eina_Bool b);
|
||||
|
||||
void _ecore_drm_event_activate_send(Eina_Bool active);
|
||||
|
||||
Eina_Bool _ecore_drm_launcher_device_open(const char *device, Ecore_Drm_Open_Cb callback, void *data, int flags);
|
||||
int _ecore_drm_launcher_device_open_no_pending(const char *device, int flags);
|
||||
void _ecore_drm_launcher_device_close(const char *device, int fd);
|
||||
|
|
|
@ -78,6 +78,8 @@ _ecore_drm_tty_cb_signal(void *data, int type EINA_UNUSED, void *event)
|
|||
}
|
||||
else
|
||||
ERR("Could not drop drm master: %m");
|
||||
|
||||
_ecore_drm_event_activate_send(EINA_FALSE);
|
||||
}
|
||||
else if (ev->number == 2)
|
||||
{
|
||||
|
@ -99,6 +101,8 @@ _ecore_drm_tty_cb_signal(void *data, int type EINA_UNUSED, void *event)
|
|||
/* enable inputs */
|
||||
EINA_LIST_FOREACH(dev->inputs, l, input)
|
||||
ecore_drm_inputs_enable(input);
|
||||
|
||||
_ecore_drm_event_activate_send(EINA_TRUE);
|
||||
}
|
||||
else
|
||||
ERR("Could not acquire VT: %m");
|
||||
|
|
Loading…
Reference in New Issue