#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
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
//
};
}
}
+#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)
{
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);
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;
WaylandIMContext *imcontext = (WaylandIMContext *)data;
update_state(imcontext);
+#if !(ENABLE_RESET_DONE_FUNC)
+ imcontext->reset_serial = imcontext->serial;
+#endif
}
static void
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
}
//
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();
}
}
}
-
+#endif
update_state(imcontext);
+#if !(ENABLE_RESET_DONE_FUNC)
+ imcontext->reset_serial = imcontext->serial;
+#endif
}
EAPI void