Cache whether current translation language supports IME or not
authorSergey Sharybin <sergey.vfx@gmail.com>
Tue, 3 May 2016 10:38:21 +0000 (12:38 +0200)
committerSergey Sharybin <sergey.vfx@gmail.com>
Tue, 3 May 2016 10:38:21 +0000 (12:38 +0200)
Solves the weak point mentionedi n previous commit.

source/blender/blentranslation/BLT_translation.h
source/blender/blentranslation/CMakeLists.txt
source/blender/blentranslation/intern/blt_lang.c
source/blender/editors/interface/interface_handlers.c

index efd59c3fa94a779f40ae4218b79ecd58c04ba404..3838e8c827c4aadbbe4e095567ee8ee4b4fbc548 100644 (file)
@@ -54,6 +54,7 @@ const char *BLT_translate_do_iface(const char *msgctxt, const char *msgid);
 const char *BLT_translate_do_tooltip(const char *msgctxt, const char *msgid);
 const char *BLT_translate_do_new_dataname(const char *msgctxt, const char *msgid);
 
+bool BLT_lang_is_ime_supported(void);
 
 /* The "translation-marker" macro. */
 #define N_(msgid) msgid
index 59bd7f0adfa7044cccd373825decd6474840528b..a3e8534402724543b2eb00186116cf1781dc242b 100644 (file)
@@ -53,4 +53,10 @@ if(WITH_PYTHON)
        )
 endif()
 
+if(WIN32)
+       if(WITH_INPUT_IME)
+               add_definitions(-DWITH_INPUT_IME)
+       endif()
+endif()
+
 blender_add_lib(bf_blentranslation "${SRC}" "${INC}" "${INC_SYS}")
index 1ad62fa58693667f67ef98c4104685c29ac8705d..40771b3315a0c0f58754a2f08c281a72a6f306a2 100644 (file)
@@ -64,6 +64,12 @@ static int num_locales = 0;
 static EnumPropertyItem *locales_menu = NULL;
 static int num_locales_menu = 0;
 
+#ifdef WITH_INPUT_IME
+/* Cached IME support flags */
+static bool ime_is_lang_supported = false;
+static void blt_lang_check_ime_supported(void);
+#endif
+
 static void free_locales(void)
 {
        if (locales) {
@@ -280,6 +286,7 @@ void BLT_lang_set(const char *str)
 #else
        (void)str;
 #endif
+       blt_lang_check_ime_supported();
 }
 
 /* Get the current locale (short code, e.g. es_ES). */
@@ -355,3 +362,32 @@ void BLT_lang_locale_explode(
                MEM_freeN(_t);
        }
 }
+
+/* Test if the translation context allows IME input - used to
+ * avoid weird character drawing if IME inputs non-ascii chars.
+ */
+static void blt_lang_check_ime_supported(void)
+{
+#ifdef WITH_INPUT_IME
+       const char *uilng = BLT_lang_get();
+       if (U.transopts & USER_DOTRANSLATE) {
+               ime_is_lang_supported = STREQ(uilng, "zh_CN") ||
+                                       STREQ(uilng, "zh_TW") ||
+                                       STREQ(uilng, "ja_JP");
+       }
+       else {
+               ime_is_lang_supported = false;
+       }
+#else
+       ime_is_lang_supported = false;
+#endif
+}
+
+bool BLT_lang_is_ime_supported(void)
+{
+#ifdef WITH_INPUT_IME
+       return ime_is_lang_supported;
+#else
+       return false;
+#endif
+}
index c6cd03d7ac710d16c2bb754e5d9d0084beea90e1..2840be02ef81e62293fef519cece98b219a2019e 100644 (file)
@@ -2945,19 +2945,6 @@ static bool ui_textedit_copypaste(uiBut *but, uiHandleButtonData *data, const in
 }
 
 #ifdef WITH_INPUT_IME
-/* test if the translation context allows IME input - used to
- * avoid weird character drawing if IME inputs non-ascii chars */
-static bool ui_ime_is_lang_supported(void)
-{
-       const char *uilng = BLT_lang_get();
-       if (U.transopts & USER_DOTRANSLATE) {
-               return STREQ(uilng, "zh_CN") ||
-                      STREQ(uilng, "zh_TW") ||
-                      STREQ(uilng, "ja_JP");
-       }
-       return false;
-}
-
 /* enable ime, and set up uibut ime data */
 static void ui_textedit_ime_begin(wmWindow *win, uiBut *UNUSED(but))
 {
@@ -3079,7 +3066,7 @@ static void ui_textedit_begin(bContext *C, uiBut *but, uiHandleButtonData *data)
        WM_cursor_modal_set(win, BC_TEXTEDITCURSOR);
 
 #ifdef WITH_INPUT_IME
-       if (is_num_but == false && ui_ime_is_lang_supported()) {
+       if (is_num_but == false && BLT_lang_is_ime_supported()) {
                ui_textedit_ime_begin(win, but);
        }
 #endif
@@ -3406,7 +3393,7 @@ static void ui_do_but_textedit(bContext *C, uiBlock *block, uiBut *but, uiHandle
 #ifdef WITH_INPUT_IME
                    &&
                    !is_ime_composing &&
-                   (!WM_event_is_ime_switch(event) || !ui_ime_is_lang_supported())
+                       (!WM_event_is_ime_switch(event) || !BLT_lang_is_ime_supported())
 #endif
                    )
                {