From ae453dc42aa4beeaf46418dd28ea7d4fa38e4532 Mon Sep 17 00:00:00 2001 From: Stafford Mitchell Horne Date: Sat, 27 Jan 2007 05:30:33 +0000 Subject: [PATCH] Update IMC changes which have been sitting around * Icon is available for IMCs with setup_exec * Setup options available * Disable IMC available SVN revision: 28130 --- src/bin/Makefile.am | 6 +- src/bin/e_int_config_fonts.c | 2 +- src/bin/e_int_config_imc.c | 239 +++++++++++++++++++++++++++++------ src/bin/e_intl.c | 3 +- src/bin/e_intl.h | 13 +- 5 files changed, 215 insertions(+), 48 deletions(-) diff --git a/src/bin/Makefile.am b/src/bin/Makefile.am index 70d3ba7f7..15b1ff2cb 100644 --- a/src/bin/Makefile.am +++ b/src/bin/Makefile.am @@ -367,10 +367,10 @@ e_start_main.c enlightenment_start_LDFLAGS = @dlopen_libs@ enlightenment_thumb_SOURCES = \ +e.h \ e_thumb_main.c \ -e_sha1.c \ -e_sha1.h - +$(enlightenment_src) + enlightenment_thumb_LDFLAGS = @e_libs@ @dlopen_libs@ enlightenment_sys_SOURCES = \ diff --git a/src/bin/e_int_config_fonts.c b/src/bin/e_int_config_fonts.c index dd2551847..4a5842a42 100644 --- a/src/bin/e_int_config_fonts.c +++ b/src/bin/e_int_config_fonts.c @@ -323,7 +323,7 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cf char *f; f = fonts->data; - if (strstr(f, ":")) continue; +// if (strstr(f, ":")) continue; l = evas_list_append(l, strdup(f)); } if (l) diff --git a/src/bin/e_int_config_imc.c b/src/bin/e_int_config_imc.c index d0d2ea77f..9765329c2 100644 --- a/src/bin/e_int_config_imc.c +++ b/src/bin/e_int_config_imc.c @@ -16,6 +16,7 @@ static Evas_Object *_advanced_create_widgets (E_Config_Dialog *cfd, Evas *evas, static int _basic_list_sort_cb (void *d1, void *d2); static void _e_imc_disable_change_cb (void *data, Evas_Object *obj); static void _e_imc_list_change_cb (void *data, Evas_Object *obj); +static void _e_imc_setup_cb (void *data, void *data2); /* Advanced Callbacks */ static void _cb_dir (void *data, Evas_Object *obj); @@ -27,6 +28,7 @@ static void _cb_files_selection_change(void *data, Evas_Object *obj, voi static void _cb_files_files_changed (void *data, Evas_Object *obj, void *event_info); static void _cb_files_selected (void *data, Evas_Object *obj, void *event_info); static void _cb_files_files_deleted (void *data, Evas_Object *obj, void *event_info); +static void _e_imc_adv_setup_cb (void *data, void *data2); static void _e_imc_change_enqueue (E_Config_Dialog_Data *cfdata); static void _e_imc_entry_change_cb (void *data, Evas_Object *obj); @@ -47,13 +49,17 @@ struct _E_Config_Dialog_Data Evas_Object *o_frame; /* scrollpane for file manager*/ char *imc_current; + Evas_Hash *imc_basic_map; + int imc_disable; /* 0=enable, 1=disable */ int fmdir; /* 0=Local, 1=System*/ struct { int dirty; char *e_im_name; - char *e_im_exec; + char *e_im_exec; + char *e_im_setup_exec; + char *gtk_im_module; char *qt_im_module; char *xmodifiers; @@ -65,8 +71,14 @@ struct _E_Config_Dialog_Data { Evas_Object *imc_basic_list; Evas_Object *imc_basic_disable; + Evas_Object *imc_basic_setup; + + Evas_Object *imc_advanced_disable; + Evas_Object *imc_advanced_setup; + Evas_Object *e_im_name; Evas_Object *e_im_exec; + Evas_Object *e_im_setup_exec; Evas_Object *gtk_im_module; Evas_Object *qt_im_module; Evas_Object *xmodifiers; @@ -144,7 +156,13 @@ _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) if (cfdata->win_import) e_int_config_imc_import_del(cfdata->win_import); E_FREE(cfdata->imc_current); - + + if (cfdata->imc_basic_map) + { + evas_hash_foreach(cfdata->imc_basic_map, _change_hash_free_cb, NULL); + evas_hash_free(cfdata->imc_basic_map); + } + if (cfdata->imc_change_map) { evas_hash_foreach(cfdata->imc_change_map, _change_hash_free_cb, NULL); @@ -154,6 +172,7 @@ _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) E_FREE(cfdata->imc.e_im_name); E_FREE(cfdata->imc.e_im_exec); + E_FREE(cfdata->imc.e_im_setup_exec); E_FREE(cfdata->imc.gtk_im_module); E_FREE(cfdata->imc.qt_im_module); E_FREE(cfdata->imc.xmodifiers); @@ -199,13 +218,73 @@ _e_imc_disable_change_cb(void *data, Evas_Object *obj) cfdata = data; } +void +_e_imc_setup_button_toggle(Evas_Object *button, E_Input_Method_Config *imc) +{ + if (imc) + { + int flag; + + flag = ( imc->e_im_setup_exec == NULL ) || + ( imc->e_im_setup_exec[0] == 0 ); + e_widget_disabled_set(button, flag); + } + else + { + e_widget_disabled_set(button, 1); + } + +} + static void _e_imc_list_change_cb(void *data, Evas_Object *obj) { E_Config_Dialog_Data *cfdata; + E_Input_Method_Config *imc; cfdata = data; e_widget_check_checked_set(cfdata->gui.imc_basic_disable, 0); + + if (cfdata->imc_current) + { + imc = evas_hash_find(cfdata->imc_basic_map, cfdata->imc_current); + _e_imc_setup_button_toggle(cfdata->gui.imc_basic_setup, imc); + } +} + +static void +_e_imc_setup_cb(void *data, void *data2) +{ + E_Config_Dialog_Data *cfdata; + + cfdata = data; + if (cfdata->imc_current && cfdata->imc_basic_map) + { + E_Input_Method_Config *imc; + + imc = evas_hash_find(cfdata->imc_basic_map, cfdata->imc_current); + + if (imc && imc->e_im_setup_exec) + { + Ecore_Exe *exe; + char *cmd; + + cmd = imc->e_im_setup_exec; + + e_util_library_path_strip(); + exe = ecore_exe_run(cmd, NULL); + e_util_library_path_restore(); + + if (!exe) + { + e_util_dialog_show(_("Run Error"), + _( "Enlightenment was unable to fork a child process:
" + "
" + "%s
"), + cmd); + } + } + } } static Evas_Object * @@ -219,15 +298,16 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cf of = e_widget_frametable_add(evas, _("Input Method Selector"), 1); - /* Disable everything checkbox */ - ob = e_widget_check_add(evas, _("Use no Input Method"), &(cfdata->imc_disable)); - e_widget_disabled_set(ob, 0); - e_widget_on_change_hook_set(ob, _e_imc_disable_change_cb, cfdata); - e_widget_check_checked_set(ob, cfdata->imc_disable); - e_widget_change(ob); - cfdata->gui.imc_basic_disable = ob; - e_widget_frametable_object_append(of, ob, 0, 0, 2, 1, 1, 1, 1, 1); - + /* Disable imc checkbox */ + ob = e_widget_check_add(evas, _("Use No Input Method"), &(cfdata->imc_disable)); + cfdata->gui.imc_basic_disable = ob; + e_widget_frametable_object_append(of, ob, 0, 0, 2, 1, 1, 1, 1, 1); + + /* Configure imc button */ + ob = e_widget_button_add(evas, _("Setup Selected Input Method"), "widget/setup", _e_imc_setup_cb, cfdata, NULL); + cfdata->gui.imc_basic_setup = ob; + e_widget_frametable_object_append(of, ob, 0, 7, 2, 1, 1, 1, 1, 1); + /* Input method List */ ob = e_widget_ilist_add(evas, 16, 16, &(cfdata->imc_current)); e_widget_on_change_hook_set(ob, _e_imc_list_change_cb, cfdata); @@ -244,6 +324,13 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cf evas_list_count(imc_basic_list), _basic_list_sort_cb); + if (cfdata->imc_basic_map) + { + evas_hash_foreach(cfdata->imc_basic_map, _change_hash_free_cb, NULL); + evas_hash_free(cfdata->imc_basic_map); + cfdata->imc_basic_map = NULL; + } + i = 0; while(imc_basic_list) { @@ -260,17 +347,31 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cf if (imc && imc->e_im_name) { - e_widget_ilist_append(cfdata->gui.imc_basic_list, NULL, imc->e_im_name, NULL, NULL, imc_path); + Evas_Object *icon; + + icon = NULL; + if (imc->e_im_setup_exec) + { + E_App *eap; + eap = e_app_exe_find(imc->e_im_setup_exec); + if (eap) + icon = e_app_icon_add(eap, evas); + } + + e_widget_ilist_append(cfdata->gui.imc_basic_list, icon, imc->e_im_name, NULL, NULL, imc_path); if (cfdata->imc_current && !strncmp(imc_path, cfdata->imc_current, strlen(cfdata->imc_current))) e_widget_ilist_selected_set(cfdata->gui.imc_basic_list, i); i++; + + cfdata->imc_basic_map = evas_hash_add(cfdata->imc_basic_map, imc_path, imc); } - e_intl_input_method_config_free(imc); } free(imc_path); imc_basic_list = evas_list_remove_list(imc_basic_list, imc_basic_list); } - + + _e_imc_setup_button_toggle(cfdata->gui.imc_basic_setup, evas_hash_find(cfdata->imc_basic_map, cfdata->imc_current)); + e_widget_ilist_go(ob); e_widget_ilist_thaw(ob); edje_thaw(); @@ -292,28 +393,29 @@ _change_hash_apply_cb(Evas_Hash *hash, const char *key, void *data, void *fdata) Eet_File *ef; imc = data; - ef = eet_open(key, EET_FILE_MODE_WRITE); - if (ef) + + if (ecore_file_exists(key)) { - e_intl_input_method_config_write(ef, imc); - eet_close(ef); + ef = eet_open(key, EET_FILE_MODE_WRITE); + if (ef) + { + e_intl_input_method_config_write(ef, imc); + eet_close(ef); + } } + e_intl_input_method_config_free(imc); + 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(); + /* inherit basic apply functionality */ + _basic_apply_data(cfd, cfdata); + /* Save all file changes */ if (cfdata->imc_current) _e_imc_change_enqueue(cfdata); @@ -393,6 +495,35 @@ _cb_new(void *data, void *data2) } free(imc_new); } + +static void +_e_imc_adv_setup_cb(void *data, void *data2) +{ + E_Config_Dialog_Data *cfdata; + + cfdata = data; + if (cfdata->imc.e_im_setup_exec) + { + Ecore_Exe *exe; + char *cmd; + + cmd = cfdata->imc.e_im_setup_exec; + + e_util_library_path_strip(); + exe = ecore_exe_run(cmd, NULL); + e_util_library_path_restore(); + + if (!exe) + { + e_util_dialog_show(_("Run Error"), + _( "Enlightenment was unable to fork a child process:
" + "
" + "%s
"), + cmd); + } + } +} + /** End Button Callbacks **/ /** Start IMC FM2 Callbacks **/ @@ -537,7 +668,11 @@ _e_imc_form_fill(E_Config_Dialog_Data *cfdata) E_Input_Method_Config *imc; int imc_free; - if (!cfdata->imc_current) return; + if (!cfdata->imc_current) + { + e_widget_disabled_set(cfdata->gui.imc_advanced_setup, 1); + return; + } imc_free = 0; imc = evas_hash_find(cfdata->imc_change_map, cfdata->imc_current); @@ -552,22 +687,27 @@ _e_imc_form_fill(E_Config_Dialog_Data *cfdata) eet_close(imc_file); } } - + + _e_imc_setup_button_toggle(cfdata->gui.imc_advanced_setup, imc); + if (imc) { e_widget_entry_text_set(cfdata->gui.e_im_name, imc->e_im_name); e_widget_entry_text_set(cfdata->gui.e_im_exec, imc->e_im_exec); + e_widget_entry_text_set(cfdata->gui.e_im_setup_exec, imc->e_im_setup_exec); e_widget_entry_text_set(cfdata->gui.gtk_im_module, imc->gtk_im_module); e_widget_entry_text_set(cfdata->gui.qt_im_module, imc->qt_im_module); e_widget_entry_text_set(cfdata->gui.xmodifiers, imc->xmodifiers); e_widget_entry_readonly_set(cfdata->gui.e_im_name, cfdata->fmdir); e_widget_entry_readonly_set(cfdata->gui.e_im_exec, cfdata->fmdir); + e_widget_entry_readonly_set(cfdata->gui.e_im_setup_exec, cfdata->fmdir); e_widget_entry_readonly_set(cfdata->gui.gtk_im_module, cfdata->fmdir); e_widget_entry_readonly_set(cfdata->gui.qt_im_module, cfdata->fmdir); e_widget_entry_readonly_set(cfdata->gui.xmodifiers, cfdata->fmdir); if (imc_free) e_intl_input_method_config_free(imc); } + e_widget_check_checked_set(cfdata->gui.imc_advanced_disable, 0); cfdata->imc.dirty = 0; } @@ -585,17 +725,18 @@ _e_imc_change_enqueue(E_Config_Dialog_Data *cfdata) imc_update->version = E_INTL_INPUT_METHOD_CONFIG_VERSION; /* TODO: need to only add if the string is not empty */ - imc_update->e_im_name = evas_stringshare_add(cfdata->imc.e_im_name); - imc_update->e_im_exec = evas_stringshare_add(cfdata->imc.e_im_exec); - imc_update->gtk_im_module = evas_stringshare_add(cfdata->imc.gtk_im_module); - imc_update->qt_im_module = evas_stringshare_add(cfdata->imc.qt_im_module); - imc_update->xmodifiers = evas_stringshare_add(cfdata->imc.xmodifiers); + imc_update->e_im_name = (char *) evas_stringshare_add(cfdata->imc.e_im_name); + imc_update->e_im_exec = (char *) evas_stringshare_add(cfdata->imc.e_im_exec); + imc_update->e_im_setup_exec = (char *) evas_stringshare_add(cfdata->imc.e_im_setup_exec); + imc_update->gtk_im_module = (char *) evas_stringshare_add(cfdata->imc.gtk_im_module); + imc_update->qt_im_module = (char *) evas_stringshare_add(cfdata->imc.qt_im_module); + imc_update->xmodifiers = (char *) evas_stringshare_add(cfdata->imc.xmodifiers); /* look for changes to this file and remove them */ imc_update_old = evas_hash_find(cfdata->imc_change_map, cfdata->imc_current); if (imc_update_old) { - evas_hash_del(cfdata->imc_change_map, cfdata->imc_current, NULL); + cfdata->imc_change_map = evas_hash_del(cfdata->imc_change_map, cfdata->imc_current, NULL); e_intl_input_method_config_free(imc_update_old); } @@ -744,13 +885,24 @@ _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data e_widget_table_object_append(ot, ol, 0, 0, 1, 1, 1, 1, 1, 1); of = e_widget_list_add(evas, 0, 0); + + /* Disable imc checkbox */ + /* il( o[Check], ol( o[Button], o[Button] ) ) */ + il = e_widget_list_add(evas, 0, 1); + + o = e_widget_check_add(evas, _("Use No Input Method"), &(cfdata->imc_disable)); + e_widget_on_change_hook_set(o, _e_imc_disable_change_cb, cfdata); + cfdata->gui.imc_advanced_disable = o; + e_widget_list_object_append(il, o, 1, 0, 0.5); + ol = e_widget_list_add(evas, 1, 1); o = e_widget_button_add(evas, _("New"), "enlightenment/new", _cb_new, cfdata, NULL); e_widget_list_object_append(ol, o, 1, 0, 0.5); - o = e_widget_button_add(evas, _("Import..."), "enlightenment/import", _cb_import, cfdata, NULL); + o = e_widget_button_add(evas, _("Import..."), "enlightenment/imc", _cb_import, cfdata, NULL); e_widget_list_object_append(ol, o, 1, 0, 0.5); - e_widget_list_object_append(of, ol, 1, 0, 0.0); + e_widget_list_object_append(il, ol, 1, 0, 0.5); + e_widget_list_object_append(of, il, 1, 0, 0.0); ol = e_widget_frametable_add(evas, _("Input Method Parameters"), 1); @@ -767,6 +919,13 @@ _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data e_widget_on_change_hook_set(o, _e_imc_entry_change_cb, cfdata); cfdata->gui.e_im_exec = o; e_widget_frametable_object_append(ol, o, 1, 1, 1, 1, 1, 1, 1, 1); + + o = e_widget_label_add(evas, _("Setup Command")); + e_widget_frametable_object_append(ol, o, 0, 2, 1, 1, 1, 1, 1, 1); + o = e_widget_entry_add(evas, &(cfdata->imc.e_im_setup_exec)); + e_widget_on_change_hook_set(o, _e_imc_entry_change_cb, cfdata); + cfdata->gui.e_im_setup_exec = o; + e_widget_frametable_object_append(ol, o, 1, 2, 1, 1, 1, 1, 1, 1); e_widget_list_object_append(of, ol, 0, 1, 0.5); @@ -795,7 +954,13 @@ _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data e_widget_list_object_append(of, ol, 0, 1, 0.5); e_widget_table_object_append(ot, of, 1, 0, 1, 1, 1, 1, 1, 1); - e_dialog_resizable_set(cfd->dia, 1); + + o = e_widget_button_add(evas, _("Setup Selected Input Method"), "widget/setup", _e_imc_adv_setup_cb, cfdata, NULL); + e_widget_table_object_append(ot, o, 0, 1, 1, 1, 1, 1, 1, 1); + cfdata->gui.imc_advanced_setup = o; + + e_dialog_resizable_set(cfd->dia, 1); + _e_imc_form_fill(cfdata); return ot; } diff --git a/src/bin/e_intl.c b/src/bin/e_intl.c index 76f42d5b2..c41c33709 100644 --- a/src/bin/e_intl.c +++ b/src/bin/e_intl.c @@ -67,7 +67,7 @@ e_intl_init(void) E_CONFIG_VAL(_e_intl_input_method_config_edd, E_Input_Method_Config, qt_im_module, STR); E_CONFIG_VAL(_e_intl_input_method_config_edd, E_Input_Method_Config, xmodifiers, STR); E_CONFIG_VAL(_e_intl_input_method_config_edd, E_Input_Method_Config, e_im_exec, STR); - + E_CONFIG_VAL(_e_intl_input_method_config_edd, E_Input_Method_Config, e_im_setup_exec, STR); if ((s = getenv("LC_MESSAGES"))) _e_intl_orig_lc_messages = strdup(s); if ((s = getenv("LANGUAGE"))) _e_intl_orig_language = strdup(s); @@ -476,6 +476,7 @@ e_intl_input_method_config_free(E_Input_Method_Config *imc) if (imc->qt_im_module) evas_stringshare_del(imc->qt_im_module); if (imc->xmodifiers) evas_stringshare_del(imc->xmodifiers); if (imc->e_im_exec) evas_stringshare_del(imc->e_im_exec); + if (imc->e_im_setup_exec) evas_stringshare_del(imc->e_im_setup_exec); E_FREE(imc); } } diff --git a/src/bin/e_intl.h b/src/bin/e_intl.h index 94c9b4b17..aa71f67a5 100644 --- a/src/bin/e_intl.h +++ b/src/bin/e_intl.h @@ -20,7 +20,7 @@ typedef struct _E_Locale_Parts E_Locale_Parts; #define E_INTL_H #define E_INTL_LANGUAGE_PACK_VERSION 1 -#define E_INTL_INPUT_METHOD_CONFIG_VERSION 1 +#define E_INTL_INPUT_METHOD_CONFIG_VERSION 2 #define E_INTL_LOC_CODESET 1 << 0 #define E_INTL_LOC_REGION 1 << 1 @@ -39,11 +39,12 @@ struct _E_Language_Pack struct _E_Input_Method_Config { int version; - const char *e_im_name; - const char *gtk_im_module; - const char *qt_im_module; - const char *xmodifiers; - const char *e_im_exec; + char *e_im_name; + char *gtk_im_module; + char *qt_im_module; + char *xmodifiers; + char *e_im_exec; + char *e_im_setup_exec; }; struct _E_Locale_Parts