struct weston_seat {
struct wl_list base_resource_list;
+ struct wl_global *global;
struct weston_pointer *pointer;
struct weston_keyboard *keyboard;
struct weston_touch *touch;
wl_list_init(&seat->drag_resource_list);
wl_signal_init(&seat->destroy_signal);
- wl_display_add_global(ec->wl_display, &wl_seat_interface, seat,
- bind_seat);
+ seat->global =
+ wl_display_add_global(ec->wl_display,
+ &wl_seat_interface, seat, bind_seat);
seat->compositor = ec;
seat->modifier_state = 0;
weston_seat_release(struct weston_seat *seat)
{
wl_list_remove(&seat->link);
- /* The global object is destroyed at wl_display_destroy() time. */
#ifdef ENABLE_XKBCOMMON
if (seat->compositor->use_xkbcommon) {
free (seat->seat_name);
+ wl_display_remove_global(seat->compositor->wl_display, seat->global);
+
wl_signal_emit(&seat->destroy_signal, seat);
}