From 4d4da18437849df850b4ae199fbffb54d31c86b4 Mon Sep 17 00:00:00 2001 From: Scott Anderson Date: Sun, 6 Aug 2017 13:37:49 +1200 Subject: [PATCH] Fixed VT switching --- backend/multi/backend.c | 8 ++++++++ examples/shared.c | 11 +++++++++-- include/wlr/backend/multi.h | 2 ++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/backend/multi/backend.c b/backend/multi/backend.c index 8026e970..a5913f5d 100644 --- a/backend/multi/backend.c +++ b/backend/multi/backend.c @@ -113,3 +113,11 @@ void wlr_multi_backend_add(struct wlr_backend *multi, list_add(multi->state->backends, sub); } + +struct wlr_session *wlr_multi_get_session(struct wlr_backend *base) { + if (base->impl != &backend_impl) + return NULL; + + struct wlr_backend_state *multi = base->state; + return multi->session; +} diff --git a/examples/shared.c b/examples/shared.c index bd5f7ec5..27e5b9ca 100644 --- a/examples/shared.c +++ b/examples/shared.c @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -44,8 +45,14 @@ static void keyboard_key_notify(struct wl_listener *listener, void *data) { } if (sym == XKB_KEY_Escape) { wl_display_terminate(kbstate->compositor->display); - } else if (key_state == WLR_KEY_PRESSED && sym >= XKB_KEY_F1 && sym <= XKB_KEY_F12) { - wlr_session_change_vt(kbstate->compositor->session, sym - XKB_KEY_F1 + 1); + } else if (key_state == WLR_KEY_PRESSED && + sym >= XKB_KEY_XF86Switch_VT_1 && + sym <= XKB_KEY_XF86Switch_VT_12) { + struct wlr_session *session = + wlr_multi_get_session(kbstate->compositor->backend); + if (session) { + wlr_session_change_vt(session, sym - XKB_KEY_XF86Switch_VT_1 + 1); + } } } xkb_state_update_key(kbstate->xkb_state, keycode, diff --git a/include/wlr/backend/multi.h b/include/wlr/backend/multi.h index 8b68284d..048c4043 100644 --- a/include/wlr/backend/multi.h +++ b/include/wlr/backend/multi.h @@ -10,4 +10,6 @@ struct wlr_backend *wlr_multi_backend_create(struct wlr_session *session, void wlr_multi_backend_add(struct wlr_backend *multi, struct wlr_backend *backend); +struct wlr_session *wlr_multi_get_session(struct wlr_backend *base); + #endif