From: jeon Date: Thu, 25 Apr 2019 01:56:50 +0000 (+0900) Subject: pepper-keyrouter: support a top position grab and deliver a key to focus before send... X-Git-Tag: accepted/tizen/unified/20190602.221747~46 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F62%2F207162%2F1;p=platform%2Fcore%2Fuifw%2Fpepper.git pepper-keyrouter: support a top position grab and deliver a key to focus before send shared grab Change-Id: I21c53b0a533043fe83d57ac131b260b372b0666b --- diff --git a/src/lib/keyrouter/keyrouter.c b/src/lib/keyrouter/keyrouter.c index 15cc3bb..e51244a 100644 --- a/src/lib/keyrouter/keyrouter.c +++ b/src/lib/keyrouter/keyrouter.c @@ -136,6 +136,7 @@ keyrouter_key_process(keyrouter_t *keyrouter, PEPPER_CHECK(delivery, return 0, "Failed to allocate memory\n"); delivery->data = info->data; pepper_list_insert(delivery_list, &delivery->link); + PEPPER_TRACE("Exclusive Mode: keycode: %d to data: %p\n", keycode, info->data); return 1; } } @@ -146,26 +147,42 @@ keyrouter_key_process(keyrouter_t *keyrouter, PEPPER_CHECK(delivery, return 0, "Failed to allocate memory\n"); delivery->data = info->data; pepper_list_insert(delivery_list, &delivery->link); + PEPPER_TRACE("OR-Excl Mode: keycode: %d to data: %p\n", keycode, info->data); return 1; } } else if (!pepper_list_empty(&keyrouter->hard_keys[keycode].grab.top)) { - info = pepper_container_of(keyrouter->hard_keys[keycode].grab.top.next, info, link); - if (info) { - delivery = (keyrouter_key_info_t *)calloc(1, sizeof(keyrouter_key_info_t)); - PEPPER_CHECK(delivery, return 0, "Failed to allocate memory\n"); - delivery->data = info->data; - pepper_list_insert(delivery_list, &delivery->link); - return 1; + pepper_list_for_each(info, &keyrouter->hard_keys[keycode].grab.top, link) { + if (keyrouter->top_client && keyrouter->top_client == info->data) { + delivery = (keyrouter_key_info_t *)calloc(1, sizeof(keyrouter_key_info_t)); + PEPPER_CHECK(delivery, return 0, "Failed to allocate memory\n"); + delivery->data = info->data; + pepper_list_insert(delivery_list, &delivery->link); + PEPPER_TRACE("Topmost Mode: keycode: %d to data: %p\n", keycode, info->data); + return 1; + } } } - else if (!pepper_list_empty(&keyrouter->hard_keys[keycode].grab.shared)) { + + if (keyrouter->focus_client) { + delivery = (keyrouter_key_info_t *)calloc(1, sizeof(keyrouter_key_info_t)); + PEPPER_CHECK(delivery, return 0, "Failed to allocate memory\n"); + delivery->data = keyrouter->focus_client; + pepper_list_insert(delivery_list, &delivery->link); + count++; + PEPPER_TRACE("Focus: keycode: %d to data: %p, count: %d\n", keycode, delivery->data, count); + } + + if (!pepper_list_empty(&keyrouter->hard_keys[keycode].grab.shared)) { pepper_list_for_each(info, &keyrouter->hard_keys[keycode].grab.shared, link) { + if (keyrouter->focus_client && keyrouter->focus_client == info->data) + continue; delivery = (keyrouter_key_info_t *)calloc(1, sizeof(keyrouter_key_info_t)); - PEPPER_CHECK(delivery, return 0, "Failed to allocate memory\n"); + PEPPER_CHECK(delivery, return count, "Failed to allocate memory\n"); delivery->data = info->data; pepper_list_insert(delivery_list, &delivery->link); count++; + PEPPER_TRACE("Shared: keycode: %d to data: %p, count: %d\n", keycode, info->data, count); } } diff --git a/src/lib/keyrouter/pepper-keyrouter.c b/src/lib/keyrouter/pepper-keyrouter.c index 1333ef8..325c04c 100644 --- a/src/lib/keyrouter/pepper-keyrouter.c +++ b/src/lib/keyrouter/pepper-keyrouter.c @@ -271,7 +271,7 @@ _pepper_keyrouter_key_send(pepper_keyrouter_t *pepper_keyrouter, if (wl_resource_get_client(resource) == client) { wl_keyboard_send_key(resource, wl_display_get_serial(pepper_keyrouter->display), time, key, state); - PEPPER_TRACE("[%s] key : %d, state : %d, time : %d\n", __FUNCTION__, key, state, time); + PEPPER_TRACE("[%s] key : %d, state : %d, time : %lu\n", __FUNCTION__, key, state, time); } } }