}
static void
-_e_comp_wl_key_send(Ecore_Event_Key *ev, E_Device *dev, enum wl_keyboard_key_state state, Eina_List *key_list, E_Client *ec)
+_e_comp_wl_key_send_to_focused_list(Ecore_Event_Key *ev, E_Device *dev, enum wl_keyboard_key_state state, E_Client *ec)
{
struct wl_resource *res;
Eina_List *l;
comp_conf = e_comp_config_get();
- if (ec && ec->comp_data)
- {
- struct wl_resource *surface = e_comp_wl_client_surface_get(ec);
-
- if (surface)
- wc = wl_resource_get_client(surface);
- }
+ struct wl_resource *surface = e_comp_wl_client_surface_get(ec);
+ if (surface)
+ wc = wl_resource_get_client(surface);
if (e_config->key_input_ttrace_enable)
{
}
}
- EINA_LIST_FOREACH(key_list, l, res)
+ g_rec_mutex_lock(&e_comp_input_key->kbd.focused_mutex);
+ EINA_LIST_FOREACH(e_comp_input_key->kbd.focused, l, res)
{
if (wl_resource_get_client(res) != wc) continue;
keycode, state);
TRACE_INPUT_END();
}
+ g_rec_mutex_unlock(&e_comp_input_key->kbd.focused_mutex);
if (e_config->key_input_ttrace_enable)
{
}
keycode = (ev->keycode - 8);
- if (!e_comp_wl_get()) return EINA_FALSE;
#ifndef E_RELEASE_BUILD
if ((ev->modifiers & ECORE_EVENT_MODIFIER_CTRL) &&
ec = e_zone_focused_client_get(zone);
ELOGF("INPUT", "Key Down. seat:%s zone_id:%d", ec, seat_name, e_zone_id_get(zone));
- if (ec && ec->comp_data)
+ g_rec_mutex_lock(&e_comp_input_key->kbd.focused_mutex);
+ if (!e_comp_input_key->kbd.focused)
{
- g_rec_mutex_lock(&e_comp_input_key->kbd.focused_mutex);
- if (e_comp_input_key->kbd.focused)
- {
- _e_comp_wl_key_send(ev, dev, WL_KEYBOARD_KEY_STATE_PRESSED, e_comp_input_key->kbd.focused, ec);
+ g_rec_mutex_unlock(&e_comp_input_key->kbd.focused_mutex);
+ goto end;
+ }
+ g_rec_mutex_unlock(&e_comp_input_key->kbd.focused_mutex);
- /* A key only sent to clients is added to the list */
- e_comp_input_key->kbd.keys.size = (const char *)end - (const char *)e_comp_input_key->kbd.keys.data;
+ _e_comp_wl_key_send_to_focused_list(ev, dev, WL_KEYBOARD_KEY_STATE_PRESSED, ec);
- if (!(k = wl_array_add(&e_comp_input_key->kbd.keys, sizeof(*k))))
- {
- DBG("wl_array_add: Out of memory\n");
- g_rec_mutex_unlock(&e_comp_input_key->kbd.focused_mutex);
- return EINA_FALSE;
- }
- k->key = keycode;
- k->dev = ev->dev;
- }
- g_rec_mutex_unlock(&e_comp_input_key->kbd.focused_mutex);
+ /* A key only sent to clients is added to the list */
+ e_comp_input_key->kbd.keys.size = (const char *)end - (const char *)e_comp_input_key->kbd.keys.data;
+ if (!(k = wl_array_add(&e_comp_input_key->kbd.keys, sizeof(*k))))
+ {
+ DBG("wl_array_add: Out of memory\n");
+ return EINA_FALSE;
}
+ k->key = keycode;
+ k->dev = ev->dev;
}
+end:
/* update modifier state */
e_comp_wl_input_keyboard_state_update(keycode, EINA_TRUE);
keycode = (ev->keycode - 8);
delivered_key = 0;
- if (!(e_comp_wl_get())) return EINA_FALSE;
end = (E_Comp_Wl_Key_Data *)e_comp_input_key->kbd.keys.data + (e_comp_input_key->kbd.keys.size / sizeof(*k));
for (k = e_comp_input_key->kbd.keys.data; k < end; k++)
ELOGF("INPUT", "Key Up. seat:%s zone_id:%d", ec, seat_name, e_zone_id_get(zone));
g_rec_mutex_lock(&e_comp_input_key->kbd.focused_mutex);
- if (e_comp_input_key->kbd.focused)
+ if (!e_comp_input_key->kbd.focused)
{
- _e_comp_wl_key_send(ev, dev, WL_KEYBOARD_KEY_STATE_RELEASED, e_comp_input_key->kbd.focused, ec);
+ g_rec_mutex_unlock(&e_comp_input_key->kbd.focused_mutex);
+ goto end;
}
g_rec_mutex_unlock(&e_comp_input_key->kbd.focused_mutex);
+
+ _e_comp_wl_key_send_to_focused_list(ev, dev, WL_KEYBOARD_KEY_STATE_RELEASED, ec);
}
+end:
/* update modifier state */
e_comp_wl_input_keyboard_state_update(keycode, EINA_FALSE);