"Fix TOPMOST Mode Event Delivery Surface" 94/90794/4 accepted/tizen/3.0/ivi/20161028.133925 accepted/tizen/3.0/mobile/20161028.133032 accepted/tizen/3.0/tv/20161028.133347 accepted/tizen/3.0/wearable/20161028.133639 accepted/tizen/common/20161013.161000 accepted/tizen/ivi/20161015.000203 accepted/tizen/mobile/20161015.000141 accepted/tizen/tv/20161015.000159 accepted/tizen/wearable/20161015.000152 submit/tizen/20161013.111810 submit/tizen_3.0/20161028.062323 submit/tizen_3.0/20161028.082423 submit/tizen_3.0_common/20161104.104000
authorDhiraj Kr Mishra <dk.mishra@samsung.com>
Tue, 4 Oct 2016 08:47:03 +0000 (14:17 +0530)
committerDhiraj Kumar Mishra <dk.mishra@samsung.com>
Thu, 13 Oct 2016 08:57:18 +0000 (01:57 -0700)
If window stack changed TOPMOST mode key delivery should be sent to the surface, which has been promoted to the head of top_ptr list.
top_ptr list is being updated by _e_keyrouter_check_top_visible_window,however while sending event obselete surface data was used as a result first event was not delivering to correct surface.

Change-Id: I10364d6a478ba7d5b75186f289433df8971bea23
Signed-off-by: Dhiraj Kr Mishra <dk.mishra@samsung.com>
src/e_mod_keyrouter_events.c

index 3447968..93450d1 100644 (file)
@@ -271,14 +271,15 @@ _e_keyrouter_send_key_events_press(int type, Ecore_Event_Key *ev)
 
                   if (_e_keyrouter_check_top_visible_window(ec_focus, keycode))
                     {
-                       pid = e_keyrouter_util_get_pid(key_node_data->wc, key_node_data->surface);
+                       E_Keyrouter_Key_List_NodePtr top_key_node_data = eina_list_data_get(krt->HardKeys[keycode].top_ptr);
+                       pid = e_keyrouter_util_get_pid(top_key_node_data->wc, top_key_node_data->surface);
                        pname = e_keyrouter_util_process_name_get_from_cmd(e_keyrouter_util_cmd_get_from_pid(pid));
 
-                       res = _e_keyrouter_send_key_event(type, key_node_data->surface, NULL, ev, key_node_data->focused,
+                       res = _e_keyrouter_send_key_event(type, top_key_node_data->surface, NULL, ev, top_key_node_data->focused,
                                                          TIZEN_KEYROUTER_MODE_TOPMOST);
                        KLINF("TOPMOST (TOP_POSITION) : %s (%s:%d) => Surface (%p) (pid: %d) (pname: %s)",
                              ((ECORE_EVENT_KEY_DOWN == type) ? "Down" : "Up"), ev->keyname, ev->keycode,
-                             key_node_data->surface, pid, pname);
+                             top_key_node_data->surface, pid, pname);
 
                        E_FREE(pname);
                        return res;