wl_backend: handle Ctrl+Alt+Fn for VT switching in standalone mode

Intercept XF86Switch_VT_N keysyms and call wlr_session_change_vt()
to switch virtual terminals when running on DRM/KMS.
This commit is contained in:
Levi Neely 2026-05-14 18:50:52 +02:00
parent 90cd607b1e
commit 0801fb7d86
1 changed files with 11 additions and 0 deletions

View File

@ -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))