diff options
| -rw-r--r-- | backend/libinput/events.c | 17 | ||||
| -rw-r--r-- | examples/shared.c | 5 | 
2 files changed, 17 insertions, 5 deletions
| diff --git a/backend/libinput/events.c b/backend/libinput/events.c index 0cdf26ec..9afdab21 100644 --- a/backend/libinput/events.c +++ b/backend/libinput/events.c @@ -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, diff --git a/examples/shared.c b/examples/shared.c index 6efa1bef..0605dd72 100644 --- a/examples/shared.c +++ b/examples/shared.c @@ -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); | 
