drm: Add vt switch keybindings

dev
Kristian Høgsberg 13 years ago
parent a00d60f6ac
commit 5d1c0c58ad
  1. 17
      src/compositor-drm.c
  2. 3
      src/compositor.h
  3. 6
      src/tty.c

@ -29,6 +29,7 @@
#include <string.h> #include <string.h>
#include <fcntl.h> #include <fcntl.h>
#include <unistd.h> #include <unistd.h>
#include <linux/input.h>
#include <xf86drm.h> #include <xf86drm.h>
#include <xf86drmMode.h> #include <xf86drmMode.h>
@ -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 const char default_seat[] = "seat0";
static struct weston_compositor * static struct weston_compositor *
@ -1554,6 +1565,7 @@ drm_compositor_create(struct wl_display *display,
struct udev_device *device, *drm_device; struct udev_device *device, *drm_device;
const char *path, *device_seat; const char *path, *device_seat;
struct wl_event_loop *loop; struct wl_event_loop *loop;
uint32_t key;
ec = malloc(sizeof *ec); ec = malloc(sizeof *ec);
if (ec == NULL) if (ec == NULL)
@ -1614,6 +1626,11 @@ drm_compositor_create(struct wl_display *display,
if (weston_compositor_init(&ec->base, display) < 0) if (weston_compositor_init(&ec->base, display) < 0)
return NULL; 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); wl_list_init(&ec->sprite_list);
create_sprites(ec); create_sprites(ec);

@ -518,6 +518,9 @@ tty_create(struct weston_compositor *compositor,
void void
tty_destroy(struct tty *tty); tty_destroy(struct tty *tty);
int
tty_activate_vt(struct tty *tty, int vt);
struct screenshooter * struct screenshooter *
screenshooter_create(struct weston_compositor *ec); screenshooter_create(struct weston_compositor *ec);

@ -104,6 +104,12 @@ try_open_vt(struct tty *tty)
return fd; return fd;
} }
int
tty_activate_vt(struct tty *tty, int vt)
{
return ioctl(tty->fd, VT_ACTIVATE, vt);
}
struct tty * struct tty *
tty_create(struct weston_compositor *compositor, tty_vt_func_t vt_func, tty_create(struct weston_compositor *compositor, tty_vt_func_t vt_func,
int tty_nr) int tty_nr)

Loading…
Cancel
Save