if (e_comp_wl->ptr.enabled)
caps |= WL_SEAT_CAPABILITY_POINTER;
- if (e_comp_wl->kbd.enabled)
+ if (e_comp_input_key->kbd.enabled)
caps |= WL_SEAT_CAPABILITY_KEYBOARD;
if (e_comp_wl->touch.enabled)
caps |= WL_SEAT_CAPABILITY_TOUCH;
if (res == resource)
e_comp_wl->kbd.focused =
eina_list_remove_list(e_comp_wl->kbd.focused, l);
+
+ e_comp_input_key->kbd.resources =
+ eina_list_remove(e_comp_input_key->kbd.resources, resource);
+
+ EINA_LIST_FOREACH_SAFE(e_comp_input_key->kbd.focused, l, ll, res)
+ if (res == resource)
+ e_comp_input_key->kbd.focused =
+ eina_list_remove_list(e_comp_input_key->kbd.focused, l);
}
static void
xkb_mod_mask_t mod_depressed, mod_latched, mod_locked;
xkb_layout_index_t mod_group;
- if (!e_comp_wl->kbd.focused)
+ if (!e_comp_input_key->kbd.focused)
{
return;
}
serial = wl_display_next_serial(e_comp_wl->wl.disp);
- mod_depressed = atomic_load(&e_comp_wl->kbd.mod_depressed);
- mod_latched = atomic_load(&e_comp_wl->kbd.mod_latched);
- mod_locked = atomic_load(&e_comp_wl->kbd.mod_locked);
+ mod_depressed = atomic_load(&e_comp_input_key->kbd.mod_depressed);
+ mod_latched = atomic_load(&e_comp_input_key->kbd.mod_latched);
+ mod_locked = atomic_load(&e_comp_input_key->kbd.mod_locked);
- mod_group = atomic_load(&e_comp_wl->kbd.mod_group);
+ mod_group = atomic_load(&e_comp_input_key->kbd.mod_group);
- EINA_LIST_FOREACH(e_comp_wl->kbd.focused, l, res)
+ EINA_LIST_FOREACH(e_comp_input_key->kbd.focused, l, res)
{
wl_keyboard_send_enter(res, serial, surface,
- &e_comp_wl->kbd.keys);
+ &e_comp_input_key->kbd.keys);
wl_keyboard_send_modifiers(res, serial,
mod_depressed,
e_comp_wl->kbd.resources =
eina_list_append(e_comp_wl->kbd.resources, res);
+ e_comp_input_key->kbd.resources =
+ eina_list_append(e_comp_input_key->kbd.resources, res);
+
wl_resource_set_implementation(res, &_e_keyboard_interface,
e_comp->wl_comp_data,
_e_comp_wl_input_cb_keyboard_unbind);
/* 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);
+ wl_keyboard_send_repeat_info(res, e_comp_input_key->kbd.repeat_rate, e_comp_input_key->kbd.repeat_delay);
}
/* send current keymap */
if (!surface) return;
if (keyboard_get_data.client != wl_resource_get_client(surface)) return;
+ e_comp_input_key->kbd.focused = eina_list_append(e_comp_input_key->kbd.focused, res);
e_comp_wl->kbd.focused = eina_list_append(e_comp_wl->kbd.focused, res);
e_comp_wl_input_keyboard_enter_send(e_comp_wl_client_surface_get(focused));
e_comp_input_key->xkb.keymap = keymap;
/* fetch updated modifiers */
- e_comp_wl->kbd.mod_shift =
+ e_comp_input_key->kbd.mod_shift =
xkb_map_mod_get_index(keymap, XKB_MOD_NAME_SHIFT);
- e_comp_wl->kbd.mod_caps =
+ e_comp_input_key->kbd.mod_caps =
xkb_map_mod_get_index(keymap, XKB_MOD_NAME_CAPS);
- e_comp_wl->kbd.mod_ctrl =
+ e_comp_input_key->kbd.mod_ctrl =
xkb_map_mod_get_index(keymap, XKB_MOD_NAME_CTRL);
- e_comp_wl->kbd.mod_alt =
+ e_comp_input_key->kbd.mod_alt =
xkb_map_mod_get_index(keymap, XKB_MOD_NAME_ALT);
- e_comp_wl->kbd.mod_super =
+ e_comp_input_key->kbd.mod_super =
xkb_map_mod_get_index(keymap, XKB_MOD_NAME_LOGO);
if (!(tmp = xkb_map_get_as_string(keymap)))
/* send updated keymap */
TRACE_INPUT_BEGIN(wl_keyboard_send_keymap_update);
- EINA_LIST_FOREACH(e_comp_wl->kbd.resources, l, res)
+ EINA_LIST_FOREACH(e_comp_input_key->kbd.resources, l, res)
wl_keyboard_send_keymap(res, WL_KEYBOARD_KEYMAP_FORMAT_XKB_V1,
e_comp_input_key->xkb.fd,
e_comp_input_key->xkb.size);
/* get default keyboard repeat delay from configuration */
atomic_store(&e_comp_wl->kbd.repeat_delay, e_config->keyboard.repeat_delay);
+ atomic_store(&e_comp_input_key->kbd.repeat_delay, e_config->keyboard.repeat_delay);
/* check for valid repeat_delay */
/* if invalid, set the default value of repeat delay */
if (e_comp_wl->kbd.repeat_delay < 0)
atomic_store(&e_comp_wl->kbd.repeat_delay, 400);
+ if (e_comp_input_key->kbd.repeat_delay < 0)
+ atomic_store(&e_comp_input_key->kbd.repeat_delay, 400);
+
/* get default keyboard repeat rate from configuration */
atomic_store(&e_comp_wl->kbd.repeat_rate, e_config->keyboard.repeat_rate);
+ atomic_store(&e_comp_input_key->kbd.repeat_rate, e_config->keyboard.repeat_rate);
/* check for valid repeat_rate value */
/* if invalid, set the default value of repeat rate value */
if (e_comp_wl->kbd.repeat_rate < 0)
atomic_store(&e_comp_wl->kbd.repeat_rate, 25);
+ if (e_comp_input_key->kbd.repeat_rate < 0)
+ atomic_store(&e_comp_input_key->kbd.repeat_rate, 25);
+
/* create the global resource for input seat */
e_comp_wl->seat.global =
wl_global_create(e_comp_wl->wl.disp, &wl_seat_interface, 4,
wl_array_init(&e_comp_wl->kbd.keys);
wl_array_init(&e_comp_wl->kbd.routed_keys);
+ wl_array_init(&e_comp_input_key->kbd.keys);
+ wl_array_init(&e_comp_input_key->kbd.routed_keys);
E_EVENT_TEXT_INPUT_PANEL_VISIBILITY_CHANGE = ecore_event_type_new();
g_mutex_clear(&e_comp_wl->xkb.keymap_mutex);
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);
}
mod = xkb_state_serialize_mods(e_comp_input_key->xkb.state,
XKB_STATE_DEPRESSED);
- mod_depressed = atomic_load(&e_comp_wl->kbd.mod_depressed);
+ mod_depressed = atomic_load(&e_comp_input_key->kbd.mod_depressed);
changed |= mod != mod_depressed;
- atomic_store(&e_comp_wl->kbd.mod_depressed, mod);
+ atomic_store(&e_comp_input_key->kbd.mod_depressed, mod);
mod = xkb_state_serialize_mods(e_comp_input_key->xkb.state,
XKB_STATE_MODS_LATCHED);
- mod_latched = atomic_load(&e_comp_wl->kbd.mod_latched);
+ mod_latched = atomic_load(&e_comp_input_key->kbd.mod_latched);
changed |= mod != mod_latched;
- atomic_store(&e_comp_wl->kbd.mod_latched, mod);
+ atomic_store(&e_comp_input_key->kbd.mod_latched, mod);
mod = xkb_state_serialize_mods(e_comp_input_key->xkb.state,
XKB_STATE_MODS_LOCKED);
- mod_locked = atomic_load(&e_comp_wl->kbd.mod_locked);
+ mod_locked = atomic_load(&e_comp_input_key->kbd.mod_locked);
changed |= mod != mod_locked;
- atomic_store(&e_comp_wl->kbd.mod_locked, mod);
+ atomic_store(&e_comp_input_key->kbd.mod_locked, mod);
grp = xkb_state_serialize_layout(e_comp_input_key->xkb.state,
XKB_STATE_LAYOUT_EFFECTIVE);
- mod_group = atomic_load(&e_comp_wl->kbd.mod_group);
+ mod_group = atomic_load(&e_comp_input_key->kbd.mod_group);
changed |= grp != mod_group;
- atomic_store(&e_comp_wl->kbd.mod_group, grp);
+ atomic_store(&e_comp_input_key->kbd.mod_group, grp);
return changed;
}
Eina_List *l;
if (!e_comp_wl_input_keyboard_modifiers_serialize()) return;
- if (!e_comp_wl->kbd.focused)
+ if (!e_comp_input_key->kbd.focused)
{
return;
}
serial = wl_display_next_serial(e_comp_wl->wl.disp);
- EINA_LIST_FOREACH(e_comp_wl->kbd.focused, l, res)
+ EINA_LIST_FOREACH(e_comp_input_key->kbd.focused, l, res)
wl_keyboard_send_modifiers(res, serial,
- e_comp_wl->kbd.mod_depressed,
- e_comp_wl->kbd.mod_latched,
- e_comp_wl->kbd.mod_locked,
- e_comp_wl->kbd.mod_group);
+ e_comp_input_key->kbd.mod_depressed,
+ e_comp_input_key->kbd.mod_latched,
+ e_comp_input_key->kbd.mod_locked,
+ e_comp_input_key->kbd.mod_group);
}
EINTERN void
else dir = XKB_KEY_UP;
atomic_store(&e_comp_wl->kbd.mod_changed, xkb_state_update_key(e_comp_input_key->xkb.state, keycode + 8, dir));
+ atomic_store(&e_comp_input_key->kbd.mod_changed, xkb_state_update_key(e_comp_input_key->xkb.state, keycode + 8, dir));
e_comp_wl_input_keyboard_modifiers_update();
}
}
e_comp_wl->kbd.enabled = !!enabled;
+ e_comp_input_key->kbd.enabled = !!enabled;
_e_comp_wl_input_update_seat_caps(NULL);
}
if (caps & E_INPUT_SEAT_POINTER)
e_comp_wl->ptr.enabled = need_update = EINA_TRUE;
+
if (caps & E_INPUT_SEAT_KEYBOARD)
- e_comp_wl->kbd.enabled = need_update = EINA_TRUE;
+ {
+ e_comp_wl->kbd.enabled = need_update = EINA_TRUE;
+ e_comp_input_key->kbd.enabled = need_update = EINA_TRUE;
+ }
+
if (caps & E_INPUT_SEAT_TOUCH)
e_comp_wl->touch.enabled = need_update = EINA_TRUE;
atomic_store(&e_comp_wl->kbd.repeat_delay, delay);
atomic_store(&e_comp_wl->kbd.repeat_rate, rate);
- EINA_LIST_FOREACH(e_comp_wl->kbd.resources, l, res)
+ atomic_store(&e_comp_input_key->kbd.repeat_delay, delay);
+ atomic_store(&e_comp_input_key->kbd.repeat_rate, rate);
+
+ EINA_LIST_FOREACH(e_comp_input_key->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);
+ wl_keyboard_send_repeat_info(res, e_comp_input_key->kbd.repeat_rate,
+ e_comp_input_key->kbd.repeat_delay);
}
}