/* send current repeat_info */
if (wl_resource_get_version(res) >= WL_KEYBOARD_REPEAT_INFO_SINCE_VERSION)
- wl_keyboard_send_repeat_info(res, e_comp_wl->kbd.repeat_rate, e_comp_wl->kbd.repeat_delay);
+ {
+ g_mutex_lock(&e_comp_wl->kbd.repeat_rate_mutex);
+ g_mutex_lock(&e_comp_wl->kbd.repeat_delay_mutex);
+ wl_keyboard_send_repeat_info(res, e_comp_wl->kbd.repeat_rate, e_comp_wl->kbd.repeat_delay);
+ g_mutex_unlock(&e_comp_wl->kbd.repeat_delay_mutex);
+ g_mutex_unlock(&e_comp_wl->kbd.repeat_rate_mutex);
+ }
/* send current keymap */
TRACE_INPUT_BEGIN(wl_keyboard_send_keymap);
g_mutex_init(&e_comp_wl->kbd.resource_mutex);
g_mutex_init(&e_comp_wl->kbd.focused_mutex);
g_mutex_init(&e_comp_wl->kbd.keys_mutex);
+ g_mutex_init(&e_comp_wl->kbd.repeat_delay_mutex);
+ g_mutex_init(&e_comp_wl->kbd.repeat_rate_mutex);
g_mutex_init(&e_comp_wl->xkb.keymap_mutex);
g_mutex_init(&e_comp_wl->xkb.state_mutex);
/* check for valid repeat_delay and repeat_rate value */
/* if invalid, set the default value of repeat delay and rate value */
+ g_mutex_lock(&e_comp_wl->kbd.repeat_delay_mutex);
if (e_comp_wl->kbd.repeat_delay < 0) e_comp_wl->kbd.repeat_delay = 400;
+ g_mutex_unlock(&e_comp_wl->kbd.repeat_delay_mutex);
+
+ g_mutex_lock(&e_comp_wl->kbd.repeat_rate_mutex);
if (e_comp_wl->kbd.repeat_rate < 0) e_comp_wl->kbd.repeat_rate = 25;
+ g_mutex_unlock(&e_comp_wl->kbd.repeat_rate_mutex);
/* create the global resource for input seat */
e_comp_wl->seat.global =
g_mutex_clear(&e_comp_wl->xkb.state_mutex);
g_mutex_clear(&e_comp_wl->kbd.keys_mutex);
+ g_mutex_clear(&e_comp_wl->kbd.repeat_delay_mutex);
+ g_mutex_clear(&e_comp_wl->kbd.repeat_rate_mutex);
}
EINTERN Eina_Bool
EINA_SAFETY_ON_NULL_RETURN(e_comp_wl);
+ g_mutex_lock(&e_comp_wl->kbd.repeat_delay_mutex);
e_comp_wl->kbd.repeat_delay = delay;
+ g_mutex_unlock(&e_comp_wl->kbd.repeat_delay_mutex);
+
+ g_mutex_lock(&e_comp_wl->kbd.repeat_rate_mutex);
e_comp_wl->kbd.repeat_rate = rate;
+ g_mutex_unlock(&e_comp_wl->kbd.repeat_rate_mutex);
g_mutex_lock(&e_comp_wl->kbd.resource_mutex);
+ g_mutex_lock(&e_comp_wl->kbd.repeat_delay_mutex);
+ g_mutex_lock(&e_comp_wl->kbd.repeat_rate_mutex);
EINA_LIST_FOREACH(e_comp_wl->kbd.resources, l, res)
{
if (wl_resource_get_version(res) >= WL_KEYBOARD_REPEAT_INFO_SINCE_VERSION)
wl_keyboard_send_repeat_info(res, e_comp_wl->kbd.repeat_rate,
e_comp_wl->kbd.repeat_delay);
}
-
+ g_mutex_unlock(&e_comp_wl->kbd.repeat_rate_mutex);
+ g_mutex_unlock(&e_comp_wl->kbd.repeat_delay_mutex);
g_mutex_unlock(&e_comp_wl->kbd.resource_mutex);
}
EINA_SAFETY_ON_NULL_RETURN_VAL(log_fp, reply);
fprintf(log_fp, "\tkeyboard repeat info\n");
+ g_mutex_lock(&e_comp_wl->kbd.repeat_rate_mutex);
+ g_mutex_lock(&e_comp_wl->kbd.repeat_delay_mutex);
fprintf(log_fp, "\t\trate: %d (ms), delay: %d (ms)\n", e_comp_wl->kbd.repeat_rate, e_comp_wl->kbd.repeat_delay);
+ g_mutex_unlock(&e_comp_wl->kbd.repeat_delay_mutex);
+ g_mutex_unlock(&e_comp_wl->kbd.repeat_rate_mutex);
fclose(log_fp);
log_fp = NULL;
}
else
{
+ g_mutex_lock(&e_comp_wl->kbd.repeat_delay_mutex);
if (delay <= 0) delay = e_comp_wl->kbd.repeat_delay;
+ g_mutex_unlock(&e_comp_wl->kbd.repeat_delay_mutex);
+
+ g_mutex_lock(&e_comp_wl->kbd.repeat_rate_mutex);
if (rate <= 0) rate = e_comp_wl->kbd.repeat_rate;
+ g_mutex_unlock(&e_comp_wl->kbd.repeat_rate_mutex);
e_comp_wl_input_keyboard_repeat_set(delay, rate);
}