@@ -111,7 +111,7 @@ impl WaylandPayload {
111111 for _ in 0 ..count[ 0 ] {
112112 self . keyboard_context . generate_key_repeat_events (
113113 & mut self . xkb ,
114- self . keymap . xkb_keymap ,
114+ & self . keymap ,
115115 self . xkb_state ,
116116 & mut self . events ,
117117 ) ;
@@ -225,7 +225,6 @@ struct KeyboardContext {
225225 /// This is the actual key being sent by Wayland, not `keysym` or Miniquad `Keycode`
226226 repeated_key : Option < core:: ffi:: c_uint > ,
227227 timerfd : core:: ffi:: c_int ,
228- keymods : KeyMods ,
229228}
230229
231230fn new_itimerspec ( ) -> libc:: itimerspec {
@@ -248,7 +247,6 @@ impl KeyboardContext {
248247 repeat_info : Default :: default ( ) ,
249248 repeated_key : None ,
250249 timerfd : unsafe { libc:: timerfd_create ( libc:: CLOCK_MONOTONIC , libc:: TFD_CLOEXEC ) } ,
251- keymods : Default :: default ( ) ,
252250 }
253251 }
254252 fn track_key_down ( & mut self , key : core:: ffi:: c_uint ) {
@@ -278,34 +276,36 @@ impl KeyboardContext {
278276 unsafe fn generate_key_repeat_events (
279277 & self ,
280278 libxkb : & mut LibXkbCommon ,
281- xkb_keymap : * mut xkb_keymap ,
279+ keymap : & XkbKeymap ,
282280 xkb_state : * mut xkb_state ,
283281 events : & mut Vec < WaylandEvent > ,
284282 ) {
285283 if let Some ( key) = self . repeated_key {
286- self . generate_key_events ( libxkb, xkb_keymap , xkb_state, key, true , events)
284+ self . generate_key_events ( libxkb, keymap , xkb_state, key, true , events)
287285 }
288286 }
289287 unsafe fn generate_key_events (
290288 & self ,
291289 libxkb : & mut LibXkbCommon ,
292- xkb_keymap : * mut xkb_keymap ,
290+ keymap : & XkbKeymap ,
293291 xkb_state : * mut xkb_state ,
294292 key : core:: ffi:: c_uint ,
295293 repeat : bool ,
296294 events : & mut Vec < WaylandEvent > ,
297295 ) {
296+ let keymods = keymap. get_keymods ( libxkb, xkb_state) ;
297+
298298 // The keycodes in Miniquad are obtained without modifiers
299- let keysym = libxkb. keymap_key_get_sym_without_mod ( xkb_keymap, key + 8 ) ;
299+ let keysym = libxkb. keymap_key_get_sym_without_mod ( keymap . xkb_keymap , key + 8 ) ;
300300 let keycode = keycodes:: translate_keysym ( keysym) ;
301- events. push ( WaylandEvent :: KeyDown ( keycode, self . keymods , repeat) ) ;
301+ events. push ( WaylandEvent :: KeyDown ( keycode, keymods, repeat) ) ;
302302
303303 // To obtain the underlying character, we do need to provide the modifiers
304304 let keysym = ( libxkb. xkb_state_key_get_one_sym ) ( xkb_state, key + 8 ) ;
305305 let chr = ( libxkb. xkb_keysym_to_utf32 ) ( keysym) ;
306306 if chr > 0 {
307307 if let Some ( chr) = char:: from_u32 ( chr) {
308- events. push ( WaylandEvent :: Char ( chr, self . keymods , repeat) ) ;
308+ events. push ( WaylandEvent :: Char ( chr, keymods, repeat) ) ;
309309 }
310310 }
311311 }
@@ -595,7 +595,6 @@ unsafe extern "C" fn keyboard_handle_leave(
595595 // Clear modifiers
596596 let display: & mut WaylandPayload = & mut * ( data as * mut _ ) ;
597597 ( display. xkb . xkb_state_update_mask ) ( display. xkb_state , 0 , 0 , 0 , 0 , 0 , 0 ) ;
598- display. keyboard_context . keymods = KeyMods :: default ( ) ;
599598 display. keyboard_context . repeated_key = None ;
600599 display. keyboard_context . enter_serial = None ;
601600 display. events . push ( WaylandEvent :: WindowMinimized ) ;
@@ -617,7 +616,6 @@ unsafe extern "C" fn keyboard_handle_key(
617616 let keysym = libxkb. keymap_key_get_sym_without_mod ( xkb_keymap, key + 8 ) ;
618617 let keycode = keycodes:: translate_keysym ( keysym) ;
619618 let keymods = display. keymap . get_keymods ( libxkb, xkb_state) ;
620- display. keyboard_context . keymods = keymods;
621619 match state {
622620 0 => {
623621 display. keyboard_context . track_key_up ( key) ;
@@ -631,7 +629,7 @@ unsafe extern "C" fn keyboard_handle_key(
631629 }
632630 display. keyboard_context . generate_key_events (
633631 libxkb,
634- xkb_keymap ,
632+ & display . keymap ,
635633 xkb_state,
636634 key,
637635 repeat,
0 commit comments