summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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;