Enlightenment CVS committal Author : shorne Project : e17 Module : apps/e
Dir : e17/apps/e/src/bin Modified Files: Makefile.am e.h e_config.c e_config.h e_includes.h e_int_config_imc.c e_int_config_imc.h e_int_config_paths.c e_intl.c e_intl.h e_ipc_handlers.h e_main.c e_utils.c Added Files: e_int_config_imc_import.c e_int_config_imc_import.h Log Message: If finally go around to adding the advanced conf dialog for input methods. * Note: input methods are stored as full path now, meaning most people have to update their configs =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/Makefile.am,v retrieving revision 1.167 retrieving revision 1.168 diff -u -3 -r1.167 -r1.168 --- Makefile.am 4 Dec 2006 12:14:17 -0000 1.167 +++ Makefile.am 17 Dec 2006 11:24:59 -0000 1.168 @@ -100,6 +100,7 @@ e_int_config_desks.h \ e_int_config_intl.h \ e_int_config_imc.h \ +e_int_config_imc_import.h \ e_configure.h \ e_int_border_locks.h \ e_thumb.h \ @@ -289,6 +290,7 @@ e_int_config_cfgdialogs.c \ e_int_config_intl.c \ e_int_config_imc.c \ +e_int_config_imc_import.c \ e_int_config_color_classes.c \ e_int_config_mime.c \ e_int_config_mime_edit.c \ =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e.h,v retrieving revision 1.54 retrieving revision 1.55 diff -u -3 -r1.54 -r1.55 --- e.h 16 Dec 2006 08:27:45 -0000 1.54 +++ e.h 17 Dec 2006 11:24:59 -0000 1.55 @@ -148,7 +148,6 @@ extern EAPI E_Path *path_init; extern EAPI E_Path *path_modules; extern EAPI E_Path *path_backgrounds; -extern EAPI E_Path *path_input_methods; extern EAPI E_Path *path_messages; extern EAPI int restart; extern EAPI int good; =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_config.c,v retrieving revision 1.217 retrieving revision 1.218 diff -u -3 -r1.217 -r1.218 --- e_config.c 16 Dec 2006 21:28:46 -0000 1.217 +++ e_config.c 17 Dec 2006 11:24:59 -0000 1.218 @@ -448,7 +448,6 @@ E_CONFIG_VAL(D, T, menu_eap_comment_show, INT); /**/ E_CONFIG_VAL(D, T, fullscreen_policy, INT); /**/ E_CONFIG_VAL(D, T, input_method, STR); /**/ - E_CONFIG_LIST(D, T, path_append_input_methods, _e_config_path_append_edd); /**/ E_CONFIG_LIST(D, T, path_append_messages, _e_config_path_append_edd); /**/ E_CONFIG_VAL(D, T, exebuf_max_exe_list, INT); E_CONFIG_VAL(D, T, exebuf_max_eap_list, INT); @@ -1917,14 +1916,6 @@ E_Path_Dir *epd; epd = e_config->path_append_backgrounds->data; e_config->path_append_backgrounds = evas_list_remove_list(e_config->path_append_backgrounds, e_config->path_append_backgrounds); - if (epd->dir) evas_stringshare_del(epd->dir); - E_FREE(epd); - } - while (e_config->path_append_input_methods) - { - E_Path_Dir *epd; - epd = e_config->path_append_input_methods->data; - e_config->path_append_input_methods = evas_list_remove_list(e_config->path_append_input_methods, e_config->path_append_input_methods); if (epd->dir) evas_stringshare_del(epd->dir); E_FREE(epd); } =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_config.h,v retrieving revision 1.134 retrieving revision 1.135 diff -u -3 -r1.134 -r1.135 --- e_config.h 17 Dec 2006 02:10:24 -0000 1.134 +++ e_config.h 17 Dec 2006 11:24:59 -0000 1.135 @@ -49,7 +49,7 @@ */ #define E_CONFIG_FILE_EPOCH 0x0001 /* increment this whenever a new set of config values are added but the users - * config doesn't need top be wiped - simply new values need to be put in + * config doesn't need to be wiped - simply new values need to be put in */ #define E_CONFIG_FILE_GENERATION 0x0105 #define E_CONFIG_FILE_VERSION ((E_CONFIG_FILE_EPOCH << 16) | E_CONFIG_FILE_GENERATION) @@ -127,7 +127,6 @@ Evas_List *path_append_icons; // GUI Evas_List *path_append_modules; // GUI Evas_List *path_append_backgrounds; // GUI - Evas_List *path_append_input_methods; // GUI Evas_List *path_append_messages; // GUI int window_placement_policy; // GUI int focus_policy; // GUI =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_includes.h,v retrieving revision 1.143 retrieving revision 1.144 diff -u -3 -r1.143 -r1.144 --- e_includes.h 4 Dec 2006 12:14:17 -0000 1.143 +++ e_includes.h 17 Dec 2006 11:24:59 -0000 1.144 @@ -106,6 +106,7 @@ #include "e_int_config_cfgdialogs.h" #include "e_int_config_intl.h" #include "e_int_config_imc.h" +#include "e_int_config_imc_import.h" #include "e_int_config_color_classes.h" #include "e_int_config_mime.h" #include "e_int_config_mime_edit.h" =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_int_config_imc.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- e_int_config_imc.c 30 Nov 2006 23:51:37 -0000 1.3 +++ e_int_config_imc.c 17 Dec 2006 11:24:59 -0000 1.4 @@ -3,27 +3,80 @@ */ #include "e.h" +typedef struct _E_Imc_Update_Data E_Imc_Update_Data; + 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 int _advanced_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 Evas_Object *_advanced_create_widgets (E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata); +/* Basic Callbacks */ static int _basic_list_sort_cb (void *d1, void *d2); +/* Advanced Callbacks */ +static void _cb_dir (void *data, Evas_Object *obj); +static void _cb_button_up (void *data1, void *data2); +static void _cb_new (void *data, void *data2); + +static void _cb_files_changed (void *data, Evas_Object *obj, void *event_info); +static void _cb_files_selection_change(void *data, Evas_Object *obj, void *event_info); +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_change_enqueue (E_Config_Dialog_Data *cfdata); +static void _e_imc_entry_change_cb (void *data, Evas_Object *obj); +static void _e_imc_form_fill (E_Config_Dialog_Data *cfdata); +static const char* _e_imc_file_name_new_get (void); +static Evas_Bool _change_hash_free_cb (Evas_Hash *hash, const char *key, void *data, void *fdata); +static Evas_Bool _change_hash_apply_cb (Evas_Hash *hash, const char *key, void *data, void *fdata); + + struct _E_Config_Dialog_Data { E_Config_Dialog *cfd; + + /* Maluable Widgets */ + Evas_Object *o_personal; + Evas_Object *o_system; + Evas_Object *o_up_button; + + Evas_Object *o_fm; /* File manager */ + Evas_Object *o_frame; /* scrollpane for file manager*/ - /* Current data */ char *imc_current; - Evas_List *imc_basic_list; + int fmdir; /* 0=Local, 1=System*/ + struct + { + int dirty; + + char *e_im_name; + char *e_im_exec; + + char *gtk_im_module; + char *qt_im_module; + char *xmodifiers; + } + imc; + + Evas_Hash *imc_change_map; struct { Evas_Object *imc_basic_list; + + Evas_Object *e_im_name; + Evas_Object *e_im_exec; + Evas_Object *gtk_im_module; + Evas_Object *qt_im_module; + Evas_Object *xmodifiers; } gui; + + E_Win *win_import; }; EAPI E_Config_Dialog * @@ -37,8 +90,8 @@ v->create_cfdata = _create_data; v->free_cfdata = _free_data; - v->advanced.create_widgets = NULL; - v->advanced.apply_cfdata = NULL; + v->advanced.create_widgets = _advanced_create_widgets; + v->advanced.apply_cfdata = _advanced_apply_data; v->basic.create_widgets = _basic_create_widgets; v->basic.apply_cfdata = _basic_apply_data; @@ -52,15 +105,19 @@ 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); - if (e_config->input_method) cfdata->imc_current = strdup(e_config->input_method); + + if (cfdata->imc_current) + { + const char *path; + + path = e_intl_imc_system_path_get(); + if(!strncmp(cfdata->imc_current, path, strlen(path))) + { + cfdata->fmdir = 1; + } + } } static void * @@ -74,19 +131,41 @@ return cfdata; } +static Evas_Bool +_change_hash_free_cb(Evas_Hash *hash, const char *key, void *data, void *fdata) +{ + E_Input_Method_Config *imc; + + imc = data; + e_intl_input_method_config_free(imc); + + return 1; +} + static void _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); - - 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); + + if (cfdata->imc_change_map) + { + evas_hash_foreach(cfdata->imc_change_map, _change_hash_free_cb, NULL); + evas_hash_free(cfdata->imc_change_map); } - + cfdata->imc_change_map = NULL; + + E_FREE(cfdata->imc.e_im_name); + E_FREE(cfdata->imc.e_im_exec); + E_FREE(cfdata->imc.gtk_im_module); + E_FREE(cfdata->imc.qt_im_module); + E_FREE(cfdata->imc.xmodifiers); + free(cfdata); -} +} + +/*** Start Basic Dialog Logic ***/ static int _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) @@ -104,18 +183,12 @@ } 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(); +_basic_list_sort_cb(void *d1, void *d2) +{ + if (!d1) return 1; + if (!d2) return -1; - return 1; + return (strcmp((const char*)d1, (const char*)d2)); } static Evas_Object * @@ -123,13 +196,13 @@ { Evas_Object *o, *of, *ob; int i; - Evas_List *next; + Evas_List *imc_basic_list; o = e_widget_list_add(evas, 0, 0); of = e_widget_frametable_add(evas, _("Input Method Selector"), 1); - /* Language List */ + /* Input method 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; @@ -138,18 +211,37 @@ edje_freeze(); e_widget_ilist_freeze(ob); + imc_basic_list = e_intl_input_method_list(); + /* Sort basic input method list */ + imc_basic_list = evas_list_sort(imc_basic_list, + evas_list_count(imc_basic_list), + _basic_list_sort_cb); + i = 0; - for (next = cfdata->imc_basic_list; next; next = next->next) + while(imc_basic_list) { - 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); + E_Input_Method_Config *imc; + Eet_File *imc_ef; + char *imc_path; + + imc_path = imc_basic_list->data; + imc_ef = eet_open(imc_path, EET_FILE_MODE_READ); + if (imc_ef) + { + imc = e_intl_input_method_config_read(imc_ef); + eet_close(imc_ef); - i++; + if (imc && imc->e_im_name) + { + e_widget_ilist_append(cfdata->gui.imc_basic_list, NULL, 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++; + } + e_intl_input_method_config_free(imc); + } + free(imc_path); + imc_basic_list = evas_list_remove_list(imc_basic_list, imc_basic_list); } e_widget_ilist_go(ob); @@ -168,11 +260,537 @@ return o; } +/*** End Basic Dialog Logic ***/ + +/*** Start Advanced Dialog Logic ***/ + +static Evas_Bool +_change_hash_apply_cb(Evas_Hash *hash, const char *key, void *data, void *fdata) +{ + E_Input_Method_Config *imc; + Eet_File *ef; + + imc = data; + 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 -_basic_list_sort_cb(void *d1, void *d2) +_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(); + + if (cfdata->imc_current) + { + _e_imc_change_enqueue(cfdata); + } + + if (cfdata->imc_change_map) + { + evas_hash_foreach(cfdata->imc_change_map, _change_hash_apply_cb, NULL); + evas_hash_free(cfdata->imc_change_map); + } + cfdata->imc_change_map = NULL; + + return 1; +} + +/** Start Button Callbacks **/ + +/* Radio Toggled */ +static void +_cb_dir(void *data, Evas_Object *obj) { - if (!d1) return 1; - if (!d2) return -1; + E_Config_Dialog_Data *cfdata; + const char *path; - return (strcmp((const char*)d1, (const char*)d2)); + cfdata = data; + if (cfdata->fmdir == 1) + { + path = e_intl_imc_system_path_get(); + } + else + { + path = e_intl_imc_personal_path_get(); + } + e_fm2_path_set(cfdata->o_fm, path, "/"); +} + +/* Directory Navigator */ +static void +_cb_button_up(void *data, void *data2) +{ + E_Config_Dialog_Data *cfdata; + + cfdata = data; + if (cfdata->o_fm) + e_fm2_parent_go(cfdata->o_fm); + if (cfdata->o_frame) + e_widget_scrollframe_child_pos_set(cfdata->o_frame, 0, 0); +} + +/* Entry chagned */ +static void +_e_imc_entry_change_cb(void *data, Evas_Object *obj) +{ + E_Config_Dialog_Data *cfdata; + + cfdata = data; + cfdata->imc.dirty = 1; +} + +/* Creating a new IMC */ +static void +_cb_new(void *data, void *data2) +{ + E_Input_Method_Config *imc_new; + Eet_File *ef; + const char *file; + E_Config_Dialog_Data *cfdata; + + cfdata = data; + imc_new = E_NEW(E_Input_Method_Config, 1); + imc_new->version = E_INTL_INPUT_METHOD_CONFIG_VERSION; + + file = _e_imc_file_name_new_get(); + + if (file) + { + ef = eet_open(file, EET_FILE_MODE_WRITE); + if (ef) + { + e_intl_input_method_config_write(ef, imc_new); + eet_close(ef); + e_int_config_imc_update(cfdata->cfd, file); + } + } + free(imc_new); +} +/** End Button Callbacks **/ + +/** Start IMC FM2 Callbacks **/ +static void +_cb_files_changed(void *data, Evas_Object *obj, void *event_info) +{ + E_Config_Dialog_Data *cfdata; + + cfdata = data; + if (!cfdata->o_fm) return; + if (!e_fm2_has_parent_get(cfdata->o_fm)) + { + if (cfdata->o_up_button) + e_widget_disabled_set(cfdata->o_up_button, 1); + } + else + { + if (cfdata->o_up_button) + e_widget_disabled_set(cfdata->o_up_button, 0); + } + if (cfdata->o_frame) + e_widget_scrollframe_child_pos_set(cfdata->o_frame, 0, 0); +} + +static void +_cb_files_selection_change(void *data, Evas_Object *obj, void *event_info) +{ + E_Config_Dialog_Data *cfdata; + Evas_List *selected; + E_Fm2_Icon_Info *ici; + const char *realpath; + char buf[4096]; + + cfdata = data; + if (!cfdata->o_fm) return; + selected = e_fm2_selected_list_get(cfdata->o_fm); + if (!selected) return; + + if (cfdata->imc_current) + { + _e_imc_change_enqueue(cfdata); + free(cfdata->imc_current); + cfdata->imc_current = NULL; + } + + ici = selected->data; + realpath = e_fm2_real_path_get(cfdata->o_fm); + if (!strcmp(realpath, "/")) + snprintf(buf, sizeof(buf), "/%s", ici->file); + else + snprintf(buf, sizeof(buf), "%s/%s", realpath, ici->file); + evas_list_free(selected); + if (ecore_file_is_dir(buf)) return; + cfdata->imc_current = strdup(buf); + _e_imc_form_fill(cfdata); + if (cfdata->o_frame) + e_widget_change(cfdata->o_frame); +} + +static void +_cb_files_selected(void *data, Evas_Object *obj, void *event_info) +{ + E_Config_Dialog_Data *cfdata; + + cfdata = data; +} + +static void +_cb_files_files_changed(void *data, Evas_Object *obj, void *event_info) +{ + const char *buf; + const char *p; + E_Config_Dialog_Data *cfdata; + + cfdata = data; + if (!cfdata->imc_current) return; + if (!cfdata->o_fm) return; + p = e_fm2_real_path_get(cfdata->o_fm); + if (p) + { + if (strncmp(p, cfdata->imc_current, strlen(p))) return; + } + + buf = e_intl_imc_personal_path_get(); + if (!strncmp(cfdata->imc_current, buf, strlen(buf))) + p = cfdata->imc_current + strlen(buf) + 1; + else + { + buf = e_intl_imc_system_path_get(); + if (!strncmp(cfdata->imc_current, buf, strlen(buf))) + p = cfdata->imc_current + strlen(buf) + 1; + } + if (!p) return; + e_fm2_select_set(cfdata->o_fm, p, 1); + e_fm2_file_show(cfdata->o_fm, p); } + +static void +_cb_files_files_deleted(void *data, Evas_Object *obj, void *event_info) +{ + E_Config_Dialog_Data *cfdata; + Evas_List *sel, *all, *n; + E_Fm2_Icon_Info *ici, *ic; + + cfdata = data; + if (!cfdata->imc_current) return; + if (!cfdata->o_fm) return; + + all = e_fm2_all_list_get(cfdata->o_fm); + if (!all) return; + sel = e_fm2_selected_list_get(cfdata->o_fm); + if (!sel) return; + + ici = sel->data; + + all = evas_list_find_list(all, ici); + n = evas_list_next(all); + if (!n) + { + n = evas_list_prev(all); + if (!n) return; + } + + ic = n->data; + if (!ic) return; + + e_fm2_select_set(cfdata->o_fm, ic->file, 1); + e_fm2_file_show(cfdata->o_fm, ic->file); + + evas_list_free(n); + + evas_object_smart_callback_call(cfdata->o_fm, "selection_change", cfdata); +} +/** End IMC FM2 Callbacks **/ + +/** Start IMC Utility Functions **/ +/* When updating the selection call this to fill in the form */ +static void +_e_imc_form_fill(E_Config_Dialog_Data *cfdata) +{ + Eet_File *imc_file; + E_Input_Method_Config *imc; + int imc_free; + + if (!cfdata->imc_current) return; + + imc_free = 0; + imc = evas_hash_find(cfdata->imc_change_map, cfdata->imc_current); + + if (!imc) + { + imc_free = 1; + imc_file = eet_open(cfdata->imc_current, EET_FILE_MODE_READ); + if (imc_file) + { + imc = e_intl_input_method_config_read(imc_file); + eet_close(imc_file); + } + } + + 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.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.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); + } + cfdata->imc.dirty = 0; +} + +/* Remember changes in memory until we click apply */ +static void +_e_imc_change_enqueue(E_Config_Dialog_Data *cfdata) +{ + if (cfdata->imc.dirty) + { + E_Input_Method_Config *imc_update; + E_Input_Method_Config *imc_update_old; + + imc_update = E_NEW(E_Input_Method_Config, 1); + + 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 = (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->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); + e_intl_input_method_config_free(imc_update_old); + + } + cfdata->imc_change_map = evas_hash_add(cfdata->imc_change_map, cfdata->imc_current, imc_update); + } +} + +/* Get a new filename, and create the new file */ +static const char* +_e_imc_file_name_new_get(void) +{ + char path[4096]; + int i; + + for (i = 0; i < 32; i++) + { + snprintf(path, sizeof(path), "%s/new_input_method-%02d.imc", + e_intl_imc_personal_path_get(), i); + if (!ecore_file_exists(path)) + { + return evas_stringshare_add(path); + } + } + + return NULL; +} +/** End IMC Utility Functions **/ + +/** Import Dialog **/ +EAPI void +e_int_config_imc_import_done(E_Config_Dialog *dia) +{ + E_Config_Dialog_Data *cfdata; + + cfdata = dia->cfdata; + cfdata->win_import = NULL; +} + +static void +_cb_import(void *data1, void *data2) +{ + E_Config_Dialog_Data *cfdata; + + cfdata = data1; + if (cfdata->win_import) + e_win_raise(cfdata->win_import); + else + cfdata->win_import = e_int_config_imc_import(cfdata->cfd); +} + +EAPI void +e_int_config_imc_update(E_Config_Dialog *dia, const char *file) +{ + E_Config_Dialog_Data *cfdata; + + cfdata = dia->cfdata; + cfdata->fmdir = 1; + E_FREE(cfdata->imc_current); + cfdata->imc_current = strdup(file); + e_widget_radio_toggle_set(cfdata->o_personal, 1); + + if (cfdata->o_fm) + e_fm2_path_set(cfdata->o_fm, e_intl_imc_personal_path_get(), "/"); + _e_imc_form_fill(cfdata); + if (cfdata->o_frame) + e_widget_change(cfdata->o_frame); +} + +static Evas_Object * +_advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata) +{ + Evas_Object *o, *ot, *of, *il, *ol; + const char *path; + E_Fm2_Config fmc; + E_Radio_Group *rg; + + ot = e_widget_table_add(evas, 0); + ol = e_widget_table_add(evas, 0); + il = e_widget_table_add(evas, 1); + + rg = e_widget_radio_group_new(&(cfdata->fmdir)); + + o = e_widget_radio_add(evas, _("Personal"), 0, rg); + e_widget_table_object_append(il, o, 0, 0, 1, 1, 1, 1, 0, 0); + e_widget_on_change_hook_set(o, _cb_dir, cfdata); + cfdata->o_personal = o; + + o = e_widget_radio_add(evas, _("System"), 1, rg); + e_widget_table_object_append(il, o, 1, 0, 1, 1, 1, 1, 0, 0); + e_widget_on_change_hook_set(o, _cb_dir, cfdata); + cfdata->o_system = o; + + e_widget_table_object_append(ol, il, 0, 0, 1, 1, 0, 0, 0, 0); + + o = e_widget_button_add(evas, _("Go up a Directory"), "widget/up_dir", _cb_button_up, cfdata, NULL); + cfdata->o_up_button = o; + e_widget_table_object_append(ol, o, 0, 1, 1, 1, 0, 0, 0, 0); + + if (cfdata->fmdir == 1) + path = e_intl_imc_system_path_get(); + else + path = e_intl_imc_personal_path_get(); + + o = e_fm2_add(evas); + cfdata->o_fm = o; + memset(&fmc, 0, sizeof(E_Fm2_Config)); + fmc.view.mode = E_FM2_VIEW_MODE_LIST; + fmc.view.open_dirs_in_place = 1; + fmc.view.selector = 1; + fmc.view.single_click = 0; + fmc.view.no_subdir_jump = 0; + fmc.view.extra_file_source = NULL; + fmc.icon.list.w = 16; + fmc.icon.list.h = 16; + fmc.icon.fixed.w = 1; + fmc.icon.fixed.h = 1; + fmc.icon.extension.show = 0; + fmc.icon.key_hint = NULL; + fmc.list.sort.no_case = 1; + fmc.list.sort.dirs.first = 0; + fmc.list.sort.dirs.last = 1; + fmc.selection.single = 1; + fmc.selection.windows_modifiers = 0; + e_fm2_config_set(o, &fmc); + e_fm2_icon_menu_flags_set(o, E_FM2_MENU_NO_SHOW_HIDDEN); + + evas_object_smart_callback_add(o, "dir_changed", + _cb_files_changed, cfdata); + evas_object_smart_callback_add(o, "selection_change", + _cb_files_selection_change, cfdata); + evas_object_smart_callback_add(o, "selected", + _cb_files_selected, cfdata); + evas_object_smart_callback_add(o, "changed", + _cb_files_files_changed, cfdata); + evas_object_smart_callback_add(o, "files_deleted", + _cb_files_files_deleted, cfdata); + cfdata->o_frame = NULL; + e_fm2_path_set(o, path, "/"); + + of = e_widget_scrollframe_pan_add(evas, o, + e_fm2_pan_set, + e_fm2_pan_get, + e_fm2_pan_max_get, + e_fm2_pan_child_size_get); + cfdata->o_frame = of; + e_widget_min_size_set(of, 160, 160); + e_widget_table_object_append(ol, of, 0, 2, 1, 1, 1, 1, 1, 1); + e_widget_table_object_append(ot, ol, 0, 0, 1, 1, 1, 1, 1, 1); + + of = e_widget_list_add(evas, 0, 0); + 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); + e_widget_list_object_append(ol, o, 1, 0, 0.5); + e_widget_list_object_append(of, ol, 1, 0, 0.0); + + ol = e_widget_frametable_add(evas, _("Input Method Parameters"), 1); + + o = e_widget_label_add(evas, _("Name")); + e_widget_frametable_object_append(ol, o, 0, 0, 1, 1, 1, 1, 1, 1); + o = e_widget_entry_add(evas, &(cfdata->imc.e_im_name)); + e_widget_on_change_hook_set(o, _e_imc_entry_change_cb, cfdata); + cfdata->gui.e_im_name = o; + e_widget_frametable_object_append(ol, o, 1, 0, 1, 1, 1, 1, 1, 1); + + o = e_widget_label_add(evas, _("Execute Command")); + e_widget_frametable_object_append(ol, o, 0, 1, 1, 1, 1, 1, 1, 1); + o = e_widget_entry_add(evas, &(cfdata->imc.e_im_exec)); + 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); + + e_widget_list_object_append(of, ol, 0, 1, 0.5); + + ol = e_widget_frametable_add(evas, _("Exported Environment Variables"), 1); + + o = e_widget_label_add(evas, _("GTK_IM_MODULE")); + e_widget_frametable_object_append(ol, o, 0, 0, 1, 1, 1, 1, 1, 1); + o = e_widget_entry_add(evas, &(cfdata->imc.gtk_im_module)); + e_widget_on_change_hook_set(o, _e_imc_entry_change_cb, cfdata); + cfdata->gui.gtk_im_module = o; + e_widget_frametable_object_append(ol, o, 1, 0, 1, 1, 1, 1, 1, 1); + + o = e_widget_label_add(evas, _("QT_IM_MODULE")); + e_widget_frametable_object_append(ol, o, 0, 1, 1, 1, 1, 1, 1, 1); + o = e_widget_entry_add(evas, &(cfdata->imc.qt_im_module)); + e_widget_on_change_hook_set(o, _e_imc_entry_change_cb, cfdata); + cfdata->gui.qt_im_module = o; + e_widget_frametable_object_append(ol, o, 1, 1, 1, 1, 1, 1, 1, 1); + + o = e_widget_label_add(evas, _("XMODIFIERS")); + e_widget_frametable_object_append(ol, o, 0, 2, 1, 1, 1, 1, 1, 1); + o = e_widget_entry_add(evas, &(cfdata->imc.xmodifiers)); + e_widget_on_change_hook_set(o, _e_imc_entry_change_cb, cfdata); + cfdata->gui.xmodifiers = 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); + + e_widget_table_object_append(ot, of, 1, 0, 1, 1, 1, 1, 1, 1); + + e_dialog_resizable_set(cfd->dia, 1); + + _e_imc_form_fill(cfdata); + + return ot; +} + +/*** End Advanced Dialog Logic ***/ =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_int_config_imc.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- e_int_config_imc.h 30 Nov 2006 16:35:56 -0000 1.1 +++ e_int_config_imc.h 17 Dec 2006 11:24:59 -0000 1.2 @@ -7,6 +7,8 @@ #define E_INT_CONFIG_IMC_H EAPI E_Config_Dialog *e_int_config_imc(E_Container *con); +EAPI void e_int_config_imc_import_done(E_Config_Dialog *dia); +EAPI void e_int_config_imc_update(E_Config_Dialog *dia, const char *file); #endif #endif =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_int_config_paths.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -3 -r1.8 -r1.9 --- e_int_config_paths.c 27 Nov 2006 16:21:20 -0000 1.8 +++ e_int_config_paths.c 17 Dec 2006 11:24:59 -0000 1.9 @@ -88,12 +88,10 @@ cfdata->paths_available[6].path_description = _("Modules"); cfdata->paths_available[7].path = path_backgrounds; cfdata->paths_available[7].path_description = _("Backgrounds"); - cfdata->paths_available[8].path = path_input_methods; - cfdata->paths_available[8].path_description = _("Input Methods"); - cfdata->paths_available[9].path = path_messages; - cfdata->paths_available[9].path_description = _("Messages"); - cfdata->paths_available[10].path = NULL; - cfdata->paths_available[10].path_description = NULL; + cfdata->paths_available[8].path = path_messages; + cfdata->paths_available[8].path_description = _("Messages"); + cfdata->paths_available[9].path = NULL; + cfdata->paths_available[9].path_description = NULL; return; } =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_intl.c,v retrieving revision 1.86 retrieving revision 1.87 diff -u -3 -r1.86 -r1.87 --- e_intl.c 16 Nov 2006 14:25:22 -0000 1.86 +++ e_intl.c 17 Dec 2006 11:24:59 -0000 1.87 @@ -17,7 +17,9 @@ static char *_e_intl_orig_xmodifiers = NULL; static char *_e_intl_orig_qt_im_module = NULL; static char *_e_intl_orig_gtk_im_module = NULL; -static char *_e_intl_input_method = NULL; + +static const char *_e_intl_imc_personal_path = NULL; +static const char *_e_intl_imc_system_path = NULL; static Eet_Data_Descriptor *_e_intl_input_method_config_edd = NULL; @@ -51,10 +53,7 @@ /* Input Method Configuration and Management */ static int _e_intl_cb_exit(void *data, int type, void *event); -static Evas_List *_e_intl_imc_path_scan(E_Path *path); static Evas_List *_e_intl_imc_dir_scan(const char *dir); -static E_Input_Method_Config *_e_intl_imc_find(Evas_List *imc_list, char *name); - EAPI int e_intl_init(void) @@ -94,6 +93,11 @@ E_FREE(_e_intl_orig_gtk_im_module); E_FREE(_e_intl_orig_qt_im_module); E_FREE(_e_intl_orig_xmodifiers); + + if (_e_intl_imc_personal_path) + evas_stringshare_del(_e_intl_imc_personal_path); + if (_e_intl_imc_system_path) + evas_stringshare_del(_e_intl_imc_system_path); E_CONFIG_DD_FREE(_e_intl_input_method_config_edd); @@ -317,11 +321,9 @@ } EAPI void -e_intl_input_method_set(const char *method) +e_intl_input_method_set(const char *imc_path) { - if (_e_intl_input_method) free(_e_intl_input_method); - - if (!method) + if (!imc_path) { E_EXE_STOP(_e_intl_input_method_exec); e_util_env_set("GTK_IM_MODULE", _e_intl_orig_gtk_im_module); @@ -329,16 +331,17 @@ e_util_env_set("XMODIFIERS", _e_intl_orig_xmodifiers); } - if (method) + if (imc_path) { - Evas_List *input_methods; + Eet_File *imc_ef; E_Input_Method_Config *imc; - input_methods = _e_intl_imc_path_scan(path_input_methods); - _e_intl_input_method = strdup(method); - - imc = _e_intl_imc_find(input_methods, _e_intl_input_method); - + imc_ef = eet_open(imc_path, EET_FILE_MODE_READ); + if (imc_ef) + { + imc = e_intl_input_method_config_read(imc_ef); + eet_close(imc_ef); + if (imc) { e_util_env_set("GTK_IM_MODULE", imc->gtk_im_module); @@ -362,28 +365,10 @@ "that your configuration's<br>" "executable is in your PATH<br>")); } - } - - /* Free up the directory listing */ - while (input_methods) - { - E_Input_Method_Config *imc; - - imc = input_methods->data; - input_methods = evas_list_remove_list(input_methods,input_methods); - e_intl_input_method_config_free(imc); + e_intl_input_method_config_free(imc); + } } } - else - { - _e_intl_input_method = NULL; - } -} - -EAPI const char * -e_intl_input_method_get(void) -{ - return _e_intl_input_method; } EAPI Evas_List * @@ -392,29 +377,66 @@ Evas_List *input_methods; Evas_List *im_list; Evas_List *l; - E_Input_Method_Config *imc; + char *imc_path; im_list = NULL; - - input_methods = _e_intl_imc_path_scan(path_input_methods); + + /* Personal Path */ + input_methods = _e_intl_imc_dir_scan(e_intl_imc_personal_path_get()); for (l = input_methods; l; l = l->next) { - imc = l->data; - im_list = evas_list_append(im_list, strdup(imc->e_im_name)); + imc_path = l->data; + im_list = evas_list_append(im_list, imc_path); } - /* Need to free up the directory listing */ while (input_methods) { - E_Input_Method_Config *imc; - - imc = input_methods->data; input_methods = evas_list_remove_list(input_methods, input_methods); - e_intl_input_method_config_free(imc); } + + /* System Path */ + input_methods = _e_intl_imc_dir_scan(e_intl_imc_system_path_get()); + for (l = input_methods; l; l = l->next) + { + imc_path = l->data; + im_list = evas_list_append(im_list, imc_path); + } + + while (input_methods) + { + input_methods = evas_list_remove_list(input_methods, input_methods); + } + return im_list; } +const char * +e_intl_imc_personal_path_get(void) +{ + if (_e_intl_imc_personal_path == NULL) + { + char buf[4096]; + + snprintf(buf, sizeof(buf), "%s/.e/e/input_methods", e_user_homedir_get()); + _e_intl_imc_personal_path = evas_stringshare_add(buf); + } + return _e_intl_imc_personal_path; +} + +const char * +e_intl_imc_system_path_get(void) +{ + if (_e_intl_imc_system_path == NULL) + { + char buf[4096]; + + snprintf(buf, sizeof(buf), "%s/data/input_methods", e_prefix_data_get()); + _e_intl_imc_system_path = evas_stringshare_add(buf); + } + return _e_intl_imc_system_path; + +} + /* Get the input method configuration from the file */ EAPI E_Input_Method_Config * e_intl_input_method_config_read(Eet_File *imc_file) @@ -843,9 +865,9 @@ if (!locale_parts) return NULL; if ((mask & locale_parts->mask) != mask) return NULL; - - + /* Construct the clean locale string */ + locale_size = 0; /* determine the size */ if (mask & E_INTL_LOC_LANG) @@ -1088,51 +1110,6 @@ e_intl_locale_parts_free(locale_parts); return search_list; } - -static Evas_List * -_e_intl_imc_path_scan(E_Path *path) -{ - - Evas_List *next; - Evas_List *dir_list; - Evas_List *all_imcs; - - if (!path) return NULL; - - all_imcs = NULL; - dir_list = e_path_dir_list_get(path); - - for (next = dir_list ; next ; next = next->next) - { - E_Path_Dir *epd; - Evas_List *dir_imcs; - - epd = next->data; - - dir_imcs = _e_intl_imc_dir_scan(epd->dir); - - while (dir_imcs) - { - E_Input_Method_Config *imc; - - imc = dir_imcs->data; - dir_imcs = evas_list_remove_list(dir_imcs, dir_imcs); - - if (_e_intl_imc_find(all_imcs, imc->e_im_name)) - { - e_intl_input_method_config_free(imc); - } - else - { - all_imcs = evas_list_append(all_imcs, imc); - } - } - } - - e_path_dir_list_free(dir_list); - - return all_imcs; -} static Evas_List * _e_intl_imc_dir_scan(const char *dir) @@ -1151,20 +1128,12 @@ { while ((file = ecore_list_next(files))) { - E_Input_Method_Config *imc; - Eet_File *imc_file; - char buf[PATH_MAX]; - - snprintf(buf, sizeof(buf), "%s/%s", dir, file); - imc_file = eet_open(buf, EET_FILE_MODE_READ); - if (imc_file) + if (strstr(file, ".imc") != NULL) { - imc = e_intl_input_method_config_read(imc_file); - if (imc) - { - imcs = evas_list_append(imcs, imc); - } - eet_close(imc_file); + char buf[PATH_MAX]; + + snprintf(buf, sizeof(buf), "%s/%s", dir, file); + imcs = evas_list_append(imcs, strdup(buf)); } } ecore_list_destroy(files); @@ -1172,21 +1141,3 @@ return imcs; } -static E_Input_Method_Config * -_e_intl_imc_find(Evas_List *imc_list, char *name) -{ - Evas_List *l; - - if (!imc_list) return NULL; - if (!name) return NULL; - - for (l = imc_list; l; l = l->next) - { - E_Input_Method_Config *imc; - - imc = l->data; - if (!strcmp(imc->e_im_name, name)) return imc; - } - - return NULL; -} =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_intl.h,v retrieving revision 1.15 retrieving revision 1.16 diff -u -3 -r1.15 -r1.16 --- e_intl.h 16 Nov 2006 14:25:22 -0000 1.15 +++ e_intl.h 17 Dec 2006 11:24:59 -0000 1.16 @@ -71,6 +71,9 @@ EAPI E_Input_Method_Config *e_intl_input_method_config_read (Eet_File *imc_file); EAPI int e_intl_input_method_config_write (Eet_File *imc_file, E_Input_Method_Config *imc); EAPI void e_intl_input_method_config_free (E_Input_Method_Config *imc); +EAPI const char *e_intl_imc_personal_path_get(void); +EAPI const char *e_intl_imc_system_path_get(void); + /* Getting locale */ EAPI E_Locale_Parts *e_intl_locale_parts_get(const char *locale); EAPI void e_intl_locale_parts_free(E_Locale_Parts *locale_parts); =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_ipc_handlers.h,v retrieving revision 1.139 retrieving revision 1.140 diff -u -3 -r1.139 -r1.140 --- e_ipc_handlers.h 16 Dec 2006 21:28:46 -0000 1.139 +++ e_ipc_handlers.h 17 Dec 2006 11:24:59 -0000 1.140 @@ -895,8 +895,6 @@ __path = path_modules; \ else if (!strcmp(__str, "backgrounds")) \ __path = path_backgrounds; \ - else if (!strcmp(__str, "input_methods")) \ - __path = path_input_methods; \ else if (!strcmp(__str, "messages")) \ __path = path_messages; =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_main.c,v retrieving revision 1.198 retrieving revision 1.199 diff -u -3 -r1.198 -r1.199 --- e_main.c 14 Nov 2006 21:44:34 -0000 1.198 +++ e_main.c 17 Dec 2006 11:24:59 -0000 1.199 @@ -1218,17 +1218,6 @@ e_path_default_path_append(path_backgrounds, "~/.e/e/backgrounds"); e_path_user_path_set(path_backgrounds, &(e_config->path_append_backgrounds)); - path_input_methods = e_path_new(); - if (!path_input_methods) - { - e_error_message_show("Cannot allocate path for path_input_methods\n"); - return 0; - } - e_path_default_path_append(path_input_methods, "~/.e/e/input_methods"); - snprintf(buf, sizeof(buf), "%s/data/input_methods", e_prefix_data_get()); - e_path_default_path_append(path_input_methods, buf); - e_path_user_path_set(path_input_methods, &(e_config->path_append_input_methods)); - path_messages = e_path_new(); if (!path_messages) { @@ -1284,11 +1273,6 @@ { e_object_del(E_OBJECT(path_backgrounds)); path_backgrounds = NULL; - } - if (path_input_methods) - { - e_object_del(E_OBJECT(path_input_methods)); - path_input_methods = NULL; } if (path_messages) { =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_utils.c,v retrieving revision 1.54 retrieving revision 1.55 diff -u -3 -r1.54 -r1.55 --- e_utils.c 5 Dec 2006 14:28:48 -0000 1.54 +++ e_utils.c 17 Dec 2006 11:24:59 -0000 1.55 @@ -11,7 +11,6 @@ EAPI E_Path *path_icons = NULL; EAPI E_Path *path_modules = NULL; EAPI E_Path *path_backgrounds = NULL; -EAPI E_Path *path_input_methods = NULL; EAPI E_Path *path_messages = NULL; EAPI int restart = 0; EAPI int good = 0; ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys - and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs