Add macro ENABLE_RESET_DONE_FUNC for conditional compilation 58/79858/8
authorLi Zhang <li2012.zhang@samsung.com>
Wed, 13 Jul 2016 08:27:23 +0000 (16:27 +0800)
committerInHong Han <inhong1.han@samsung.com>
Fri, 5 Aug 2016 06:23:06 +0000 (15:23 +0900)
Change-Id: Iee33312fc41b85a4b091d1c89036a3f77669fea4

ism/extras/wayland_immodule/wayland_imcontext.c

index 777ce32..cf623b6 100644 (file)
 
 #define IME_DEVICE_NAME "ime"
 
+#ifdef _TV
+# define ENABLE_RESET_DONE_FUNC 0
+#else
+# define ENABLE_RESET_DONE_FUNC 1
+#endif
+
 #define HIDE_TIMER_INTERVAL     0.05
 #define WAIT_FOR_FILTER_DONE_SECOND 2
 
@@ -141,8 +147,11 @@ struct _WaylandIMContext
         uint32_t state;
     } last_key_event_filter;
     Eina_List *keysym_list;
-
+#if ENABLE_RESET_DONE_FUNC
     uint32_t last_reset_serial;
+#else
+    uint32_t reset_serial;
+#endif
     //
 };
 
@@ -476,6 +485,31 @@ update_state(WaylandIMContext *imcontext)
     }
 }
 
+#if !(ENABLE_RESET_DONE_FUNC)
+static Eina_Bool
+check_serial(WaylandIMContext *imcontext, uint32_t serial)
+{
+    Ecore_IMF_Preedit_Attr *attr;
+
+    if ((imcontext->serial - serial) >
+        (imcontext->serial - imcontext->reset_serial)) {
+        LOGD("outdated serial: %u, current: %u, reset: %u",
+                serial, imcontext->serial, imcontext->reset_serial);
+
+        imcontext->pending_preedit.cursor = 0;
+
+        if (imcontext->pending_preedit.attrs) {
+            EINA_LIST_FREE(imcontext->pending_preedit.attrs, attr) free(attr);
+            imcontext->pending_preedit.attrs = NULL;
+        }
+
+        return EINA_FALSE;
+    }
+
+    return EINA_TRUE;
+}
+#endif
+
 static void
 clear_preedit(WaylandIMContext *imcontext)
 {
@@ -520,6 +554,10 @@ text_input_commit_string(void                 *data,
     if (!imcontext->ctx)
         return;
 
+#if !(ENABLE_RESET_DONE_FUNC)
+    if (!check_serial(imcontext, serial))
+        return;
+#endif
     if (old_preedit)
     {
         ecore_imf_context_preedit_end_event_add(imcontext->ctx);
@@ -943,7 +981,10 @@ text_input_preedit_string(void                 *data,
     SECURE_LOGD("preedit event (text: '%s', current pre-edit: '%s')",
                 text,
                 imcontext->preedit_text ? imcontext->preedit_text : "");
-
+#if !(ENABLE_RESET_DONE_FUNC)
+    if (!check_serial(imcontext, serial))
+        return;
+#endif
     old_preedit =
         imcontext->preedit_text && strlen(imcontext->preedit_text) > 0;
 
@@ -1186,6 +1227,9 @@ text_input_enter(void                 *data,
     WaylandIMContext *imcontext = (WaylandIMContext *)data;
 
     update_state(imcontext);
+#if !(ENABLE_RESET_DONE_FUNC)
+    imcontext->reset_serial = imcontext->serial;
+#endif
 }
 
 static void
@@ -1493,10 +1537,12 @@ text_input_reset_done(void                 *data,
                       uint32_t              serial)
 {
     LOGD("serial: %d", serial);
+#if ENABLE_RESET_DONE_FUNC
     WaylandIMContext *imcontext = (WaylandIMContext *)data;
     if (!imcontext) return;
 
     imcontext->last_reset_serial = serial;
+#endif
 }
 
 //
@@ -1680,7 +1726,9 @@ wayland_im_context_reset(Ecore_IMF_Context *ctx)
     clear_preedit(imcontext);
 
     if (!imcontext->input) return;
-
+#if !(ENABLE_RESET_DONE_FUNC)
+    wl_text_input_reset(imcontext->text_input);
+#else
     if (imcontext->text_input) {
         int serial = imcontext->serial++;
         double start_time = ecore_time_get();
@@ -1695,8 +1743,11 @@ wayland_im_context_reset(Ecore_IMF_Context *ctx)
             }
         }
     }
-
+#endif
     update_state(imcontext);
+#if !(ENABLE_RESET_DONE_FUNC)
+    imcontext->reset_serial = imcontext->serial;
+#endif
 }
 
 EAPI void