#define HIDE_TIMER_INTERVAL 0.05
#define WAIT_FOR_FILTER_DONE_SECOND 1.3
+#define MAX_WAIT_FOR_WL_SERVER 5.0
#define MOD_SHIFT_MASK 0x01
#define MOD_CAPS_MASK 0x02
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;
//
typedef struct __LanguageInfo {
}
#endif
+static Eina_Bool
+_check_filter_event(WaylandIMContext *imcontext)
+{
+ int next_serial = imcontext->serial + 1;
+ double waiting_time = g_filter_event_elapsed_time * (next_serial - imcontext->last_key_event_filter.serial);
+
+ return (waiting_time > MAX_WAIT_FOR_WL_SERVER ? EINA_FALSE : EINA_TRUE);
+}
+
Eina_Bool
wayland_im_context_filter_event(Ecore_IMF_Context *ctx,
Ecore_IMF_Event_Type type,
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();
wl_event_queue_destroy(queue);
}
+ if (g_filter_event_elapsed_time == 0)
+ g_filter_event_elapsed_time = ecore_time_get() - start_time;
+ else
+ g_filter_event_elapsed_time = (g_filter_event_elapsed_time + (ecore_time_get() - start_time)) / 2;
+
LOGD ("elapsed : %.3f ms, serial (last, require) : (%d, %d)", (ecore_time_get() - start_time)*1000, imcontext->last_key_event_filter.serial, serial);
}
} while (0);