keyrouter core: add keyrouter_set_focus/top_client APIs 53/207153/1
authorSung-Jin Park <sj76.park@samsung.com>
Tue, 23 Apr 2019 11:17:00 +0000 (20:17 +0900)
committerSung-Jin Park <sj76.park@samsung.com>
Thu, 30 May 2019 08:33:14 +0000 (17:33 +0900)
Change-Id: I92449dc34a89bf91382f7b2de40dd1269e9c3784
Signed-off-by: Sung-Jin Park <sj76.park@samsung.com>
src/lib/keyrouter/keyrouter-internal.h
src/lib/keyrouter/keyrouter.c
src/lib/keyrouter/keyrouter.h
src/lib/keyrouter/pepper-keyrouter.c

index bda57c0..379f0e3 100644 (file)
@@ -34,6 +34,9 @@ typedef struct keyrouter_grabbed keyrouter_grabbed_t;
 struct keyrouter {
        pepper_compositor_t        *compositor;
        keyrouter_grabbed_t *hard_keys;
+
+       void *focus_client;
+       void *top_client;
 };
 
 struct keyrouter_grabbed {
index 397b836..15cc3bb 100644 (file)
@@ -92,6 +92,31 @@ _keyrouter_grabbed_check(keyrouter_t *keyrouter,
        return res;
 }
 
+PEPPER_API void
+keyrouter_set_focus_client(keyrouter_t *keyrouter, void *focus_client)
+{
+       PEPPER_CHECK(keyrouter, return, "keyrouter is invalid.\n");
+       keyrouter->focus_client = focus_client;
+
+       if (focus_client)
+               PEPPER_TRACE("[%s] focus client has been set. (focus_client=0x%p)\n", __FUNCTION__, focus_client);
+       else
+               PEPPER_TRACE("[%s] focus client has been set to NULL.\n", __FUNCTION__);
+}
+
+PEPPER_API void
+keyrouter_set_top_client(keyrouter_t *keyrouter, void *top_client)
+{
+       PEPPER_CHECK(keyrouter, return, "keyrouter is invalid.\n");
+
+       keyrouter->top_client = top_client;
+
+       if (top_client)
+               PEPPER_TRACE("[%s] top client has been set. (top_client=0x%p)\n", __FUNCTION__, top_client);
+       else
+               PEPPER_TRACE("[%s] top client has been set to NULL.\n", __FUNCTION__);
+}
+
 PEPPER_API int
 keyrouter_key_process(keyrouter_t *keyrouter,
                              int keycode, int pressed, pepper_list_t *delivery_list)
index 26cd439..51ba2a8 100644 (file)
@@ -46,6 +46,9 @@ PEPPER_API int keyrouter_grab_key(keyrouter_t *keyrouter, int type, int keycode,
 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);
 
+PEPPER_API void keyrouter_set_focus_client(keyrouter_t *keyrouter, void *focus_client);
+PEPPER_API void keyrouter_set_top_client(keyrouter_t *keyrouter, void *top_client);
+
 #ifdef __cplusplus
 }
 #endif
index 8b17d53..4ad9d69 100644 (file)
@@ -62,6 +62,21 @@ struct ungrab_list_data {
        int err;
 };
 
+static struct wl_client *
+_pepper_keyrouter_get_client_from_view(pepper_view_t *view)
+{
+       pepper_surface_t *surface = pepper_view_get_surface(view);
+       PEPPER_CHECK(surface, return NULL, "No surfce available for the given view.\n");
+
+       struct wl_resource *resource = pepper_surface_get_resource(surface);
+
+       if (resource)
+               return wl_resource_get_client(resource);
+
+       return NULL;
+}
+
+
 PEPPER_API void
 pepper_keyrouter_set_seat(pepper_keyrouter_t *pepper_keyrouter, pepper_seat_t *seat)
 {
@@ -81,20 +96,18 @@ pepper_keyrouter_set_focus_view(pepper_keyrouter_t *pk, pepper_view_t *focus_vie
 {
        PEPPER_CHECK(pk, return, "pepper keyrouter is invalid.\n");
        PEPPER_CHECK(pk->keyboard, return, "No keyboard is available for pepper keyrouter.\n");
-       PEPPER_CHECK(focus_view, return, "Given focus_view is invalid.\n");
 
        pk->focus_view = focus_view;
-       PEPPER_TRACE("[%s] focus_view has been set. (focus=0x%p)\n", __FUNCTION__, focus_view);
+       keyrouter_set_focus_client(pk->keyrouter, _pepper_keyrouter_get_client_from_view(focus_view));
 }
 
 PEPPER_API void
 pepper_keyrouter_set_top_view(pepper_keyrouter_t *pk, pepper_view_t *top_view)
 {
        PEPPER_CHECK(pk, return, "pepper keyrouter is invalid.\n");
-       PEPPER_CHECK(top_view, return, "Given top_view is invalid.\n");
 
        pk->top_view = top_view;
-       PEPPER_TRACE("[%s] top_view has been set. (top=0x%p)\n", __FUNCTION__, top_view);
+       keyrouter_set_top_client(pk->keyrouter, _pepper_keyrouter_get_client_from_view(top_view));
 }
 
 static void