/* Deliver release clean up pressed key list */
EINA_LIST_FREE(krt->HardKeys[ev->keycode].press_ptr, 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);
+ res = _e_keyrouter_send_key_event(type, key_node_data->surface, key_node_data->wc, ev,
+ key_node_data->focused, TIZEN_KEYROUTER_MODE_PRESSED);
- pid = e_keyrouter_util_get_pid(key_node_data->wc, key_node_data->surface);
- cmd = e_keyrouter_util_cmd_get_from_pid(pid);
- pname = e_keyrouter_util_process_name_get_from_cmd(cmd);
- KLINF("Release Pair : %s(%s:%d)(Focus: %d) => wl_surface (%p) wl_client (%p) (pid: %d) (pname: %s)",
- ((ECORE_EVENT_KEY_DOWN == type) ? "Down" : "Up"), ev->keyname, ev->keycode, key_node_data->focused,
- key_node_data->surface, key_node_data->wc, pid, pname ?: "Unknown");
+ pid = e_keyrouter_util_get_pid(key_node_data->wc, key_node_data->surface);
+ cmd = e_keyrouter_util_cmd_get_from_pid(pid);
+ pname = e_keyrouter_util_process_name_get_from_cmd(cmd);
+ KLINF("Release Pair : %s(%s:%d)(Focus: %d)(Status: %d) => wl_surface (%p) wl_client (%p) (pid: %d) (pname: %s)",
+ ((ECORE_EVENT_KEY_DOWN == type) ? "Down" : "Up"), ev->keyname, ev->keycode, key_node_data->focused,
+ key_node_data->status, key_node_data->surface, key_node_data->wc, pid, pname ?: "Unknown");
- if(pname) E_FREE(pname);
- if(cmd) E_FREE(cmd);
- }
+ if (key_node_data->focused && key_node_data->status != E_KRT_CSTAT_ALIVE) ev->data = (void *)0x1;
+
+ if(pname) E_FREE(pname);
+ if(cmd) E_FREE(cmd);
E_FREE(key_node_data);
if (res == EINA_FALSE) ret = EINA_FALSE;
}
new_keyptr->surface = surface;
new_keyptr->wc = wc;
new_keyptr->focused = focused;
- new_keyptr->deleted = EINA_FALSE;
+ new_keyptr->status = E_KRT_CSTAT_ALIVE;
switch(mode)
{
{
if (mode == TIZEN_KEYROUTER_MODE_PRESSED)
{
- key_node_data->deleted = EINA_TRUE;
+ key_node_data->status = E_KRT_CSTAT_UNGRAB;
}
else
{
{
if (mode == TIZEN_KEYROUTER_MODE_PRESSED)
{
- key_node_data->deleted = EINA_TRUE;
+ key_node_data->status = E_KRT_CSTAT_UNGRAB;
}
else
{
{
if (surface == key_node_data->surface)
{
- key_node_data->deleted = EINA_TRUE;
+ key_node_data->status = E_KRT_CSTAT_DEAD;
KLDBG("Remove a Pressed key(%d) by wl_surface(%p)", i, surface);
}
}
else if ((wc == key_node_data->wc))
{
- key_node_data->deleted = EINA_TRUE;
+ key_node_data->status = E_KRT_CSTAT_DEAD;
KLDBG("Remove a Pressed key(%d) by wl_client(%p)", i, wc);
}
}
node->surface = surface;
node->wc = NULL;
node->focused = EINA_FALSE;
- node->deleted = EINA_FALSE;
+ node->status = E_KRT_CSTAT_ALIVE;
krt->HardKeys[*ddata].registered_ptr = node;
KLDBG("%d key's register wl_surface is %p", *ddata, surface);
#define TIZEN_KEYROUTER_MODE_PRESSED TIZEN_KEYROUTER_MODE_REGISTERED+1
#define TIZEN_KEYROUTER_MODE_PICTURE_OFF TIZEN_KEYROUTER_MODE_REGISTERED+2
+typedef enum _E_Keyrouter_Client_Status
+{
+ E_KRT_CSTAT_DEAD = 0,
+ E_KRT_CSTAT_ALIVE,
+ E_KRT_CSTAT_UNGRAB
+} E_Keyrouter_Client_Status;
+
typedef unsigned long Time;
extern E_KeyrouterPtr krt;
struct wl_resource *surface;
struct wl_client *wc;
Eina_Bool focused;
- Eina_Bool deleted;
+ E_Keyrouter_Client_Status status;
};
struct _E_Keyrouter_Tizen_HWKey