Modified to commit current multitap string on reset() 99/79399/2
authorJi-hoon Lee <dalton.lee@samsung.com>
Mon, 11 Jul 2016 08:01:37 +0000 (17:01 +0900)
committerJi-hoon Lee <dalton.lee@samsung.com>
Mon, 11 Jul 2016 08:26:05 +0000 (17:26 +0900)
Change-Id: I51f81848343b6597815f259b32b4eb888779d42e

src/include/ise.h
src/ise.cpp
src/sdk/sdk.cpp

index ca90bc0..98d8ca4 100644 (file)
@@ -177,6 +177,7 @@ typedef struct {
     sclboolean need_reset;
     sclboolean visible_state;
     std::string multitap_value;
+    SCLKeyModifier prev_modifier;
 } KEYBOARD_STATE;
 
 using namespace scl;
index 3fbd9a7..1005b33 100644 (file)
@@ -69,8 +69,6 @@ static bool g_softcandidate_show = false;
 #define SOFT_CANDIDATE_DELETE_TIME (1.0/100)
 static Ecore_Timer *g_softcandidate_hide_timer = NULL;
 
-static SCLKeyModifier g_prev_modifier;
-
 KEYBOARD_STATE g_keyboard_state = {
     0,
     0,
@@ -79,7 +77,8 @@ KEYBOARD_STATE g_keyboard_state = {
     FALSE,
     TRUE,
     FALSE,
-    ""
+    "",
+    KEY_MODIFIER_NONE
 };
 
 #define ISE_LAYOUT_NUMBERONLY_VARIATION_MAX 4
@@ -172,6 +171,17 @@ static void _reset_shift_state(void)
     }
 }
 
+static void _reset_multitap_state()
+{
+    if (g_keyboard_state.prev_modifier == KEY_MODIFIER_MULTITAP_START ||
+        g_keyboard_state.prev_modifier == KEY_MODIFIER_MULTITAP_REPEAT) {
+        ise_send_string(g_keyboard_state.multitap_value.c_str());
+        ise_update_preedit_string("");
+    }
+    g_keyboard_state.multitap_value = "";
+    g_keyboard_state.prev_modifier = KEY_MODIFIER_NONE;
+}
+
 static void ise_set_cm_private_key(scluint cm_key_id)
 {
     if (cm_key_id >= CM_KEY_LIST_SIZE || g_ui == NULL) {
@@ -769,13 +779,10 @@ SCLEventReturnType CUIEventCallback::on_event_key_clicked(SclUIEventDesc event_d
     } else if (event_desc.key_modifier == KEY_MODIFIER_MULTITAP_REPEAT) {
         ise_update_preedit_string(event_desc.key_value);
         g_keyboard_state.multitap_value = event_desc.key_value;
-    } else if (g_prev_modifier == KEY_MODIFIER_MULTITAP_START ||
-            g_prev_modifier == KEY_MODIFIER_MULTITAP_REPEAT) {
-        ise_send_string(g_keyboard_state.multitap_value.c_str());
-        ise_update_preedit_string("");
-        g_keyboard_state.multitap_value = "";
+    } else {
+        _reset_multitap_state();
     }
-    g_prev_modifier = event_desc.key_modifier;
+    g_keyboard_state.prev_modifier = event_desc.key_modifier;
 
     if (g_ui) {
         switch (event_desc.key_type) {
@@ -965,15 +972,13 @@ ise_set_layout(sclu32 layout, sclu32 layout_variation)
 void
 ise_reset_context()
 {
-    g_keyboard_state.multitap_value = "";
-    g_prev_modifier = KEY_MODIFIER_NONE;
+    _reset_multitap_state();
 }
 
 void
 ise_reset_input_context()
 {
-    g_keyboard_state.multitap_value = "";
-    g_prev_modifier = KEY_MODIFIER_NONE;
+    _reset_multitap_state();
 }
 
 void
index b263227..3737a3a 100644 (file)
@@ -346,7 +346,13 @@ sclboolean CSDKISE::flush_imengine(const sclchar *language)
 {
     bool bRet = false;
 
+    if (g_keyboard_state.prev_modifier == KEY_MODIFIER_MULTITAP_START ||
+        g_keyboard_state.prev_modifier == KEY_MODIFIER_MULTITAP_REPEAT) {
+        ise_send_string(g_keyboard_state.multitap_value.c_str());
+        ise_update_preedit_string("");
+    }
     g_keyboard_state.multitap_value = "";
+    g_keyboard_state.prev_modifier = KEY_MODIFIER_NONE;
 
     int lang_id = get_lang_id(language);
     if (lang_id != -1) {