#include "view.h"
#include "workspaces.h"
+enum lab_key_handled {
+ LAB_KEY_HANDLED_FALSE = 0,
+ LAB_KEY_HANDLED_TRUE = 1,
+ LAB_KEY_HANDLED_TRUE_AND_VT_CHANGED,
+};
+
struct keysyms {
const xkb_keysym_t *syms;
int nr_syms;
}
static bool
-handle_change_vt_key(struct server *server, struct keysyms *translated)
+handle_change_vt_key(struct server *server, struct keyboard *keyboard,
+ struct keysyms *translated)
{
for (int i = 0; i < translated->nr_syms; i++) {
unsigned int vt =
translated->syms[i] - XKB_KEY_XF86Switch_VT_1 + 1;
if (vt >= 1 && vt <= 12) {
+ keyboard_cancel_keybind_repeat(keyboard);
change_vt(server, vt);
return true;
}
}
}
-static bool
+static enum lab_key_handled
handle_compositor_keybindings(struct keyboard *keyboard,
struct wlr_keyboard_key_event *event)
{
}
/* Catch C-A-F1 to C-A-F12 to change tty */
- if (handle_change_vt_key(server, &keyinfo.translated)) {
+ if (handle_change_vt_key(server, keyboard, &keyinfo.translated)) {
key_state_store_pressed_key_as_bound(event->keycode);
- return true;
+ return LAB_KEY_HANDLED_TRUE_AND_VT_CHANGED;
}
/*
/* any new press/release cancels current keybind repeat */
keyboard_cancel_keybind_repeat(keyboard);
- bool handled = handle_compositor_keybindings(keyboard, event);
+ enum lab_key_handled handled =
+ handle_compositor_keybindings(keyboard, event);
+
+ if (handled == LAB_KEY_HANDLED_TRUE_AND_VT_CHANGED) {
+ return;
+ }
+
if (handled) {
if (event->state == WL_KEYBOARD_KEY_STATE_PRESSED) {
start_keybind_repeat(seat->server, keyboard, event);