enlightenment/src/modules/vkbd/e_mod_main.c

161 lines
4.2 KiB
C

#include "e.h"
#include "e_mod_main.h"
#include "e_kbd_int.h"
#include "e_kbd_send.h"
/* local function prototypes */
static void _il_kbd_stop(void);
static void _il_kbd_start(void);
static Eina_Bool _il_ki_delay_cb(void *data EINA_UNUSED);
/* local variables */
static E_Kbd_Int *ki = NULL;
static Ecore_Timer *ki_delay_timer = NULL;
static E_Config_DD *cd = NULL;
E_API E_Module_Api e_modapi = { E_MODULE_API_VERSION, "Virtual Keyboard" };
Il_Kbd_Config *il_kbd_cfg = NULL;
static void
_cb_act_vkbd_show(E_Object *obj EINA_UNUSED, const char *params EINA_UNUSED)
{
if (ki) e_kbd_int_show(ki);
}
static void
_cb_act_vkbd_hide(E_Object *obj EINA_UNUSED, const char *params EINA_UNUSED)
{
if (ki) e_kbd_int_hide(ki);
}
static void
_cb_act_vkbd_toggle(E_Object *obj EINA_UNUSED, const char *params EINA_UNUSED)
{
if (ki)
{
if (ki->visible) e_kbd_int_hide(ki);
else e_kbd_int_show(ki);
}
}
E_API void *
e_modapi_init(E_Module *m)
{
cd = E_CONFIG_DD_NEW("Il_Kbd_Config", Il_Kbd_Config);
E_CONFIG_VAL(cd, Il_Kbd_Config, dict, STR);
E_CONFIG_VAL(cd, Il_Kbd_Config, zone_id, STR);
E_CONFIG_VAL(cd, Il_Kbd_Config, zone_num, INT);
E_CONFIG_VAL(cd, Il_Kbd_Config, size, DOUBLE);
E_CONFIG_VAL(cd, Il_Kbd_Config, fill_mode, INT);
E_CONFIG_VAL(cd, Il_Kbd_Config, px, DOUBLE);
E_CONFIG_VAL(cd, Il_Kbd_Config, py, DOUBLE);
il_kbd_cfg = e_config_domain_load("module.vkbd", cd);
if (!il_kbd_cfg)
{
il_kbd_cfg = E_NEW(Il_Kbd_Config, 1);
il_kbd_cfg->dict = eina_stringshare_add("English_US.dic");
il_kbd_cfg->zone_num = 0;
il_kbd_cfg->size = 4.0;
il_kbd_cfg->fill_mode = 0;
}
il_kbd_cfg->mod_dir = eina_stringshare_add(m->dir);
il_kbd_cfg->slide_dim = 15;
il_kbd_cfg->act_kbd_show = e_action_add("vkbd_show");
if (il_kbd_cfg->act_kbd_show)
{
il_kbd_cfg->act_kbd_show->func.go = _cb_act_vkbd_show;
e_action_predef_name_set("Virtual Keyboard", _("Show"),
"vkbd_show", NULL, NULL, 0);
}
il_kbd_cfg->act_kbd_hide = e_action_add("vkbd_hide");
if (il_kbd_cfg->act_kbd_hide)
{
il_kbd_cfg->act_kbd_hide->func.go = _cb_act_vkbd_hide;
e_action_predef_name_set("Virtual Keyboard", _("Hide"),
"vkbd_hide", NULL, NULL, 0);
}
il_kbd_cfg->act_kbd_toggle = e_action_add("vkbd_toggle");
if (il_kbd_cfg->act_kbd_toggle)
{
il_kbd_cfg->act_kbd_toggle->func.go = _cb_act_vkbd_toggle;
e_action_predef_name_set("Virtual Keyboard", _("Toggle"),
"vkbd_toggle", NULL, NULL, 0);
}
ki_delay_timer = ecore_timer_add(1.0, _il_ki_delay_cb, NULL);
e_kbd_send_init();
return m;
}
E_API int
e_modapi_shutdown(E_Module *m EINA_UNUSED)
{
e_kbd_send_shutdown();
e_config_domain_save("module.vkbd", cd, il_kbd_cfg);
if (ki_delay_timer)
{
ecore_timer_del(ki_delay_timer);
ki_delay_timer = NULL;
}
_il_kbd_stop();
eina_stringshare_del(il_kbd_cfg->dict);
eina_stringshare_del(il_kbd_cfg->mod_dir);
if (il_kbd_cfg->act_kbd_show)
{
e_action_predef_name_del("Virtual Keyboard", _("Show"));
e_action_del("vkbd_show");
}
if (il_kbd_cfg->act_kbd_hide)
{
e_action_predef_name_del("Virtual Keyboard", _("Hide"));
e_action_del("vkbd_hide");
}
if (il_kbd_cfg->act_kbd_toggle)
{
e_action_predef_name_del("Virtual Keyboard", _("Toggle"));
e_action_del("vkbg_toggle");
}
E_FREE(il_kbd_cfg);
E_CONFIG_DD_FREE(cd);
return 1;
}
E_API int
e_modapi_save(E_Module *m EINA_UNUSED)
{
return e_config_domain_save("module.vkbd", cd, il_kbd_cfg);
}
static void
_il_kbd_stop(void)
{
if (ki) e_kbd_int_free(ki);
ki = NULL;
}
static void
_il_kbd_start(void)
{
ki = e_kbd_int_new(il_kbd_cfg->zone_num,
il_kbd_cfg->zone_id,
il_kbd_cfg->mod_dir,
il_kbd_cfg->mod_dir,
il_kbd_cfg->mod_dir);
ki->px = il_kbd_cfg->px;
ki->py = il_kbd_cfg->py;
e_kbd_int_update(ki);
e_kbd_int_show(ki);
}
static Eina_Bool
_il_ki_delay_cb(void *data EINA_UNUSED)
{
ki_delay_timer = NULL;
_il_kbd_start();
return EINA_FALSE;
}