compositor-drm: remove/add evdev devices when vt switches
authorTiago Vignatti <tiago.vignatti@intel.com>
Sun, 18 Dec 2011 22:32:48 +0000 (00:32 +0200)
committerTiago Vignatti <tiago.vignatti@intel.com>
Sun, 18 Dec 2011 23:08:16 +0000 (01:08 +0200)
Reported-by: Ran Benite <ran234@gmail.com>
Signed-off-by: Tiago Vignatti <tiago.vignatti@intel.com>
compositor/compositor-drm.c
compositor/compositor.h
compositor/evdev.c

index 9c8e506..d6187af 100644 (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);
 
index 0c29de5..671be45 100644 (file)
@@ -378,6 +378,13 @@ 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);
 
 enum {
index 2578450..d33c605 100644 (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;