From 5d1c0c58ad137eaa1ec31440afe0b757f3f9ab8b Mon Sep 17 00:00:00 2001 From: Kristian Høgsberg Date: Tue, 10 Apr 2012 00:11:50 -0400 Subject: drm: Add vt switch keybindings --- src/compositor-drm.c | 17 +++++++++++++++++ src/compositor.h | 3 +++ src/tty.c | 6 ++++++ 3 files changed, 26 insertions(+) diff --git a/src/compositor-drm.c b/src/compositor-drm.c index 763ffc8..8bbf867 100644 --- a/src/compositor-drm.c +++ b/src/compositor-drm.c @@ -29,6 +29,7 @@ #include #include #include +#include #include #include @@ -1542,6 +1543,16 @@ vt_func(struct weston_compositor *compositor, int event) }; } +static void +switch_vt_binding(struct wl_input_device *device, uint32_t time, + uint32_t key, uint32_t button, uint32_t axis, int32_t state, void *data) +{ + struct drm_compositor *ec = data; + + if (state) + tty_activate_vt(ec->tty, key - KEY_F1 + 1); +} + static const char default_seat[] = "seat0"; static struct weston_compositor * @@ -1554,6 +1565,7 @@ drm_compositor_create(struct wl_display *display, struct udev_device *device, *drm_device; const char *path, *device_seat; struct wl_event_loop *loop; + uint32_t key; ec = malloc(sizeof *ec); if (ec == NULL) @@ -1614,6 +1626,11 @@ drm_compositor_create(struct wl_display *display, if (weston_compositor_init(&ec->base, display) < 0) return NULL; + for (key = KEY_F1; key < KEY_F9; key++) + weston_compositor_add_binding(&ec->base, key, 0, 0, + MODIFIER_CTRL | MODIFIER_ALT, + switch_vt_binding, ec); + wl_list_init(&ec->sprite_list); create_sprites(ec); diff --git a/src/compositor.h b/src/compositor.h index a49b666..1b37356 100644 --- a/src/compositor.h +++ b/src/compositor.h @@ -518,6 +518,9 @@ tty_create(struct weston_compositor *compositor, void tty_destroy(struct tty *tty); +int +tty_activate_vt(struct tty *tty, int vt); + struct screenshooter * screenshooter_create(struct weston_compositor *ec); diff --git a/src/tty.c b/src/tty.c index 651c5cd..e029d55 100644 --- a/src/tty.c +++ b/src/tty.c @@ -104,6 +104,12 @@ try_open_vt(struct tty *tty) return fd; } +int +tty_activate_vt(struct tty *tty, int vt) +{ + return ioctl(tty->fd, VT_ACTIVATE, vt); +} + struct tty * tty_create(struct weston_compositor *compositor, tty_vt_func_t vt_func, int tty_nr) -- cgit v1.2.3