diff --git a/include/input/keyboard.h b/include/input/keyboard.h index cb6c60ab..a81e37e3 100644 --- a/include/input/keyboard.h +++ b/include/input/keyboard.h @@ -9,8 +9,7 @@ struct seat; struct keyboard; struct wlr_keyboard; -void keyboard_init(struct seat *seat); -void keyboard_reload(struct seat *seat); +void keyboard_init(struct seat *seat, bool reconfig); void keyboard_finish(struct seat *seat); void keyboard_setup_handlers(struct keyboard *keyboard); diff --git a/src/input/input.c b/src/input/input.c index ef55ca69..42898349 100644 --- a/src/input/input.c +++ b/src/input/input.c @@ -7,7 +7,7 @@ void input_handlers_init(struct seat *seat) { cursor_init(seat); - keyboard_init(seat); + keyboard_init(seat, false); } void diff --git a/src/input/keyboard.c b/src/input/keyboard.c index 071936d3..05714b34 100644 --- a/src/input/keyboard.c +++ b/src/input/keyboard.c @@ -593,10 +593,15 @@ keyboard_update_layout(struct seat *seat, xkb_layout_index_t layout) } void -keyboard_init(struct seat *seat) +keyboard_init(struct seat *seat, bool reconfig) { - seat->keyboard_group = wlr_keyboard_group_create(); - struct wlr_keyboard *kb = &seat->keyboard_group->keyboard; + struct wlr_keyboard *kb; + if (reconfig) { + kb = wlr_seat_get_keyboard(seat->seat); + } else { + seat->keyboard_group = wlr_keyboard_group_create(); + kb = &seat->keyboard_group->keyboard; + } struct xkb_rule_names rules = { 0 }; struct xkb_context *context = xkb_context_new(XKB_CONTEXT_NO_FLAGS); struct xkb_keymap *keymap = xkb_map_new_from_names(context, &rules, @@ -613,24 +618,6 @@ keyboard_init(struct seat *seat) keybind_update_keycodes(seat->server); } -void -keyboard_reload(struct seat *seat) -{ - struct wlr_keyboard *kb = wlr_seat_get_keyboard(seat->seat); - struct xkb_rule_names rules = { 0 }; - struct xkb_context *context = xkb_context_new(XKB_CONTEXT_NO_FLAGS); - struct xkb_keymap *keymap = xkb_map_new_from_names(context, &rules, - XKB_KEYMAP_COMPILE_NO_FLAGS); - if (keymap) { - wlr_keyboard_set_keymap(kb, keymap); - xkb_keymap_unref(keymap); - } else { - wlr_log(WLR_ERROR, "Failed to create xkb keymap"); - } - xkb_context_unref(context); - wlr_keyboard_set_repeat_info(kb, rc.repeat_rate, rc.repeat_delay); -} - void keyboard_setup_handlers(struct keyboard *keyboard) { diff --git a/src/seat.c b/src/seat.c index f581ad82..73f4f8c1 100644 --- a/src/seat.c +++ b/src/seat.c @@ -537,7 +537,7 @@ seat_reconfigure(struct server *server) break; } } - keyboard_reload(seat); + keyboard_init(seat, true); } static void diff --git a/src/server.c b/src/server.c index df4aface..d0f62e29 100644 --- a/src/server.c +++ b/src/server.c @@ -61,7 +61,6 @@ reload_config_and_theme(void) regions_reconfigure(g_server); resize_indicator_reconfigure(g_server); kde_server_decoration_update_default(); - keybind_update_keycodes(g_server); } static int