compositor-drm: Fix vt switching

Don't take input or render while switched away, drop and set master correctly.
diff --git a/compositor/compositor-drm.c b/compositor/compositor-drm.c
index 11a44cc..597ff71 100644
--- a/compositor/compositor-drm.c
+++ b/compositor/compositor-drm.c
@@ -627,6 +627,26 @@
 	free(d);
 }
 
+static void
+vt_func(struct wlsc_compositor *compositor, int event)
+{
+	struct drm_compositor *ec = (struct drm_compositor *) compositor;
+
+	switch (event) {
+	case TTY_ENTER_VT:
+		compositor->focus = 1;
+		drmSetMaster(ec->drm.fd);
+		compositor->state = WLSC_COMPOSITOR_ACTIVE;
+		wlsc_compositor_damage_all(compositor);
+		break;
+	case TTY_LEAVE_VT:
+		compositor->focus = 0;
+		compositor->state = WLSC_COMPOSITOR_SLEEPING;
+		drmDropMaster(ec->drm.fd);
+		break;
+	};
+}
+
 static struct wlsc_compositor *
 drm_compositor_create(struct wl_display *display, int connector)
 {
@@ -699,7 +719,7 @@
 	ec->drm_source =
 		wl_event_loop_add_fd(loop, ec->drm.fd,
 				     WL_EVENT_READABLE, on_drm_input, ec);
-	ec->tty = tty_create(&ec->base);
+	ec->tty = tty_create(&ec->base, vt_func);
 
 	ec->udev_monitor = udev_monitor_new_from_netlink(ec->udev, "udev");
 	if (ec->udev_monitor == NULL) {