diff --git a/src/wayland-server.c b/src/wayland-server.c index 89e8a81..54a684c 100644 --- a/src/wayland-server.c +++ b/src/wayland-server.c @@ -411,6 +411,7 @@ wl_input_device_init(struct wl_input_device *device) { memset(device, 0, sizeof *device); wl_list_init(&device->resource_list); + wl_array_init(&device->keys); device->pointer_focus_listener.func = lose_pointer_focus; device->keyboard_focus_listener.func = lose_keyboard_focus; @@ -418,6 +419,20 @@ wl_input_device_init(struct wl_input_device *device) device->y = 100; } +WL_EXPORT void +wl_input_device_release(struct wl_input_device *device) +{ + if (device->keyboard_focus_resource) + wl_list_remove(&device->keyboard_focus_listener.link); + + if (device->pointer_focus_resource) + wl_list_remove(&device->pointer_focus_listener.link); + + /* XXX: What about device->resource_list? */ + + wl_array_release(&device->keys); +} + static struct wl_resource * find_resource_for_surface(struct wl_list *list, struct wl_surface *surface) { diff --git a/src/wayland-server.h b/src/wayland-server.h index 5176a09..968c654 100644 --- a/src/wayland-server.h +++ b/src/wayland-server.h @@ -222,6 +222,9 @@ wl_resource_destroy(struct wl_resource *resource, uint32_t time); void wl_input_device_init(struct wl_input_device *device); +void +wl_input_device_release(struct wl_input_device *device); + void wl_input_device_set_pointer_focus(struct wl_input_device *device, struct wl_surface *surface,