summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKristian Høgsberg <krh@redhat.com>2009-10-01 16:43:54 -0400
committerKristian Høgsberg <krh@redhat.com>2009-10-01 16:43:54 -0400
commitd2311cfba73ea92f91de1e709359ac85d564e9c7 (patch)
tree1519043f09f4d6f39f16b1d0a15fe93dd0081c63
parentbeed22b9a39a3f0cb793b986a01f63d4b8695590 (diff)
downloadwayland-d2311cfba73ea92f91de1e709359ac85d564e9c7.tar.gz
wayland-d2311cfba73ea92f91de1e709359ac85d564e9c7.tar.xz
wayland-d2311cfba73ea92f91de1e709359ac85d564e9c7.zip
Set an drop drm master on enter and leave vt
This way we can vt switch between wayland and X.
-rw-r--r--wayland-system-compositor.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/wayland-system-compositor.c b/wayland-system-compositor.c
index 9e8b50b..ee3c6d0 100644
--- a/wayland-system-compositor.c
+++ b/wayland-system-compositor.c
@@ -1355,10 +1355,16 @@ static void on_enter_vt(int signal_number, void *data)
struct wlsc_output *output;
int ret, fd;
+ fd = eglGetDisplayFD(ec->display);
+ ret = drmSetMaster(fd);
+ if (ret) {
+ fprintf(stderr, "failed to set drm master\n");
+ return;
+ }
+
ioctl(ec->tty_fd, VT_RELDISP, VT_ACKACQ);
ec->vt_active = TRUE;
- fd = eglGetDisplayFD(ec->display);
output = container_of(ec->output_list.next, struct wlsc_output, link);
while (&output->link != &ec->output_list) {
ret = drmModeSetCrtc(fd, output->crtc_id,
@@ -1376,6 +1382,14 @@ static void on_enter_vt(int signal_number, void *data)
static void on_leave_vt(int signal_number, void *data)
{
struct wlsc_compositor *ec = data;
+ int ret, fd;
+
+ fd = eglGetDisplayFD(ec->display);
+ ret = drmDropMaster(fd);
+ if (ret) {
+ fprintf(stderr, "failed to drop drm master\n");
+ return;
+ }
ioctl (ec->tty_fd, VT_RELDISP, 1);
ec->vt_active = FALSE;