libinput backend: fill in handle_device_removed
And fix input_remove_notify accordingly
This commit is contained in:
parent
65a8999242
commit
be3a0ad065
|
@ -111,8 +111,21 @@ static void handle_device_added(struct wlr_backend_state *state,
|
|||
|
||||
static void handle_device_removed(struct wlr_backend_state *state,
|
||||
struct libinput_device *device) {
|
||||
wlr_log(L_DEBUG, "libinput device removed");
|
||||
// TODO
|
||||
list_t *devices = libinput_device_get_user_data(device);
|
||||
for (size_t i = 0; i < devices->length; i++) {
|
||||
struct wlr_input_device *wlr_device = devices->items[i];
|
||||
wlr_log(L_DEBUG, "Removing %s [%d:%d]", wlr_device->name,
|
||||
wlr_device->vendor, wlr_device->product);
|
||||
wl_signal_emit(&state->backend->events.input_remove, wlr_device);
|
||||
wlr_input_device_destroy(wlr_device);
|
||||
}
|
||||
for (size_t i = 0; i < state->devices->length; i++) {
|
||||
if (state->devices->items[i] == devices) {
|
||||
list_del(state->devices, i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
list_free(devices);
|
||||
}
|
||||
|
||||
void wlr_libinput_event(struct wlr_backend_state *state,
|
||||
|
|
|
@ -384,14 +384,13 @@ static void tablet_pad_remove(struct wlr_input_device *device, struct compositor
|
|||
if (!pstate) {
|
||||
return;
|
||||
}
|
||||
// TODO probably missing more actions
|
||||
wl_list_remove(&pstate->button.link);
|
||||
free(pstate);
|
||||
}
|
||||
|
||||
// TODO missing something that calls this on teardown
|
||||
static void input_remove_notify(struct wl_listener *listener, void *data) {
|
||||
struct wlr_input_device *device = data;
|
||||
struct compositor_state *state = wl_container_of(listener, state, input_add);
|
||||
struct compositor_state *state = wl_container_of(listener, state, input_remove);
|
||||
switch (device->type) {
|
||||
case WLR_INPUT_DEVICE_KEYBOARD:
|
||||
keyboard_remove(device, state);
|
||||
|
|
Loading…
Reference in New Issue