compositor-drm: remove/add evdev devices when vt switches

Reported-by: Ran Benite <ran234@gmail.com>
Signed-off-by: Tiago Vignatti <tiago.vignatti@intel.com>
This commit is contained in:
Tiago Vignatti 2011-12-19 00:32:48 +02:00
parent 9e2be08418
commit 6e2d5f14e8
3 changed files with 14 additions and 2 deletions

View File

@ -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);

View File

@ -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);

View File

@ -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;