@@ -1623,10 +1623,11 @@ impl<T> Dispatch<wl_keyboard::WlKeyboard, ()> for WindowState<T> {
16231623 use keyboard:: * ;
16241624 use xkb_keyboard:: ElementState ;
16251625 let surface_id = state. current_surface_id ( ) ;
1626- let keyboard_state = state . keyboard_state . as_mut ( ) . unwrap ( ) ;
1626+
16271627 match event {
16281628 wl_keyboard:: Event :: Keymap { format, fd, size } => match format {
16291629 WEnum :: Value ( KeymapFormat :: XkbV1 ) => {
1630+ let keyboard_state = state. keyboard_state . as_mut ( ) . unwrap ( ) ;
16301631 let context = & mut keyboard_state. xkb_context ;
16311632 context. set_keymap_from_fd ( fd, size as usize )
16321633 }
@@ -1635,12 +1636,15 @@ impl<T> Dispatch<wl_keyboard::WlKeyboard, ()> for WindowState<T> {
16351636 }
16361637 _ => unreachable ! ( ) ,
16371638 } ,
1638- wl_keyboard:: Event :: Enter { .. } => {
1639+ wl_keyboard:: Event :: Enter { surface, .. } => {
1640+ state. update_current_surface ( Some ( surface) ) ;
1641+ let keyboard_state = state. keyboard_state . as_mut ( ) . unwrap ( ) ;
16391642 if let Some ( token) = keyboard_state. repeat_token . take ( ) {
16401643 state. to_remove_tokens . push ( token) ;
16411644 }
16421645 }
16431646 wl_keyboard:: Event :: Leave { .. } => {
1647+ let keyboard_state = state. keyboard_state . as_mut ( ) . unwrap ( ) ;
16441648 keyboard_state. current_repeat = None ;
16451649 state. message . push ( (
16461650 surface_id,
@@ -1666,6 +1670,7 @@ impl<T> Dispatch<wl_keyboard::WlKeyboard, ()> for WindowState<T> {
16661670 return ;
16671671 }
16681672 } ;
1673+ let keyboard_state = state. keyboard_state . as_mut ( ) . unwrap ( ) ;
16691674 let key = key + 8 ;
16701675 if let Some ( mut key_context) = keyboard_state. xkb_context . key_context ( ) {
16711676 let event = key_context. process_key_event ( key, pressed_state, false ) ;
@@ -1727,6 +1732,7 @@ impl<T> Dispatch<wl_keyboard::WlKeyboard, ()> for WindowState<T> {
17271732 group,
17281733 ..
17291734 } => {
1735+ let keyboard_state = state. keyboard_state . as_mut ( ) . unwrap ( ) ;
17301736 let xkb_context = & mut keyboard_state. xkb_context ;
17311737 let xkb_state = match xkb_context. state_mut ( ) {
17321738 Some ( state) => state,
@@ -1741,6 +1747,7 @@ impl<T> Dispatch<wl_keyboard::WlKeyboard, ()> for WindowState<T> {
17411747 ) )
17421748 }
17431749 wl_keyboard:: Event :: RepeatInfo { rate, delay } => {
1750+ let keyboard_state = state. keyboard_state . as_mut ( ) . unwrap ( ) ;
17441751 keyboard_state. repeat_info = if rate == 0 {
17451752 // Stop the repeat once we get a disable event.
17461753 keyboard_state. current_repeat = None ;
0 commit comments