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
This commit is contained in:
Stafford Mitchell Horne 2007-01-27 05:30:33 +00:00
parent 81a98e1708
commit ae453dc42a
5 changed files with 215 additions and 48 deletions

View File

@ -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 = \

View File

@ -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)

View File

@ -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:<br>"
"<br>"
"%s<br>"),
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:<br>"
"<br>"
"%s<br>"),
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;
}

View File

@ -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);
}
}

View File

@ -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