diff --git a/compositor/compositor-drm.c b/compositor/compositor-drm.c index 9c8e506f..d6187af4 100644 --- a/compositor/compositor-drm.c +++ b/compositor/compositor-drm.c @@ -789,6 +789,7 @@ vt_func(struct wlsc_compositor *compositor, int event) { struct drm_compositor *ec = (struct drm_compositor *) compositor; struct wlsc_output *output; + struct wlsc_input_device *input; switch (event) { case TTY_ENTER_VT: @@ -796,12 +797,16 @@ vt_func(struct wlsc_compositor *compositor, int event) drmSetMaster(ec->drm.fd); compositor->state = ec->prev_state; wlsc_compositor_damage_all(compositor); + wl_list_for_each(input, &compositor->input_device_list, link) + evdev_add_devices(ec->udev, input); break; case TTY_LEAVE_VT: compositor->focus = 0; ec->prev_state = compositor->state; compositor->state = WLSC_COMPOSITOR_SLEEPING; + wl_list_for_each(input, &compositor->input_device_list, link) + evdev_remove_devices(input); wl_list_for_each(output, &ec->base.output_list, link) drm_output_set_cursor(output, NULL); diff --git a/compositor/compositor.h b/compositor/compositor.h index 0c29de58..671be45b 100644 --- a/compositor/compositor.h +++ b/compositor/compositor.h @@ -377,6 +377,13 @@ void evdev_input_add_devices(struct wlsc_compositor *c, struct udev *udev, const char *seat); +void +evdev_add_devices(struct udev *udev, struct wlsc_input_device + *input_base); + +void +evdev_remove_devices(struct wlsc_input_device *input_base); + void evdev_input_destroy(struct wlsc_input_device *input_base); diff --git a/compositor/evdev.c b/compositor/evdev.c index 25784506..d33c6055 100644 --- a/compositor/evdev.c +++ b/compositor/evdev.c @@ -434,7 +434,7 @@ device_removed(struct udev_device *udev_device, struct evdev_input *master) fprintf(stderr, "evdev input device: removed: %s\n", devnode); } -static void +void evdev_add_devices(struct udev *udev, struct wlsc_input_device *input_base) { struct evdev_input *input = (struct evdev_input *) input_base; @@ -538,7 +538,7 @@ evdev_input_add_devices(struct wlsc_compositor *c, c->input_device = &input->base.input_device; } -static void +void evdev_remove_devices(struct wlsc_input_device *input_base) { struct evdev_input *input = (struct evdev_input *) input_base;