From 76c4b4be9a5c47100862814203effd2ff1f84a47 Mon Sep 17 00:00:00 2001 From: Stafford Mitchell Horne Date: Thu, 30 Nov 2006 16:35:56 +0000 Subject: [PATCH] Start of input method configuration dialog * completed a basic dialog * need to do advanced (thinking of doing it like wallpaper..) SVN revision: 27290 --- src/bin/Makefile.am | 2 + src/bin/e_configure.c | 1 + src/bin/e_includes.h | 1 + src/bin/e_int_config_imc.c | 181 ++++++++++++++++++++++++++++++++++++ src/bin/e_int_config_imc.h | 12 +++ src/bin/e_int_config_intl.c | 4 +- 6 files changed, 200 insertions(+), 1 deletion(-) create mode 100644 src/bin/e_int_config_imc.c create mode 100644 src/bin/e_int_config_imc.h diff --git a/src/bin/Makefile.am b/src/bin/Makefile.am index 75d60c7a4..6bafc5067 100644 --- a/src/bin/Makefile.am +++ b/src/bin/Makefile.am @@ -99,6 +99,7 @@ e_config_dialog.h \ e_int_config_focus.h \ e_int_config_desks.h \ e_int_config_intl.h \ +e_int_config_imc.h \ e_configure.h \ e_int_border_locks.h \ e_thumb.h \ @@ -286,6 +287,7 @@ e_int_config_exebuf.c \ e_int_config_apps.c \ e_int_config_cfgdialogs.c \ e_int_config_intl.c \ +e_int_config_imc.c \ e_int_config_color_classes.c \ e_int_config_mime.c \ e_int_config_mime_edit.c \ diff --git a/src/bin/e_configure.c b/src/bin/e_configure.c index 5739082f4..699fca32c 100644 --- a/src/bin/e_configure.c +++ b/src/bin/e_configure.c @@ -425,6 +425,7 @@ _e_configure_fill_cat_list(void *data) cat = _e_configure_category_add(eco, _("Language"), "enlightenment/intl"); _e_configure_item_add(cat, _("Language Settings"), "enlightenment/intl", e_int_config_intl); + _e_configure_item_add(cat, _("Input Method Settings"), "enlightenment/imc", e_int_config_imc); cat = _e_configure_category_add(eco, _("Miscellaneous"), "enlightenment/misc"); _e_configure_item_add(cat, _("Configuration Dialogs"), "enlightenment/configuration", e_int_config_cfgdialogs); diff --git a/src/bin/e_includes.h b/src/bin/e_includes.h index 9f37a7084..1b9ef07ac 100644 --- a/src/bin/e_includes.h +++ b/src/bin/e_includes.h @@ -105,6 +105,7 @@ #include "e_int_config_apps.h" #include "e_int_config_cfgdialogs.h" #include "e_int_config_intl.h" +#include "e_int_config_imc.h" #include "e_int_config_color_classes.h" #include "e_int_config_mime.h" #include "e_int_config_mime_edit.h" diff --git a/src/bin/e_int_config_imc.c b/src/bin/e_int_config_imc.c new file mode 100644 index 000000000..538ef6e94 --- /dev/null +++ b/src/bin/e_int_config_imc.c @@ -0,0 +1,181 @@ +/* + * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2 + */ +#include "e.h" + +static void *_create_data (E_Config_Dialog *cfd); +static void _free_data (E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata); +static int _basic_apply_data (E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata); +static Evas_Object *_basic_create_widgets (E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata); + +static int _basic_list_sort_cb (void *d1, void *d2); + +struct _E_Config_Dialog_Data +{ + E_Config_Dialog *cfd; + + /* Current data */ + char *imc_current; + + Evas_List *imc_basic_list; + + struct + { + Evas_Object *imc_basic_list; + } + gui; +}; + +EAPI E_Config_Dialog * +e_int_config_imc(E_Container *con) +{ + E_Config_Dialog *cfd; + E_Config_Dialog_View *v; + + if (e_config_dialog_find("E", "_config_imc_dialog")) return NULL; + v = E_NEW(E_Config_Dialog_View, 1); + + v->create_cfdata = _create_data; + v->free_cfdata = _free_data; + v->advanced.create_widgets = NULL; + v->advanced.apply_cfdata = NULL; + v->basic.create_widgets = _basic_create_widgets; + v->basic.apply_cfdata = _basic_apply_data; + + cfd = e_config_dialog_new(con, + _("Input Method Configuration"), + "E", "_config_imc_dialog", + "enlightenment/imc", 0, v, NULL); + return cfd; +} + +static void +_fill_data(E_Config_Dialog_Data *cfdata) +{ + cfdata->imc_basic_list = e_intl_input_method_list(); + + /* Sort basic input method list */ + cfdata->imc_basic_list = evas_list_sort(cfdata->imc_basic_list, + evas_list_count(cfdata->imc_basic_list), + _basic_list_sort_cb); + + cfdata->imc_current = strdup(e_config->input_method); + + return; +} + +static void * +_create_data(E_Config_Dialog *cfd) +{ + E_Config_Dialog_Data *cfdata; + + cfdata = E_NEW(E_Config_Dialog_Data, 1); + cfdata->cfd = cfd; + _fill_data(cfdata); + return cfdata; +} + +static void +_free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) +{ + + E_FREE(cfdata->imc_current); + + while (cfdata->imc_basic_list) { + free(cfdata->imc_basic_list->data); + cfdata->imc_basic_list = evas_list_remove_list(cfdata->imc_basic_list, cfdata->imc_basic_list); + } + + free(cfdata); +} + +static int +_basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) +{ + printf("Setting input method to %s\n", cfdata->imc_current); + if (cfdata->imc_current) + { + if (e_config->input_method) evas_stringshare_del(e_config->input_method); + e_config->input_method = evas_stringshare_add(cfdata->imc_current); + e_intl_input_method_set(e_config->input_method); + } + + e_config_save_queue(); + + return 1; +} + +static int +_advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) +{ + if (cfdata->imc_current) + { + if (e_config->input_method) evas_stringshare_del(e_config->input_method); + e_config->input_method = evas_stringshare_add(cfdata->imc_current); + e_intl_input_method_set(e_config->input_method); + } + + e_config_save_queue(); + + return 1; +} + +static Evas_Object * +_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata) +{ + Evas_Object *o, *of, *ob; + int i; + Evas_List *next; + + o = e_widget_list_add(evas, 0, 0); + + of = e_widget_frametable_add(evas, _("Input Method Selector"), 1); + + /* Language List */ + ob = e_widget_ilist_add(evas, 16, 16, &(cfdata->imc_current)); + e_widget_min_size_set(ob, 175, 175); + cfdata->gui.imc_basic_list = ob; + + evas_event_freeze(evas_object_evas_get(ob)); + edje_freeze(); + e_widget_ilist_freeze(ob); + + i = 0; + for (next = cfdata->imc_basic_list; next; next = next->next) + { + const char * imc; + + imc = next->data; + + e_widget_ilist_append(cfdata->gui.imc_basic_list, NULL, imc, NULL, NULL, imc); + if (cfdata->imc_current && !strncmp(imc, cfdata->imc_current, strlen(cfdata->imc_current))) + e_widget_ilist_selected_set(cfdata->gui.imc_basic_list, i); + + i++; + } + + e_widget_ilist_go(ob); + e_widget_ilist_thaw(ob); + edje_thaw(); + evas_event_thaw(evas_object_evas_get(ob)); + + e_widget_frametable_object_append(of, ob, 0, 0, 2, 6, 1, 1, 1, 1); + e_widget_ilist_selected_set(ob, e_widget_ilist_selected_get(ob)); + + e_widget_framelist_content_align_set(of, 0.0, 0.0); + + e_widget_list_object_append(o, of, 1, 1, 0.5); + + e_dialog_resizable_set(cfd->dia, 1); + return o; + +} + +static int +_basic_list_sort_cb(void *d1, void *d2) +{ + if (!d1) return 1; + if (!d2) return -1; + + return (strcmp((const char*)d1, (const char*)d2)); +} diff --git a/src/bin/e_int_config_imc.h b/src/bin/e_int_config_imc.h new file mode 100644 index 000000000..d33da3ae4 --- /dev/null +++ b/src/bin/e_int_config_imc.h @@ -0,0 +1,12 @@ +/* + * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2 + */ +#ifdef E_TYPEDEFS +#else +#ifndef E_INT_CONFIG_IMC_H +#define E_INT_CONFIG_IMC_H + +EAPI E_Config_Dialog *e_int_config_imc(E_Container *con); + +#endif +#endif diff --git a/src/bin/e_int_config_intl.c b/src/bin/e_int_config_intl.c index 8ceebbaf1..316762654 100644 --- a/src/bin/e_int_config_intl.c +++ b/src/bin/e_int_config_intl.c @@ -855,6 +855,7 @@ _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) { if (cfdata->cur_language) { + if (e_config->language) evas_stringshare_del(e_config->language); e_config->language = evas_stringshare_add(cfdata->cur_language); e_intl_language_set(e_config->language); } @@ -868,7 +869,8 @@ static int _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) { if (cfdata->cur_language) - { + { + if (e_config->language) evas_stringshare_del(e_config->language); e_config->language = evas_stringshare_add(cfdata->cur_language); e_intl_language_set(e_config->language); }