drm: Remove input devices before cancelling repaints in vt switch away
authorKristian Høgsberg <krh@bitplanet.net>
Tue, 10 Apr 2012 04:08:45 +0000 (00:08 -0400)
committerKristian Høgsberg <krh@bitplanet.net>
Tue, 10 Apr 2012 04:08:47 +0000 (00:08 -0400)
Removing the input devices will trigger events and activity that will cause
a redraw.  Do this before we put the compositor to sleep so we can cancel it
properly and avoid immediately waking the compositor again.

src/compositor-drm.c

index 3ac1083..763ffc8 100644 (file)
@@ -1504,6 +1504,11 @@ vt_func(struct weston_compositor *compositor, int event)
                }
                break;
        case TTY_LEAVE_VT:
+               wl_list_for_each(input, &compositor->input_device_list, link) {
+                       evdev_disable_udev_monitor(input);
+                       evdev_remove_devices(input);
+               }
+
                compositor->focus = 0;
                ec->prev_state = compositor->state;
                compositor->state = WESTON_COMPOSITOR_SLEEPING;
@@ -1530,11 +1535,6 @@ vt_func(struct weston_compositor *compositor, int event)
                                        drm_output->crtc_id, 0, 0,
                                        0, 0, 0, 0, 0, 0, 0, 0);
 
-               wl_list_for_each(input, &compositor->input_device_list, link) {
-                       evdev_disable_udev_monitor(input);
-                       evdev_remove_devices(input);
-               }
-
                if (weston_launcher_drm_set_master(&ec->base, ec->drm.fd, 0) < 0)
                        fprintf(stderr, "failed to drop master: %m\n");