From a36e205e083f0ce8c78c98de8bc8c1ea3250f774 Mon Sep 17 00:00:00 2001 From: speckitor Date: Fri, 2 Jan 2026 23:15:50 +0700 Subject: [PATCH] base --- src/keyboard.c | 18 ++++++++++++++++-- src/main.c | 2 -- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/keyboard.c b/src/keyboard.c index efb6b94..9be903e 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -30,8 +30,22 @@ void keyboard_handle_key(struct wl_listener *listener, void *data) struct absinthe_keyboard *keyboard = wl_container_of(listener, keyboard, key); struct wlr_keyboard_key_event *event = data; - wlr_seat_set_keyboard(keyboard->server->seat, keyboard->wlr_keyboard); - wlr_seat_keyboard_notify_key(keyboard->server->seat, event->time_msec, event->keycode, event->state); + uint32_t keycode = event->keycode + 8; + uint32_t modifiers = wlr_keyboard_get_modifiers(keyboard->wlr_keyboard); + const xkb_keysym_t *syms; + int nsyms = xkb_state_key_get_syms(keyboard->wlr_keyboard->xkb_state, keycode, &syms); + + bool handled = false; + if ((modifiers & WLR_MODIFIER_ALT) && (event->state == WL_KEYBOARD_KEY_STATE_PRESSED)) { + for (int i = 0; i < nsyms; ++i) { + handled = keyboard_handle_keybind(keyboard->server, syms[i]); + } + } + + if (!handled) { + wlr_seat_set_keyboard(keyboard->server->seat, keyboard->wlr_keyboard); + wlr_seat_keyboard_notify_key(keyboard->server->seat, event->time_msec, event->keycode, event->state); + } } void keyboard_handle_destroy(struct wl_listener *listener, void *data) diff --git a/src/main.c b/src/main.c index a1734e5..b77ea31 100644 --- a/src/main.c +++ b/src/main.c @@ -2,7 +2,6 @@ #include #include #include -#include #include #include "types.h" @@ -44,7 +43,6 @@ int main(int argc, char **argv) wlr_compositor_create(server.display, 5, server.renderer); wlr_subcompositor_create(server.display); wlr_data_device_manager_create(server.display); - wlr_screencopy_manager_v1_create(server.display); server.output_layout = wlr_output_layout_create(server.display);