From: JengHyun Kang Date: Wed, 30 Sep 2015 10:13:05 +0000 (+0900) Subject: Add exception codes to prevent a crash when a focus surface is not set X-Git-Tag: submit/tizen/20151001.011334~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9b0a70caaf5e3b69dd8f7ed69af2cb559eb23268;p=platform%2Fcore%2Fuifw%2Fe-mod-tizen-keyrouter.git Add exception codes to prevent a crash when a focus surface is not set Change-Id: I189efc98b9475fa2a222b4bb3ce44b576d0f13d8 --- diff --git a/src/e_mod_main_wl.c b/src/e_mod_main_wl.c index aeba0b0..7ab58d5 100644 --- a/src/e_mod_main_wl.c +++ b/src/e_mod_main_wl.c @@ -487,30 +487,34 @@ _e_keyrouter_send_key_events_press(int type, Ecore_Event_Key *ev) ec_focus = e_client_focused_get(); surface_focus = _e_keyrouter_util_get_surface_from_eclient(ec_focus); - EINA_LIST_FOREACH(krt->HardKeys[keycode].top_ptr, l, key_node_data) + // Top position grab must need a focus surface. + if (surface_focus) { - if (key_node_data) + EINA_LIST_FOREACH(krt->HardKeys[keycode].top_ptr, l, key_node_data) { - if ((EINA_FALSE == krt->isWindowStackChanged) && (surface_focus == key_node_data->surface)) + if (key_node_data) { - _e_keyrouter_send_key_event(type, key_node_data->surface, NULL, ev); - KLDBG("TOPMOST (TOP_POSITION) Mode : Key %s (%d) ===> Surface (%p)\n", - ((ECORE_EVENT_KEY_DOWN == type) ? "Down" : "Up"), ev->keycode, key_node_data->surface); + if ((EINA_FALSE == krt->isWindowStackChanged) && (surface_focus == key_node_data->surface)) + { + _e_keyrouter_send_key_event(type, key_node_data->surface, NULL, ev); + KLDBG("TOPMOST (TOP_POSITION) Mode : Key %s (%d) ===> Surface (%p)\n", + ((ECORE_EVENT_KEY_DOWN == type) ? "Down" : "Up"), ev->keycode, key_node_data->surface); - return EINA_TRUE; - } - krt->isWindowStackChanged = EINA_FALSE; + return EINA_TRUE; + } + krt->isWindowStackChanged = EINA_FALSE; - c = e_comp_find_by_window(ev->window); - if (_e_keyrouter_check_top_visible_window(c, ec_focus, keycode)) - { - _e_keyrouter_send_key_event(type, key_node_data->surface, NULL, ev); - KLDBG("TOPMOST (TOP_POSITION) Mode : Key %s (%d) ===> Surface (%p)\n", - ((ECORE_EVENT_KEY_DOWN == type) ? "Down" : "Up"), ev->keycode,key_node_data->surface); + c = e_comp_find_by_window(ev->window); + if (_e_keyrouter_check_top_visible_window(c, ec_focus, keycode)) + { + _e_keyrouter_send_key_event(type, key_node_data->surface, NULL, ev); + KLDBG("TOPMOST (TOP_POSITION) Mode : Key %s (%d) ===> Surface (%p)\n", + ((ECORE_EVENT_KEY_DOWN == type) ? "Down" : "Up"), ev->keycode,key_node_data->surface); - return EINA_TRUE; + return EINA_TRUE; + } + break; } - break; } } @@ -535,7 +539,7 @@ _e_keyrouter_send_key_events_press(int type, Ecore_Event_Key *ev) } else { - if (key_node_data->wc != wl_resource_get_client(surface_focus)) + if ((surface_focus) && (key_node_data->wc != wl_resource_get_client(surface_focus))) { _e_keyrouter_send_key_event(type, key_node_data->surface, key_node_data->wc, ev); KLDBG("SHARED Mode : Key %s(%d) ===> Surface (%p) WL_Client (%p)\n", @@ -617,6 +621,12 @@ _e_keyrouter_send_key_event(int type, struct wl_resource *surface, struct wl_cli wc_send = wl_resource_get_client(surface); } + if (!wc_send) + { + KLDBG("surface: %p or wc: %p returns null wayland client\n", surface, wc); + return; + } + if (ECORE_EVENT_KEY_DOWN == type) { e_keyrouter_prepend_to_keylist(surface, wc, ev->keycode, TIZEN_KEYROUTER_MODE_PRESSED);