Eina_List *l, *ll;
struct wl_resource *res;
E_Seat *seat;
+
+ if (!e_seat_keyboard_check(resource)) return WL_ITERATOR_CONTINUE;
seat = wl_resource_get_user_data(resource);
if (!seat) return WL_ITERATOR_CONTINUE;
}
g_rec_mutex_unlock(&seat->kbd.focused_mutex);
+ wl_resource_set_user_data(resource, NULL);
+
return WL_ITERATOR_CONTINUE;
}
E_FREE(seat->name);
- g_rec_mutex_clear(&seat->kbd.resources_mutex);
- g_rec_mutex_clear(&seat->kbd.focused_mutex);
-
wl_array_release(&seat->kbd.keys);
+ g_rec_mutex_lock(&seat->kbd.resources_mutex);
EINA_LIST_FREE(seat->kbd.resources, res)
wl_resource_destroy(res);
seat->kbd.resources = eina_list_free(seat->kbd.resources);
+ g_rec_mutex_unlock(&seat->kbd.resources_mutex);
+
+ g_rec_mutex_lock(&seat->kbd.focused_mutex);
+ seat->kbd.focused = eina_list_free(seat->kbd.focused);
+ g_rec_mutex_unlock(&seat->kbd.focused_mutex);
+
EINA_LIST_FREE(seat->ptr.resources, res)
wl_resource_destroy(res);
EINA_LIST_FREE(seat->touch.resources, res)
_seats = eina_list_remove(_seats, seat);
wl_global_destroy(seat->global);
+ g_rec_mutex_clear(&seat->kbd.resources_mutex);
+ g_rec_mutex_clear(&seat->kbd.focused_mutex);
+
E_FREE(seat);
}