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
This commit is contained in:
parent
fa514b496e
commit
aaadc774a7
@ -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…
Reference in New Issue
Block a user