weston: set focus to null [1/1]
PD#SWPL-181047
Problem:
focus leave sysapp when switch source
Solution:
save last focus
Verify:
at301
Change-Id: I688c25134ce788df3ebd0f4254c716ac636dcaf7
Signed-off-by: leng.fang <leng.fang@amlogic.com>
diff --git a/libweston/input.c b/libweston/input.c
index 2ec5aca..958f685 100644
--- a/libweston/input.c
+++ b/libweston/input.c
@@ -1572,6 +1572,7 @@
struct wl_display *display = keyboard->seat->compositor->wl_display;
uint32_t serial;
struct wl_list *focus_resource_list;
+ struct weston_surface* last_keyboard_focus = NULL;
/* Keyboard focus on a surface without a client is equivalent to NULL
* focus as nothing would react to the keyboard events anyway.
@@ -1585,6 +1586,8 @@
if (weston_keyboard_need_enter_surface( keyboard, surface ) || surface == NULL)
{
+ if (keyboard->focus)
+ last_keyboard_focus = keyboard->focus->compositor->last_keyboard_focus;
if (!wl_list_empty(focus_resource_list) && keyboard->focus != surface) {
serial = wl_display_next_serial(display);
wl_resource_for_each(resource, focus_resource_list) {
@@ -1597,7 +1600,7 @@
move_resources(&keyboard->resource_list, focus_resource_list);
}
if ( surface == NULL && keyboard && keyboard->focus) {
- surface = keyboard->focus->compositor->last_keyboard_focus;
+ surface = last_keyboard_focus;
if (surface == keyboard->focus)
surface = NULL;
weston_log("\n %s %d, need back to surface:%p\n", __FUNCTION__,__LINE__, surface);