diff --git a/src/backend/wayland/wl_backend.c b/src/backend/wayland/wl_backend.c index 8647c22..8509029 100644 --- a/src/backend/wayland/wl_backend.c +++ b/src/backend/wayland/wl_backend.c @@ -1667,6 +1667,17 @@ handle_keyboard_key(struct wl_listener *listener, void *data) uint32_t keycode = event->keycode + 8; /* evdev → XKB keycode */ uint32_t modifiers = wlr_keyboard_get_modifiers(kb); + /* VT switching: Ctrl+Alt+Fn */ + if (wl_state.session && event->state == WL_KEYBOARD_KEY_STATE_PRESSED && + (modifiers & (WLR_MODIFIER_CTRL | WLR_MODIFIER_ALT)) == + (WLR_MODIFIER_CTRL | WLR_MODIFIER_ALT)) { + xkb_keysym_t sym = xkb_state_key_get_one_sym(kb->xkb_state, keycode); + if (sym >= XKB_KEY_XF86Switch_VT_1 && sym <= XKB_KEY_XF86Switch_VT_12) { + wlr_session_change_vt(wl_state.session, sym - XKB_KEY_XF86Switch_VT_1 + 1); + return; + } + } + if (event->state == WL_KEYBOARD_KEY_STATE_PRESSED) { /* Try WM shortcut dispatch first */ if (wWaylandKeyPress((unsigned int)keycode, (unsigned int)modifiers))