/* Deliver release clean up pressed key list */
EINA_LIST_FREE(krt->HardKeys[ev->keycode].press_ptr, key_node_data)
{
- if (key_node_data)
+ if (!key_node_data->deleted)
{
res = _e_keyrouter_send_key_event(type, key_node_data->surface, key_node_data->wc, ev,
key_node_data->focused, TIZEN_KEYROUTER_MODE_PRESSED);
KLINF("Release Pair : Key %s(%s:%d)(Focus: %d) ===> E_Client (%p) WL_Client (%p) (pid: %d)\n",
((ECORE_EVENT_KEY_DOWN == type) ? "Down" : "Up"), ev->keyname, ev->keycode, key_node_data->focused,
key_node_data->surface, key_node_data->wc, e_keyrouter_util_get_pid(key_node_data->wc, key_node_data->surface));
- E_FREE(key_node_data);
- if (res == EINA_FALSE) ret = EINA_FALSE;
}
+ E_FREE(key_node_data);
+ if (res == EINA_FALSE) ret = EINA_FALSE;
}
krt->HardKeys[ev->keycode].press_ptr = NULL;
krt->isRegisterDelivery = EINA_FALSE;
new_keyptr->surface = surface;
new_keyptr->wc = wc;
new_keyptr->focused = focused;
+ new_keyptr->deleted = EINA_FALSE;
switch(mode)
{
{
if (surface == key_node_data->surface)
{
- krt->HardKeys[i].press_ptr = eina_list_remove_list(krt->HardKeys[i].press_ptr, l);
- E_FREE(key_node_data);
+ key_node_data->deleted = EINA_TRUE;
KLINF("Remove a Pressed key(%d) by surface(%p)\n", i, surface);
}
}
else if ((wc == key_node_data->wc))
{
- krt->HardKeys[i].press_ptr = eina_list_remove_list(krt->HardKeys[i].press_ptr, l);
- E_FREE(key_node_data);
+ key_node_data->deleted = EINA_TRUE;
KLINF("Remove a Pressed key(%d) by wc(%p)\n", i, wc);
}
}
node->surface = surface;
node->wc = NULL;
node->focused = EINA_FALSE;
+ node->deleted = EINA_FALSE;
krt->HardKeys[*ddata].registered_ptr = node;
KLDBG("%d key's register surface is %p\n", *ddata, surface);
struct wl_resource *surface;
struct wl_client *wc;
Eina_Bool focused;
+ Eina_Bool deleted;
};
struct _E_Keyrouter_Tizen_HWKey