static Eina_Bool g_key_rate_checked = EINA_FALSE, g_focused = EINA_FALSE;
static double g_original_key_rate = 0.0, g_original_key_delay = 0.0, g_desired_key_rate = 0.0;
static double g_filter_event_elapsed_time = 0.0;
+static int g_last_key_event_serial = 0;
//
typedef struct __LanguageInfo {
imcontext->input = NULL;
_preedit_cursor_changed = EINA_FALSE;
+ g_filter_event_elapsed_time = 0.0;
+ g_last_key_event_serial = 0;
if (g_desired_key_rate > 0.0 && g_focused) {
g_focused = EINA_FALSE;
break;
}
- if (!_check_filter_event(imcontext)) {
- LOGE("elapsed time : %.3f ms, serial (last, require) : (%d, %d)", g_filter_event_elapsed_time * 1000, imcontext->last_key_event_filter.serial, imcontext->serial + 1);
- ret = EINA_TRUE;
- break;
- }
-
- int serial = imcontext->serial++;
- double start_time = ecore_time_get();
-
/* xkb_mod_mask */
uint32_t modifiers = 0;
if (ecore_key_ev.modifiers & ECORE_EVENT_MODIFIER_SHIFT)
if (ecore_key_ev.modifiers & ECORE_EVENT_LOCK_NUM)
modifiers |= imcontext->num_mask;
+ if (g_last_key_event_serial <= imcontext->last_key_event_filter.serial)
+ g_filter_event_elapsed_time = 0.0;
+
+ if (!_check_filter_event(imcontext)) {
+ LOGE("elapsed time : %.3f ms, serial (last, require) : (%d, %d)", g_filter_event_elapsed_time * 1000, imcontext->last_key_event_filter.serial, imcontext->serial + 1);
+ ret = modifiers ? EINA_FALSE : EINA_TRUE;
+ break;
+ }
+
+ int serial = imcontext->serial++;
+ g_last_key_event_serial = serial;
+ double start_time = ecore_time_get();
+
SECURE_LOGD ("ev:modifiers=0x%x, modifiers=0x%x, shift_mask=0x%x, control_mask=0x%0x, alt_mask=0x%x, caps_mask=0x%x, num_mask=0x%x, keycode=%u", ecore_key_ev.modifiers, modifiers, imcontext->shift_mask, imcontext->control_mask, imcontext->alt_mask, imcontext->caps_mask, imcontext->num_mask, ecore_key_ev.keycode);
//Send key event to IME.
wl_text_input_filter_key_event(imcontext->text_input, serial, ecore_key_ev.timestamp, ecore_key_ev.key,