#ifdef HAVE_SYSTEMD
&_logind_interface,
#endif
- NULL, // launcher
- NULL, // direct
NULL,
};
+static Eina_Bool
+_cb_key_down(void *data, int type EINA_UNUSED, void *event)
+{
+ Elput_Manager *em;
+ Ecore_Event_Key *ev;
+ int code = 0, vt = 0;
+
+ em = data;
+ ev = event;
+ code = (ev->keycode - 8);
+
+ if ((ev->modifiers & ECORE_EVENT_MODIFIER_CTRL) &&
+ (ev->modifiers & ECORE_EVENT_MODIFIER_ALT) &&
+ (code >= KEY_F1) && (code <= KEY_F8))
+ {
+ vt = (code - KEY_F1 + 1);
+ if (em->interface->vt_set)
+ {
+ if (!em->interface->vt_set(em, vt))
+ ERR("Failed to switch to virtual terminal %d", vt);
+ }
+ }
+
+ return ECORE_CALLBACK_RENEW;
+}
+
EAPI Elput_Manager *
elput_manager_connect(const char *seat, unsigned int tty, Eina_Bool sync)
{
EAPI int
elput_manager_open(Elput_Manager *manager, const char *path, int flags)
{
+ int ret = -1;
+
EINA_SAFETY_ON_NULL_RETURN_VAL(manager, -1);
EINA_SAFETY_ON_NULL_RETURN_VAL(manager->interface, -1);
EINA_SAFETY_ON_NULL_RETURN_VAL(path, -1);
if (flags < 0) flags = O_RDWR;
if (manager->interface->open)
- return manager->interface->open(manager, path, flags);
+ {
+ ret = manager->interface->open(manager, path, flags);
+ if (ret)
+ {
+ manager->vt_hdlr =
+ ecore_event_handler_add(ECORE_EVENT_KEY_DOWN,
+ _cb_key_down, manager);
+ }
+ }
- return -1;
+ return ret;
}
EAPI void
EINA_SAFETY_ON_NULL_RETURN(manager);
EINA_SAFETY_ON_NULL_RETURN(manager->interface);
+ if (manager->vt_hdlr) ecore_event_handler_del(manager->vt_hdlr);
+ manager->vt_hdlr = NULL;
+
if (manager->interface->close)
manager->interface->close(manager, fd);
}