]> git.mdlowis.com Git - proto/labwc.git/commitdiff
keyboard: catch C-A-F1 to C-A-F12 to switch tty
authorJohan Malm <jgm323@gmail.com>
Thu, 1 Jul 2021 16:53:47 +0000 (17:53 +0100)
committerJohan Malm <jgm323@gmail.com>
Thu, 1 Jul 2021 16:53:47 +0000 (17:53 +0100)
Fix issue #34 item 4

src/keyboard.c

index 3c90950fc49f912eee7898d660dcbe280faebe29..9d9bc8269851b8b34db3ae2167d28777ed3a88db 100644 (file)
@@ -1,6 +1,20 @@
+#include <wlr/backend/multi.h>
+#include <wlr/backend/session.h>
 #include "common/log.h"
 #include "labwc.h"
 
+static void
+change_vt(struct server *server, unsigned int vt)
+{
+       if (!wlr_backend_is_multi(server->backend)) {
+               return;
+       }
+       struct wlr_session *session = wlr_backend_get_session(server->backend);
+       if (session) {
+               wlr_session_change_vt(session, vt);
+       }
+}
+
 static void
 keyboard_modifiers_notify(struct wl_listener *listener, void *data)
 {
@@ -63,6 +77,10 @@ keyboard_key_notify(struct wl_listener *listener, void *data)
                }
        }
 
+       for (int i = 0; i < nsyms; i++) {
+               printf("m=%d; s=%d\n", modifiers, syms[i]);
+       }
+
        /* Handle compositor key bindings */
        if (event->state == WL_KEYBOARD_KEY_STATE_PRESSED) {
                for (int i = 0; i < nsyms; i++) {
@@ -70,8 +88,19 @@ keyboard_key_notify(struct wl_listener *listener, void *data)
                }
        }
 
+       /* Catch C-A-F1 to C-A-F12 to change tty */
+       if (!handled && event->state == WL_KEYBOARD_KEY_STATE_PRESSED) {
+               for (int i = 0; i < nsyms; i++) {
+                       unsigned int vt = syms[i] - XKB_KEY_XF86Switch_VT_1 + 1;
+                       if (vt >= 1 && vt <= 12) {
+                               change_vt(server, vt);
+                               handled = true;
+                       }
+               }
+       }
+
+       /* Otherwise, pass it to the client. */
        if (!handled) {
-               /* Otherwise, we pass it along to the client. */
                wlr_seat_set_keyboard(wlr_seat, device);
                wlr_seat_keyboard_notify_key(wlr_seat, event->time_msec,
                                             event->keycode, event->state);