E_CONFIG_VAL(D, T, menu_eap_name_show, INT); /**/
E_CONFIG_VAL(D, T, menu_eap_generic_show, INT); /**/
E_CONFIG_VAL(D, T, menu_eap_comment_show, INT); /**/
+ E_CONFIG_VAL(D, T, input_method, STR); /**/
e_config = e_config_domain_load("e", _e_config_edd);
if (e_config)
e_config->menu_eap_name_show = 1;
e_config->menu_eap_generic_show = 1;
e_config->menu_eap_comment_show = 0;
+ e_config->input_method = NULL;
{
E_Config_Module *em;
if ((e_config->language) && (strlen(e_config->language) > 0))
e_intl_language_set(e_config->language);
+ if ((e_config->input_method) && (strlen(e_config->input_method) > 0))
+ e_intl_input_method_set(e_config->input_method);
+
return 1;
}
int cursor_size;
int menu_autoscroll_margin;
int menu_autoscroll_cursor_margin;
+ char *input_method;
struct {
int move;
int resize;
/* TODO List:
*
- * * load/save language in config so u can change language runtime via a gui and/or ipc
- * * add ipc to get/set/list languages, get language name, simplified language string, etc. (so a config tool can be written to display supported languages and be able to select from them)
* * add more language names to the language name list list in e_intl_language_name_get()
* * as we get translations add languages to the simplified lang list (C and en are currently the same, ja is a test translation - incomplete)
*/
static char *_e_intl_language = NULL;
static Evas_List *_e_intl_languages = NULL;
+static char *_e_intl_orig_gtk_im_module_file = NULL;
+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 Evas_List *_e_intl_input_methods = NULL;
+
#define ADD_LANG(lang) _e_intl_languages = evas_list_append(_e_intl_languages, lang)
+#define ADD_IM(method) _e_intl_input_methods = evas_list_append(_e_intl_input_methods, method)
int
e_intl_init(void)
{
char *s;
+ E_Language_Pack *elp;
if (_e_intl_languages) return 1;
if ((s = getenv("LANGUAGE"))) _e_intl_orig_language = strdup(s);
if ((s = getenv("LC_ALL"))) _e_intl_orig_lc_all = strdup(s);
if ((s = getenv("LANG"))) _e_intl_orig_lang = strdup(s);
+
+ if ((s = getenv("GTK_IM_MODULE"))) _e_intl_orig_gtk_im_module = strdup(s);
+ if ((s = getenv("QT_IM_MODULE"))) _e_intl_orig_qt_im_module = strdup(s);
+ if ((s = getenv("XMODIFIERS"))) _e_intl_orig_xmodifiers = strdup(s);
+ if ((s = getenv("GTK_IM_MODULE_FILE"))) _e_intl_orig_gtk_im_module_file = strdup(s);
- /* FIXME: NULL == use LANG. make this read a config value if it exists */
+
+ /* Exception: NULL == use LANG. this will get setup in e_config */
e_intl_language_set(NULL);
+
+ elp = malloc(sizeof(E_Language_Pack));
+ elp->version = 1;
+ elp->e_im_name = strdup("scim");
+ elp->gtk_im_module = strdup("scim");
+ elp->qt_im_module = strdup("scim");
+ elp->xmodifiers = strdup("@im=SCIM");
+ elp->e_im_exec = strdup("scim");
+ elp->gtk_im_module_file = NULL;
+
+ ADD_IM(elp);
+
+ elp = malloc(sizeof(E_Language_Pack));
+ elp->version = 1;
+ elp->e_im_name = strdup("uim");
+ elp->gtk_im_module = strdup("uim");
+ elp->qt_im_module = strdup("uim");
+ elp->xmodifiers = strdup("@im=uim");
+ elp->gtk_im_module_file = NULL;
+ elp->e_im_exec = strdup("uim-xim");
+
+ ADD_IM(elp);
+
return 1;
}
/* FIXME: hunt dirs for locales */
return _e_intl_languages;
}
+
+void
+e_intl_input_method_set(const char *method)
+{
+ E_Language_Pack *elp;
+ Evas_List *next;
+
+ if (_e_intl_input_method) free(_e_intl_input_method);
+
+ if (!method)
+ {
+ e_util_env_set("GTK_IM_MODULE", _e_intl_orig_gtk_im_module);
+ e_util_env_set("QT_IM_MODULE", _e_intl_orig_qt_im_module);
+ e_util_env_set("XMODIFIERS", _e_intl_orig_xmodifiers);
+ e_util_env_set("GTK_IM_MODULE_FILE", _e_intl_orig_gtk_im_module_file);
+ }
+
+ if (method)
+ {
+ _e_intl_input_method = strdup(method);
+ for (next = _e_intl_input_methods; next; next = next->next)
+ {
+ elp = next->data;
+ if (!strcmp(elp->e_im_name, _e_intl_input_method))
+ {
+ e_util_env_set("GTK_IM_MODULE", elp->gtk_im_module);
+ e_util_env_set("QT_IM_MODULE", elp->qt_im_module);
+ e_util_env_set("XMODIFIERS", elp->xmodifiers);
+ e_util_env_set("GTK_IM_MODULE_FILE", elp->gtk_im_module_file);
+ if (elp->e_im_exec != NULL)
+ {
+ /* FIXME: first check ok exec availability */
+ ecore_exe_run(elp->e_im_exec, NULL);
+ }
+ break;
+ }
+ }
+ }
+ else
+ {
+ _e_intl_input_method = NULL;
+ }
+}
+
+const char *
+e_intl_input_method_get(void)
+{
+ return _e_intl_input_method;
+}
+
+const Evas_List *
+e_intl_input_method_list(void)
+{
+ Evas_List *im_list;
+ Evas_List *next;
+ E_Language_Pack *elp;
+
+ im_list = NULL;
+
+ for (next = _e_intl_input_methods; next; next = next->next)
+ {
+ elp = next->data;
+ im_list = evas_list_append(im_list, elp->e_im_name);
+ }
+
+ return im_list;
+}
+
#define _(str) gettext(str)
#define d_(str, dom) dgettext(PACKAGE dom, str)
+typedef struct _E_Language_Pack E_Language_Pack;
+
#else
#ifndef E_INTL_H
#define E_INTL_H
-EAPI int e_intl_init(void);
-EAPI int e_intl_shutdown(void);
-EAPI void e_intl_language_set(const char *lang);
-EAPI const char *e_intl_language_get(void);
-EAPI const Evas_List *e_intl_language_list(void);
+struct _E_Language_Pack
+{
+ int version;
+ char *e_im_name;
+ char *gtk_im_module;
+ char *qt_im_module;
+ char *xmodifiers;
+ char *gtk_im_module_file;
+ char *e_im_exec;
+};
+
+EAPI int e_intl_init(void);
+EAPI int e_intl_shutdown(void);
+/* Setting & Getting Language */
+EAPI void e_intl_language_set(const char *lang);
+EAPI const char *e_intl_language_get(void);
+EAPI const Evas_List *e_intl_language_list(void);
+/* Setting & Getting Input Method */
+EAPI void e_intl_input_method_set(const char *method);
+EAPI const char *e_intl_input_method_get(void);
+EAPI const Evas_List *e_intl_input_method_list(void);
#endif
#endif
END_INT;
#endif
#undef HDL
+
+/****************************************************************************/
+#define HDL E_IPC_OP_IM_LIST
+#if (TYPE == E_REMOTE_OPTIONS)
+ OP("-input-method-list", 0, "List all available input methods", 1, HDL)
+#elif (TYPE == E_REMOTE_OUT)
+ REQ_NULL(HDL);
+#elif (TYPE == E_WM_IN)
+ GENERIC(HDL);
+ LIST_DATA();
+ ENCODE((Evas_List *)e_intl_input_method_list(), e_ipc_codec_str_list_enc);
+ SEND_DATA(E_IPC_OP_IM_LIST_REPLY);
+ END_GENERIC();
+#elif (TYPE == E_REMOTE_IN)
+#endif
+#undef HDL
+
+/****************************************************************************/
+#define HDL E_IPC_OP_IM_LIST_REPLY
+#if (TYPE == E_REMOTE_OPTIONS)
+#elif (TYPE == E_REMOTE_OUT)
+#elif (TYPE == E_WM_IN)
+#elif (TYPE == E_REMOTE_IN)
+ GENERIC(HDL);
+ LIST();
+ DECODE(e_ipc_codec_str_list_dec) {
+ FOR(dat) {
+ printf("REPLY: \"%s\"\n", (char *)(l->data));
+ }
+ FREE_LIST(dat);
+ }
+ END_GENERIC();
+#endif
+#undef HDL
+/****************************************************************************/
+#define HDL E_IPC_OP_IM_SET
+#if (TYPE == E_REMOTE_OPTIONS)
+ OP("-input-method-set", 1, "Set the current input method to 'OPT1'", 0, HDL)
+#elif (TYPE == E_REMOTE_OUT)
+ REQ_STRING(params[0], HDL);
+#elif (TYPE == E_WM_IN)
+ STRING(s, HDL);
+ E_FREE(e_config->input_method);
+ e_config->input_method = strdup(s);
+ if ((e_config->input_method) && (strlen(e_config->input_method) > 0))
+ e_intl_input_method_set(e_config->input_method);
+ else
+ e_intl_input_method_set(NULL);
+ SAVE;
+ END_STRING(s);
+#elif (TYPE == E_REMOTE_IN)
+#endif
+#undef HDL
+
+/****************************************************************************/
+#define HDL E_IPC_OP_IM_GET
+#if (TYPE == E_REMOTE_OPTIONS)
+ OP("-input-method-get", 0, "Get the current input method", 1, HDL)
+#elif (TYPE == E_REMOTE_OUT)
+ REQ_NULL(HDL);
+#elif (TYPE == E_WM_IN)
+ SEND_STRING(e_config->input_method, E_IPC_OP_IM_GET_REPLY, HDL);
+#elif (TYPE == E_REMOTE_IN)
+#endif
+#undef HDL
+
+/****************************************************************************/
+#define HDL E_IPC_OP_IM_GET_REPLY
+#if (TYPE == E_REMOTE_OPTIONS)
+#elif (TYPE == E_REMOTE_OUT)
+#elif (TYPE == E_WM_IN)
+#elif (TYPE == E_REMOTE_IN)
+ STRING(s, HDL);
+ printf("REPLY: \"%s\"\n", s);
+ END_STRING(s);
+#endif
+#undef HDL
/****************************************************************************/
#define HDL E_IPC_OP_WINDOW_PLACEMENT_POLICY_SET
#define E_IPC_OP_MENU_EAP_COMMENT_SHOW_GET 313
#define E_IPC_OP_MENU_EAP_COMMENT_SHOW_GET_REPLY 314
+#define E_IPC_OP_IM_LIST 315
+#define E_IPC_OP_IM_LIST_REPLY 316
+#define E_IPC_OP_IM_SET 317
+#define E_IPC_OP_IM_GET 318
+#define E_IPC_OP_IM_GET_REPLY 319
+