KLINF("Server create a new cache file: %s", e_comp_wl_input_keymap_path_get(names));
res = unlink(e_comp_wl_input_keymap_path_get(names));
+ g_rec_mutex_lock(&e_comp_input_key->xkb.keymap_mutex);
e_comp_wl_input_keymap_set(NULL, NULL, NULL, NULL, NULL, xkb_context_ref(e_comp_input_key->xkb.context), xkb_keymap_ref(e_comp_input_key->xkb.keymap));
+ g_rec_mutex_unlock(&e_comp_input_key->xkb.keymap_mutex);
}
else
KLINF("Currently cache file is exist. Do not change it.");
if (pressed) dir = XKB_KEY_DOWN;
else dir = XKB_KEY_UP;
+ g_rec_mutex_lock(&e_comp_input_key->xkb.keymap_mutex);
atomic_store(&e_comp_input_key->kbd.mod_changed, xkb_state_update_key(e_comp_input_key->xkb.state, keycode + 8, dir));
+ g_rec_mutex_unlock(&e_comp_input_key->xkb.keymap_mutex);
e_comp_wl_input_keyboard_modifiers_update();
}
E_API int
e_comp_wl_input_keymap_keyname_to_keycode(const char * name)
{
- struct xkb_keymap *keymap = NULL;
xkb_keysym_t keysym = 0x0;
int keycode = 0;
char *name_tmp;
EINA_SAFETY_ON_NULL_RETURN_VAL(name, 0);
EINA_SAFETY_ON_NULL_RETURN_VAL(e_comp_wl_get(), 0);
- g_rec_mutex_lock(&e_comp_input_key->xkb.keymap_mutex);
- keymap = e_comp_input_key->xkb.keymap;
- g_rec_mutex_unlock(&e_comp_input_key->xkb.keymap_mutex);
- EINA_SAFETY_ON_NULL_GOTO(keymap, finish);
-
keysym = xkb_keysym_from_name(name, XKB_KEYSYM_NO_FLAGS);
if (keysym == XKB_KEY_NoSymbol)
{
}
g_rec_mutex_lock(&e_comp_input_key->xkb.keymap_mutex);
- keycode = _e_comp_wl_input_keymap_keysym_to_keycode(keymap, keysym);
+ if (!e_comp_input_key->xkb.keymap)
+ {
+ g_rec_mutex_unlock(&e_comp_input_key->xkb.keymap_mutex);
+ goto finish;
+ }
+ keycode = _e_comp_wl_input_keymap_keysym_to_keycode(e_comp_input_key->xkb.keymap, keysym);
g_rec_mutex_unlock(&e_comp_input_key->xkb.keymap_mutex);
return keycode;