summaryrefslogtreecommitdiff
path: root/libweston/input.c
diff options
context:
space:
mode:
Diffstat (limited to 'libweston/input.c')
-rw-r--r--libweston/input.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/libweston/input.c b/libweston/input.c
index 3f616941..3e91c266 100644
--- a/libweston/input.c
+++ b/libweston/input.c
@@ -1460,6 +1460,14 @@ weston_keyboard_set_focus(struct weston_keyboard *keyboard,
uint32_t serial;
struct wl_list *focus_resource_list;
+ /* Keyboard focus on a surface without a client is equivalent to NULL
+ * focus as nothing would react to the keyboard events anyway.
+ * Just set focus to NULL instead - the destroy listener hangs on the
+ * wl_resource anyway.
+ */
+ if (surface && !surface->resource)
+ surface = NULL;
+
focus_resource_list = &keyboard->focus_resource_list;
if (!wl_list_empty(focus_resource_list) && keyboard->focus != surface) {
@@ -1495,7 +1503,7 @@ weston_keyboard_set_focus(struct weston_keyboard *keyboard,
wl_list_remove(&keyboard->focus_resource_listener.link);
wl_list_init(&keyboard->focus_resource_listener.link);
- if (surface && surface->resource)
+ if (surface)
wl_resource_add_destroy_listener(surface->resource,
&keyboard->focus_resource_listener);