From 651bd3b4fbdf97b24fe9719b404d12f727e57133 Mon Sep 17 00:00:00 2001 From: lsj119 Date: Wed, 24 Apr 2019 15:36:01 +0900 Subject: [PATCH] keyrouter: check NULL view Change-Id: Ib7e1b4f8a8ad74752a4f40a22d15b055e5d2eeeb --- src/bin/headless/input.c | 9 +++++++-- src/lib/keyrouter/pepper-keyrouter.c | 14 ++++++++++++-- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/bin/headless/input.c b/src/bin/headless/input.c index 7569867..d265ba9 100644 --- a/src/bin/headless/input.c +++ b/src/bin/headless/input.c @@ -146,8 +146,11 @@ headless_input_set_focus_view(pepper_compositor_t *compositor, pepper_view_t *fo { if (hi->focus_view) pepper_keyboard_send_leave(hi->keyboard, hi->focus_view); - pepper_keyboard_set_focus(hi->keyboard, focus_view); - pepper_keyboard_send_enter(hi->keyboard, focus_view); + + if (focus_view) { + pepper_keyboard_set_focus(hi->keyboard, focus_view); + pepper_keyboard_send_enter(hi->keyboard, focus_view); + } hi->focus_view = focus_view; } @@ -163,6 +166,8 @@ headless_input_set_top_view(void *compositor, pepper_view_t *top_view) hi = (headless_input_t *)pepper_object_get_user_data((pepper_object_t *) compositor, &KEY_INPUT); PEPPER_CHECK(hi, return, "Invalid headless input.\n"); + if (hi->top_view == top_view) return; + hi->top_view = top_view; if (hi->keyrouter) diff --git a/src/lib/keyrouter/pepper-keyrouter.c b/src/lib/keyrouter/pepper-keyrouter.c index 53c2669..1333ef8 100644 --- a/src/lib/keyrouter/pepper-keyrouter.c +++ b/src/lib/keyrouter/pepper-keyrouter.c @@ -230,20 +230,30 @@ pepper_keyrouter_set_keyboard(pepper_keyrouter_t * pepper_keyrouter, pepper_keyb PEPPER_API void pepper_keyrouter_set_focus_view(pepper_keyrouter_t *pk, pepper_view_t *focus_view) { + struct wl_client *client = NULL; PEPPER_CHECK(pk, return, "pepper keyrouter is invalid.\n"); PEPPER_CHECK(pk->keyboard, return, "No keyboard is available for pepper keyrouter.\n"); pk->focus_view = focus_view; - keyrouter_set_focus_client(pk->keyrouter, _pepper_keyrouter_get_client_from_view(focus_view)); + + if (focus_view) + client = _pepper_keyrouter_get_client_from_view(focus_view); + + keyrouter_set_focus_client(pk->keyrouter, client); } PEPPER_API void pepper_keyrouter_set_top_view(pepper_keyrouter_t *pk, pepper_view_t *top_view) { + struct wl_client *client = NULL; PEPPER_CHECK(pk, return, "pepper keyrouter is invalid.\n"); pk->top_view = top_view; - keyrouter_set_top_client(pk->keyrouter, _pepper_keyrouter_get_client_from_view(top_view)); + + if (top_view) + client = _pepper_keyrouter_get_client_from_view(top_view); + + keyrouter_set_top_client(pk->keyrouter, client); } static void -- 2.34.1