2 #include "e_mod_main.h"
3 #include "e_mod_config.h"
5 /* local function prototypes */
6 static void *_il_kbd_config_create(E_Config_Dialog *cfd);
7 static void _il_kbd_config_free(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
8 static Evas_Object *_il_kbd_config_ui(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata);
9 static void _il_kbd_config_changed(void *data, Evas_Object *obj, void *event);
10 static Eina_Bool _il_kbd_config_change_timeout(void *data);
12 EAPI Il_Kbd_Config *il_kbd_cfg = NULL;
13 static E_Config_DD *conf_edd = NULL;
14 Ecore_Timer *_il_kbd_config_change_timer = NULL;
17 /* public functions */
19 il_kbd_config_init(E_Module *m)
23 conf_edd = E_CONFIG_DD_NEW("Illume_Kbd_Cfg", Il_Kbd_Config);
26 #define T Il_Kbd_Config
28 E_CONFIG_VAL(D, T, version, INT);
29 E_CONFIG_VAL(D, T, use_internal, INT);
30 E_CONFIG_VAL(D, T, run_keyboard, STR);
31 E_CONFIG_VAL(D, T, dict, STR);
33 il_kbd_cfg = e_config_domain_load("module.illume-keyboard", conf_edd);
35 ((il_kbd_cfg->version >> 16) < IL_CONFIG_MAJ))
42 il_kbd_cfg = E_NEW(Il_Kbd_Config, 1);
43 il_kbd_cfg->version = 0;
44 il_kbd_cfg->use_internal = 1;
45 il_kbd_cfg->run_keyboard = NULL;
46 il_kbd_cfg->dict = eina_stringshare_add("English_(US).dic");
50 /* Add new config variables here */
51 /* if ((il_kbd_cfg->version & 0xffff) < 1) */
52 il_kbd_cfg->version = (IL_CONFIG_MAJ << 16) | IL_CONFIG_MIN;
55 il_kbd_cfg->mod_dir = eina_stringshare_add(m->dir);
57 snprintf(buff, sizeof(buff), "%s/e-module-illume-keyboard.edj",
59 e_configure_registry_category_add("illume", 0, _("Illume"), NULL,
60 "enlightenment/display");
61 e_configure_registry_generic_item_add("illume/keyboard", 0, _("Keyboard"),
62 buff, "icon", il_kbd_config_show);
67 il_kbd_config_shutdown(void)
69 il_kbd_cfg->cfd = NULL;
71 e_configure_registry_item_del("illume/keyboard");
72 e_configure_registry_category_del("illume");
74 if (il_kbd_cfg->mod_dir) eina_stringshare_del(il_kbd_cfg->mod_dir);
75 if (il_kbd_cfg->run_keyboard) eina_stringshare_del(il_kbd_cfg->run_keyboard);
76 if (il_kbd_cfg->dict) eina_stringshare_del(il_kbd_cfg->dict);
81 E_CONFIG_DD_FREE(conf_edd);
86 il_kbd_config_save(void)
88 e_config_domain_save("module.illume-keyboard", conf_edd, il_kbd_cfg);
93 il_kbd_config_show(E_Container *con, const char *params __UNUSED__)
96 E_Config_Dialog_View *v;
98 if (e_config_dialog_find("E", "_config_illume_keyboard_settings")) return;
100 v = E_NEW(E_Config_Dialog_View, 1);
101 v->create_cfdata = _il_kbd_config_create;
102 v->free_cfdata = _il_kbd_config_free;
103 v->basic.create_widgets = _il_kbd_config_ui;
108 cfd = e_config_dialog_new(con, _("Keyboard Settings"), "E",
109 "_config_illume_keyboard_settings",
110 "enlightenment/keyboard_settings", 0, v, NULL);
111 e_dialog_resizable_set(cfd->dia, 1);
112 il_kbd_cfg->cfd = cfd;
115 /* local function prototypes */
117 _il_kbd_config_create(E_Config_Dialog *cfd __UNUSED__)
123 _il_kbd_config_free(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata __UNUSED__)
125 il_kbd_cfg->cfd = NULL;
129 _il_kbd_config_ui(E_Config_Dialog *cfd __UNUSED__, Evas *evas, E_Config_Dialog_Data *cfdata __UNUSED__)
131 Evas_Object *list, *of, *ow;
135 list = e_widget_list_add(evas, 0, 0);
136 if (!il_kbd_cfg->run_keyboard)
138 if (il_kbd_cfg->use_internal) kbd_external = 1;
139 else kbd_external = 0;
144 Efreet_Desktop *desktop;
148 kbds = efreet_util_desktop_category_list("Keyboard");
152 EINA_LIST_FOREACH(kbds, l, desktop)
156 dname = ecore_file_file_get(desktop->orig_path);
159 if (!strcmp(il_kbd_cfg->run_keyboard, dname))
167 EINA_LIST_FREE(kbds, desktop)
168 efreet_desktop_free(desktop);
172 of = e_widget_framelist_add(evas, _("Keyboards"), 0);
173 rg = e_widget_radio_group_new(&(kbd_external));
174 ow = e_widget_radio_add(evas, _("None"), 0, rg);
175 e_widget_framelist_object_append(of, ow);
176 evas_object_smart_callback_add(ow, "changed", _il_kbd_config_changed, NULL);
177 ow = e_widget_radio_add(evas, _("Default"), 1, rg);
178 e_widget_framelist_object_append(of, ow);
179 evas_object_smart_callback_add(ow, "changed", _il_kbd_config_changed, NULL);
182 Efreet_Desktop *desktop;
185 kbds = efreet_util_desktop_category_list("Keyboard");
186 EINA_LIST_FREE(kbds, desktop)
188 ow = e_widget_radio_add(evas, desktop->name, nn, rg);
189 e_widget_framelist_object_append(of, ow);
190 evas_object_smart_callback_add(ow, "changed",
191 _il_kbd_config_changed, NULL);
192 efreet_desktop_free(desktop);
196 e_widget_list_object_append(list, of, 1, 0, 0.0);
201 _il_kbd_config_changed(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
203 if (_il_kbd_config_change_timer)
204 ecore_timer_del(_il_kbd_config_change_timer);
205 _il_kbd_config_change_timer =
206 ecore_timer_add(0.5, _il_kbd_config_change_timeout, data);
210 _il_kbd_config_change_timeout(void *data __UNUSED__)
214 il_kbd_cfg->use_internal = 0;
215 if (il_kbd_cfg->run_keyboard)
216 eina_stringshare_del(il_kbd_cfg->run_keyboard);
217 il_kbd_cfg->run_keyboard = NULL;
218 if (kbd_external == 0)
219 il_kbd_cfg->use_internal = 0;
220 else if (kbd_external == 1)
221 il_kbd_cfg->use_internal = 1;
225 Efreet_Desktop *desktop;
228 kbds = efreet_util_desktop_category_list("Keyboard");
232 EINA_LIST_FOREACH(kbds, l, desktop)
236 dname = ecore_file_file_get(desktop->orig_path);
237 if (nn == kbd_external)
240 il_kbd_cfg->run_keyboard = eina_stringshare_add(dname);
245 EINA_LIST_FREE(kbds, desktop)
246 efreet_desktop_free(desktop);
251 e_config_save_queue();
252 _il_kbd_config_change_timer = NULL;
253 return ECORE_CALLBACK_CANCEL;