input: Remove wl_seat global when a seat is destroyed

The input code was relying on compositor destruction to clean up the
global, but that doesn't work when the global comes and goes dynamically.

https://bugs.freedesktop.org/show_bug.cgi?id=65913
dev
Kristian Høgsberg 11 years ago
parent fa514b496e
commit aaadc774a7
  1. 1
      src/compositor.h
  2. 8
      src/input.c

@ -437,6 +437,7 @@ struct weston_keyboard {
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;

@ -1531,8 +1531,9 @@ weston_seat_init(struct weston_seat *seat, struct weston_compositor *ec,
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;
@ -1550,7 +1551,6 @@ WL_EXPORT void
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) {
@ -1569,5 +1569,7 @@ weston_seat_release(struct weston_seat *seat)
free (seat->seat_name);
wl_display_remove_global(seat->compositor->wl_display, seat->global);
wl_signal_emit(&seat->destroy_signal, seat);
}

Loading…
Cancel
Save