forked from enlightenment/efl
ecore_wl2: fix key down event called to often
if many events are coming in, a release event can be skipped. if this happens the timer continues with the new keycode. so if a new key pressed event enter checks for the old timer and delete the timer if there is one. If the timer kicks in and emits additional key down events dont call the callback which gets called by wl, and emit the signal directly.
This commit is contained in:
parent
0a2f066c2d
commit
63a410667a
|
@ -775,9 +775,7 @@ _keyboard_cb_repeat(void *data)
|
||||||
window = input->focus.keyboard;
|
window = input->focus.keyboard;
|
||||||
if (!window) goto out;
|
if (!window) goto out;
|
||||||
|
|
||||||
if (input->focus.keyboard == window)
|
_ecore_wl2_input_key_send(input, input->focus.keyboard, input->repeat.sym, input->repeat.key + 8, WL_KEYBOARD_KEY_STATE_PRESSED, input->repeat.time);
|
||||||
_keyboard_cb_key(input, NULL, input->display->serial,
|
|
||||||
input->repeat.time, input->repeat.key, EINA_TRUE);
|
|
||||||
|
|
||||||
return ECORE_CALLBACK_RENEW;
|
return ECORE_CALLBACK_RENEW;
|
||||||
|
|
||||||
|
@ -834,6 +832,10 @@ _keyboard_cb_key(void *data, struct wl_keyboard *keyboard EINA_UNUSED, unsigned
|
||||||
input->repeat.key = keycode;
|
input->repeat.key = keycode;
|
||||||
input->repeat.time = timestamp;
|
input->repeat.time = timestamp;
|
||||||
|
|
||||||
|
/* Delete this timer if there is still one */
|
||||||
|
if (input->repeat.timer) ecore_timer_del(input->repeat.timer);
|
||||||
|
input->repeat.timer = NULL;
|
||||||
|
|
||||||
if (!input->repeat.timer)
|
if (!input->repeat.timer)
|
||||||
{
|
{
|
||||||
input->repeat.timer =
|
input->repeat.timer =
|
||||||
|
|
Loading…
Reference in New Issue