@ -622,6 +622,7 @@ void sway_keyboard_configure(struct sway_keyboard *keyboard) {
keymap_changed = true ;
keymap_changed = true ;
}
}
if ( keymap_changed | | config - > reloading ) {
xkb_keymap_unref ( keyboard - > keymap ) ;
xkb_keymap_unref ( keyboard - > keymap ) ;
keyboard - > keymap = keymap ;
keyboard - > keymap = keymap ;
keyboard - > effective_layout = 0 ;
keyboard - > effective_layout = 0 ;
@ -629,28 +630,35 @@ void sway_keyboard_configure(struct sway_keyboard *keyboard) {
xkb_mod_mask_t locked_mods = 0 ;
xkb_mod_mask_t locked_mods = 0 ;
if ( input_config & & input_config - > xkb_numlock > 0 ) {
if ( input_config & & input_config - > xkb_numlock > 0 ) {
xkb_mod_index_t mod_index = xkb_map_mod_get_index ( keymap , XKB_MOD_NAME_NUM ) ;
xkb_mod_index_t mod_index = xkb_map_mod_get_index ( keymap ,
XKB_MOD_NAME_NUM ) ;
if ( mod_index ! = XKB_MOD_INVALID ) {
if ( mod_index ! = XKB_MOD_INVALID ) {
locked_mods | = ( uint32_t ) 1 < < mod_index ;
locked_mods | = ( uint32_t ) 1 < < mod_index ;
}
}
}
}
if ( input_config & & input_config - > xkb_capslock > 0 ) {
if ( input_config & & input_config - > xkb_capslock > 0 ) {
xkb_mod_index_t mod_index = xkb_map_mod_get_index ( keymap , XKB_MOD_NAME_CAPS ) ;
xkb_mod_index_t mod_index = xkb_map_mod_get_index ( keymap ,
XKB_MOD_NAME_CAPS ) ;
if ( mod_index ! = XKB_MOD_INVALID ) {
if ( mod_index ! = XKB_MOD_INVALID ) {
locked_mods | = ( uint32_t ) 1 < < mod_index ;
locked_mods | = ( uint32_t ) 1 < < mod_index ;
}
}
}
}
if ( locked_mods ) {
if ( locked_mods ) {
wlr_keyboard_notify_modifiers ( wlr_device - > keyboard , 0 , 0 , locked_mods , 0 ) ;
wlr_keyboard_notify_modifiers ( wlr_device - > keyboard , 0 , 0 ,
locked_mods , 0 ) ;
uint32_t leds = 0 ;
uint32_t leds = 0 ;
for ( uint32_t i = 0 ; i < WLR_LED_COUNT ; + + i ) {
for ( uint32_t i = 0 ; i < WLR_LED_COUNT ; + + i ) {
if ( xkb_state_led_index_is_active ( wlr_device - > keyboard - > xkb_state ,
if ( xkb_state_led_index_is_active (
wlr_device - > keyboard - > xkb_state ,
wlr_device - > keyboard - > led_indexes [ i ] ) ) {
wlr_device - > keyboard - > led_indexes [ i ] ) ) {
leds | = ( 1 < < i ) ;
leds | = ( 1 < < i ) ;
}
}
}
}
wlr_keyboard_led_update ( wlr_device - > keyboard , leds ) ;
wlr_keyboard_led_update ( wlr_device - > keyboard , leds ) ;
}
}
} else {
xkb_keymap_unref ( keymap ) ;
}
int repeat_rate = 25 ;
int repeat_rate = 25 ;
if ( input_config & & input_config - > repeat_rate ! = INT_MIN ) {
if ( input_config & & input_config - > repeat_rate ! = INT_MIN ) {