@@ -1429,38 +1429,34 @@ static size_t xkb_legacy_get_mods_for_level(SDL_WaylandSeat *seat, xkb_keycode_t
14291429 }
14301430
14311431 size_t mask_idx = 0 ;
1432- struct xkb_state * state = WAYLAND_xkb_state_new (seat -> keyboard .xkb .keymap );
1433- if (state ) {
1434- const xkb_mod_mask_t keymod_masks [] = {
1435- 0 ,
1436- seat -> keyboard .xkb .shift_mask ,
1437- seat -> keyboard .xkb .caps_mask ,
1438- seat -> keyboard .xkb .shift_mask | seat -> keyboard .xkb .caps_mask ,
1439- seat -> keyboard .xkb .level3_mask ,
1440- seat -> keyboard .xkb .level3_mask | seat -> keyboard .xkb .shift_mask ,
1441- seat -> keyboard .xkb .level3_mask | seat -> keyboard .xkb .caps_mask ,
1442- seat -> keyboard .xkb .level3_mask | seat -> keyboard .xkb .shift_mask | seat -> keyboard .xkb .caps_mask ,
1443- seat -> keyboard .xkb .level5_mask ,
1444- seat -> keyboard .xkb .level5_mask | seat -> keyboard .xkb .shift_mask ,
1445- seat -> keyboard .xkb .level5_mask | seat -> keyboard .xkb .caps_mask ,
1446- seat -> keyboard .xkb .level5_mask | seat -> keyboard .xkb .shift_mask | seat -> keyboard .xkb .caps_mask
1447- };
1448- const xkb_mod_mask_t pressed_mod_mask = seat -> keyboard .xkb .shift_mask | seat -> keyboard .xkb .level3_mask | seat -> keyboard .xkb .level5_mask ;
1449- const xkb_mod_mask_t locked_mod_mask = seat -> keyboard .xkb .caps_mask ;
1450-
1451- for (size_t i = 0 ; i < SDL_arraysize (keymod_masks ); ++ i ) {
1452- WAYLAND_xkb_state_update_mask (state , keymod_masks [i ] & pressed_mod_mask , 0 , keymod_masks [i ] & locked_mod_mask , 0 , 0 , layout );
1453- if (WAYLAND_xkb_state_key_get_level (state , key , layout ) == level ) {
1454- masks_out [mask_idx ] = keymod_masks [i ];
1455-
1456- if (++ mask_idx == masks_size ) {
1457- break ;
1458- }
1432+ const xkb_mod_mask_t keymod_masks [] = {
1433+ 0 ,
1434+ seat -> keyboard .xkb .shift_mask ,
1435+ seat -> keyboard .xkb .caps_mask ,
1436+ seat -> keyboard .xkb .shift_mask | seat -> keyboard .xkb .caps_mask ,
1437+ seat -> keyboard .xkb .level3_mask ,
1438+ seat -> keyboard .xkb .level3_mask | seat -> keyboard .xkb .shift_mask ,
1439+ seat -> keyboard .xkb .level3_mask | seat -> keyboard .xkb .caps_mask ,
1440+ seat -> keyboard .xkb .level3_mask | seat -> keyboard .xkb .shift_mask | seat -> keyboard .xkb .caps_mask ,
1441+ seat -> keyboard .xkb .level5_mask ,
1442+ seat -> keyboard .xkb .level5_mask | seat -> keyboard .xkb .shift_mask ,
1443+ seat -> keyboard .xkb .level5_mask | seat -> keyboard .xkb .caps_mask ,
1444+ seat -> keyboard .xkb .level5_mask | seat -> keyboard .xkb .shift_mask | seat -> keyboard .xkb .caps_mask
1445+ };
1446+ const xkb_mod_mask_t pressed_mod_mask = seat -> keyboard .xkb .shift_mask | seat -> keyboard .xkb .level3_mask | seat -> keyboard .xkb .level5_mask ;
1447+ const xkb_mod_mask_t locked_mod_mask = seat -> keyboard .xkb .caps_mask ;
1448+
1449+ for (size_t i = 0 ; i < SDL_arraysize (keymod_masks ); ++ i ) {
1450+ WAYLAND_xkb_state_update_mask (seat -> keyboard .xkb .state , keymod_masks [i ] & pressed_mod_mask , 0 , keymod_masks [i ] & locked_mod_mask , 0 , 0 , layout );
1451+ if (WAYLAND_xkb_state_key_get_level (seat -> keyboard .xkb .state , key , layout ) == level ) {
1452+ masks_out [mask_idx ] = keymod_masks [i ];
1453+
1454+ if (++ mask_idx == masks_size ) {
1455+ break ;
14591456 }
14601457 }
1461-
1462- WAYLAND_xkb_state_unref (state );
14631458 }
1459+
14641460 return mask_idx ;
14651461}
14661462#endif
0 commit comments