Fix the done key need to be pressed twice to close input panel issue. 98/205598/6
authorXie Ligang <ligang0.xie@samsung.com>
Wed, 8 May 2019 02:19:23 +0000 (10:19 +0800)
committerXie Ligang <ligang0.xie@samsung.com>
Wed, 8 May 2019 06:58:45 +0000 (14:58 +0800)
Change-Id: Ie693a06d3c4e74186ea293942f9fae7afc6c66be
Signed-off-by: Xie Ligang <ligang0.xie@samsung.com>
src/ise.cpp

index bc7d5be..af23713 100644 (file)
@@ -21,6 +21,7 @@
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <vconf.h>
+#include <Ecore.h>
 #include <Ecore_IMF.h>
 #include <Elementary.h>
 #include <sclui.h>
@@ -201,8 +202,10 @@ static ISELanguageManager _language_manager;
 #define MVK_Shift_Enable 0x9fe7
 #define MVK_Shift_Disable 0x9fe8
 #define MVK_space 0x020
+#define MVK_Done 0xff0d
 
 #define CM_KEY_LIST_SIZE         5
+#define MULTITAP_TIMEOUT         3.0
 #define USER_KEYSTRING_OPTION    "OPTION"
 #define USER_KEYSTRING_EMOTICON  "EMOTICON_LAYOUT"
 #define USER_KEYSTRING_CLIPBOARD "CLIPBOARD"
@@ -224,6 +227,13 @@ Evas_Object* _guide_popup_space = NULL;
 class CUIEventCallback : public ISCLUIEventCallback
 {
 public :
+    Ecore_Timer* word_timer = NULL;
+    static Eina_Bool _multi_tap_timer_cb(void *data)
+    {
+        LOGD("Time Out");
+        ise_send_event(MVK_Done, KEY_MASK_NULL);
+        return ECORE_CALLBACK_CANCEL;
+    }
     SCLEventReturnType on_event_key_clicked(SclUIEventDesc event_desc);
     SCLEventReturnType on_event_drag_state_changed(SclUIEventDesc event_desc);
     SCLEventReturnType on_event_notification(SCLUINotiType noti_type, SclNotiDesc *etc_info);
@@ -977,7 +987,10 @@ end:
 SCLEventReturnType CUIEventCallback::on_event_key_clicked(SclUIEventDesc event_desc)
 {
     SCLEventReturnType ret = SCL_EVENT_PASS_ON;
-
+    if (word_timer != NULL) {
+        ecore_timer_del(word_timer);
+        word_timer = NULL;
+    }
     if (event_desc.key_modifier == KEY_MODIFIER_MULTITAP_START) {
         if (!g_keyboard_state.multitap_value.empty()) {
             ise_send_string(g_keyboard_state.multitap_value.c_str());
@@ -1071,6 +1084,9 @@ SCLEventReturnType CUIEventCallback::on_event_key_clicked(SclUIEventDesc event_d
                         if (g_keyboard_state.layout == ISE_LAYOUT_STYLE_NUMBER) {
                             ime_send_key_event(IME_KEY_Print, IME_KEY_MASK_CONTROL, false);
                         } else {
+                            if (word_timer == NULL && (!g_candidate || !g_softcandidate_show)) {
+                                word_timer = ecore_timer_add(MULTITAP_TIMEOUT, _multi_tap_timer_cb, NULL);
+                            }
                             ime_send_key_event(IME_KEY_Select, IME_KEY_MASK_CONTROL, false);
                         }
 #endif
@@ -1114,6 +1130,13 @@ SCLEventReturnType CUIEventCallback::on_event_key_clicked(SclUIEventDesc event_d
                     if (g_keyboard_state.layout == ISE_LAYOUT_STYLE_VOICE) {
                         ise_stt_stop();
                     }
+#ifdef _WEARABLE
+                    if (event_desc.key_event == MVK_Done) {
+                        LOGD("ENTER");
+                        //commit the preedit string first
+                        ise_send_event(event_desc.key_event, KEY_MASK_NULL);
+                    }
+#endif
                     ise_send_event(event_desc.key_event, KEY_MASK_NULL);
                     if (event_desc.key_event == MVK_Shift_L) {
                         g_need_send_shift_event = TRUE;