Handle seat removal

vencrypt
Andri Yngvason 2020-01-14 19:18:33 +00:00
parent 0cc1a70ba7
commit 017edc6ae1
3 changed files with 29 additions and 3 deletions

View File

@ -23,13 +23,15 @@ struct seat {
struct wl_seat* wl_seat; struct wl_seat* wl_seat;
struct wl_list link; struct wl_list link;
uint32_t id;
uint32_t capabilities; uint32_t capabilities;
char name[256]; char name[256];
}; };
struct seat* seat_new(struct wl_seat* wl_seat); struct seat* seat_new(struct wl_seat* wl_seat, uint32_t id);
void seat_destroy(struct seat* self); void seat_destroy(struct seat* self);
void seat_list_destroy(struct wl_list* list); void seat_list_destroy(struct wl_list* list);
struct seat* seat_find_by_name(struct wl_list* list, const char* name); struct seat* seat_find_by_name(struct wl_list* list, const char* name);
struct seat* seat_find_by_id(struct wl_list* list, uint32_t id);
struct seat* seat_first(struct wl_list* list); struct seat* seat_first(struct wl_list* list);

View File

@ -159,7 +159,7 @@ static void registry_add(void* data, struct wl_registry* registry,
if (!wl_seat) if (!wl_seat)
return; return;
struct seat* seat = seat_new(wl_seat); struct seat* seat = seat_new(wl_seat, id);
if (!seat) { if (!seat) {
wl_seat_destroy(wl_seat); wl_seat_destroy(wl_seat);
return; return;
@ -189,6 +189,18 @@ static void registry_remove(void* data, struct wl_registry* registry,
output_destroy(out); output_destroy(out);
/* TODO: If this is the selected output, exit */ /* TODO: If this is the selected output, exit */
return;
}
struct seat* seat = seat_find_by_id(&self->seats, id);
if (seat) {
wl_list_remove(&seat->link);
seat_destroy(seat);
/* TODO: If this is the selected seat, exit */
return;
} }
} }

View File

@ -44,13 +44,14 @@ static const struct wl_seat_listener seat_listener = {
.name = seat_name, .name = seat_name,
}; };
struct seat* seat_new(struct wl_seat* wl_seat) struct seat* seat_new(struct wl_seat* wl_seat, uint32_t id)
{ {
struct seat* self = calloc(1, sizeof(*self)); struct seat* self = calloc(1, sizeof(*self));
if (!self) if (!self)
return NULL; return NULL;
self->wl_seat = wl_seat; self->wl_seat = wl_seat;
self->id = id;
wl_seat_add_listener(wl_seat, &seat_listener, self); wl_seat_add_listener(wl_seat, &seat_listener, self);
@ -85,6 +86,17 @@ struct seat* seat_find_by_name(struct wl_list* list, const char* name)
return NULL; return NULL;
} }
struct seat* seat_find_by_id(struct wl_list* list, uint32_t id)
{
struct seat* seat;
wl_list_for_each(seat, list, link)
if (seat->id == id)
return seat;
return NULL;
}
struct seat* seat_first(struct wl_list* list) struct seat* seat_first(struct wl_list* list)
{ {
struct seat* seat; struct seat* seat;