pepper-keyrouter: support a top position grab and deliver a key to focus before send... 62/207162/1
authorjeon <jhyuni.kang@samsung.com>
Thu, 25 Apr 2019 01:56:50 +0000 (10:56 +0900)
committerSung-Jin Park <sj76.park@samsung.com>
Thu, 30 May 2019 08:33:31 +0000 (17:33 +0900)
Change-Id: I21c53b0a533043fe83d57ac131b260b372b0666b

src/lib/keyrouter/keyrouter.c
src/lib/keyrouter/pepper-keyrouter.c

index 15cc3bb..e51244a 100644 (file)
@@ -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);
                }
        }
 
index 1333ef8..325c04c 100644 (file)
@@ -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);
                }
        }
 }