keyrouter: add an api(keyrouter_key_process) for process key events following key... 76/119776/5
authorJengHyun Kang <jhyuni.kang@samsung.com>
Mon, 20 Mar 2017 10:07:24 +0000 (19:07 +0900)
committerJengHyun Kang <jhyuni.kang@samsung.com>
Tue, 21 Mar 2017 07:30:10 +0000 (16:30 +0900)
Change-Id: Id422665e2052886a300a394c9398cef8b28716de

src/lib/keyrouter/keyrouter.c
src/lib/keyrouter/keyrouter.h

index efa815866dcbf5f2241982025eb6cd2ada6f352a..0a4a401680a4f6da1a1b7e9939d9e40a66bc28fb 100644 (file)
@@ -91,6 +91,53 @@ _keyrouter_grabbed_check(keyrouter_t *keyrouter,
        return res;
 }
 
+PEPPER_API int
+keyrouter_key_process(keyrouter_t *keyrouter,
+                             int keycode, int pressed, pepper_list_t *delivery_list)
+{
+       keyrouter_key_info_t *info, *delivery;
+       int count = 0;
+
+       PEPPER_CHECK(keyrouter, return 0, "Invalid keyrouter\n");
+       PEPPER_CHECK(0 < keycode || keycode < KEYROUTER_MAX_KEYS,
+                    return 0, "Invalid keycode(%d)\n", keycode);
+       PEPPER_CHECK(delivery_list, return 0, "Invalid delivery list\n");
+
+       if (!pepper_list_empty(&keyrouter->hard_keys[keycode].grab.excl)) {
+               pepper_list_for_each(info, &keyrouter->hard_keys[keycode].grab.excl, link) {
+                       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;
+               }
+       }
+       else if (!pepper_list_empty(&keyrouter->hard_keys[keycode].grab.or_excl)) {
+               pepper_list_for_each(info, &keyrouter->hard_keys[keycode].grab.or_excl, link) {
+                       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;
+               }
+       }
+       else if (!pepper_list_empty(&keyrouter->hard_keys[keycode].grab.top)) {
+               /* Not supported yet */
+               return 0;
+       }
+       else if (!pepper_list_empty(&keyrouter->hard_keys[keycode].grab.shared)) {
+               pepper_list_for_each(info, &keyrouter->hard_keys[keycode].grab.shared, link) {
+                       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);
+                       count++;
+               }
+       }
+
+       return count;
+}
+
 PEPPER_API int
 keyrouter_grab_key(keyrouter_t *keyrouter,
                           int type,
index 582a9b16985d4db566db3b51d4d3f64e576e76f6..a1e73186a32e633c32c8203e6c321b1e9e47b8a5 100644 (file)
@@ -45,6 +45,7 @@ PEPPER_API keyrouter_t *keyrouter_create(void);
 PEPPER_API void keyrouter_destroy(keyrouter_t *keyrouter);
 PEPPER_API int keyrouter_grab_key(keyrouter_t *keyrouter, int type, int keycode, void *data);
 PEPPER_API void keyrouter_ungrab_key(keyrouter_t *keyrouter, int type, int keycode, void *data);
+PEPPER_API int keyrouter_key_process(keyrouter_t *keyrouter, int keycode, int pressed, pepper_list_t *delivery_list);
 
 #ifdef __cplusplus
 }