@@ -9,7 +9,7 @@ use sctk::reexports::client::protocol::wl_keyboard::{
99 Event as WlKeyboardEvent , KeyState as WlKeyState , KeymapFormat as WlKeymapFormat , WlKeyboard ,
1010} ;
1111use sctk:: reexports:: client:: protocol:: wl_seat:: WlSeat ;
12- use sctk:: reexports:: client:: { Connection , Dispatch , Proxy , QueueHandle , WEnum } ;
12+ use sctk:: reexports:: client:: { Connection , Dispatch , Proxy , QueueHandle } ;
1313use tracing:: warn;
1414use winit_common:: xkb:: Context ;
1515use winit_core:: event:: { ElementState , WindowEvent } ;
@@ -19,16 +19,16 @@ use crate::WindowId;
1919use crate :: event_loop:: sink:: EventSink ;
2020use crate :: state:: WinitState ;
2121
22- impl Dispatch < WlKeyboard , KeyboardData , WinitState > for WinitState {
22+ impl Dispatch < WlKeyboard , WinitState > for KeyboardData {
2323 fn event (
24+ & self ,
2425 state : & mut WinitState ,
2526 wl_keyboard : & WlKeyboard ,
2627 event : <WlKeyboard as Proxy >:: Event ,
27- data : & KeyboardData ,
2828 _: & Connection ,
2929 _: & QueueHandle < WinitState > ,
3030 ) {
31- let seat_state = match state. seats . get_mut ( & data . seat . id ( ) ) {
31+ let seat_state = match state. seats . get_mut ( & self . seat . id ( ) ) {
3232 Some ( seat_state) => seat_state,
3333 None => {
3434 warn ! ( "Received keyboard event {event:?} without seat" ) ;
@@ -45,19 +45,14 @@ impl Dispatch<WlKeyboard, KeyboardData, WinitState> for WinitState {
4545
4646 match event {
4747 WlKeyboardEvent :: Keymap { format, fd, size } => match format {
48- WEnum :: Value ( format) => match format {
49- WlKeymapFormat :: NoKeymap => {
50- warn ! ( "non-xkb compatible keymap" )
51- } ,
52- WlKeymapFormat :: XkbV1 => {
53- let context = & mut keyboard_state. xkb_context ;
54- context. set_keymap_from_fd ( fd, size as usize ) ;
55- } ,
56- _ => unreachable ! ( ) ,
48+ WlKeymapFormat :: NoKeymap => {
49+ warn ! ( "non-xkb compatible keymap" )
5750 } ,
58- WEnum :: Unknown ( value) => {
59- warn ! ( "unknown keymap format 0x{:x}" , value)
51+ WlKeymapFormat :: XkbV1 => {
52+ let context = & mut keyboard_state. xkb_context ;
53+ context. set_keymap_from_fd ( fd, size as usize ) ;
6054 } ,
55+ _ => warn ! ( "unknown keymap format {:?}" , format) ,
6156 } ,
6257 WlKeyboardEvent :: Enter { surface, .. } => {
6358 let window_id = crate :: make_wid ( & surface) ;
@@ -67,7 +62,7 @@ impl Dispatch<WlKeyboard, KeyboardData, WinitState> for WinitState {
6762 Some ( window) => {
6863 let mut window = window. lock ( ) . unwrap ( ) ;
6964 let was_unfocused = !window. has_focus ( ) ;
70- window. add_seat_focus ( data . seat . id ( ) ) ;
65+ window. add_seat_focus ( self . seat . id ( ) ) ;
7166 was_unfocused
7267 } ,
7368 None => return ,
@@ -79,7 +74,7 @@ impl Dispatch<WlKeyboard, KeyboardData, WinitState> for WinitState {
7974 keyboard_state. loop_handle . remove ( token) ;
8075 }
8176
82- * data . window_id . lock ( ) . unwrap ( ) = Some ( window_id) ;
77+ * self . window_id . lock ( ) . unwrap ( ) = Some ( window_id) ;
8378
8479 // The keyboard focus is considered as general focus.
8580 if was_unfocused {
@@ -109,15 +104,15 @@ impl Dispatch<WlKeyboard, KeyboardData, WinitState> for WinitState {
109104 let focused = match state. windows . get_mut ( ) . get ( & window_id) {
110105 Some ( window) => {
111106 let mut window = window. lock ( ) . unwrap ( ) ;
112- window. remove_seat_focus ( & data . seat . id ( ) ) ;
107+ window. remove_seat_focus ( & self . seat . id ( ) ) ;
113108 window. has_focus ( )
114109 } ,
115110 None => return ,
116111 } ;
117112
118113 // We don't need to update it above, because the next `Enter` will overwrite
119114 // anyway.
120- * data . window_id . lock ( ) . unwrap ( ) = None ;
115+ * self . window_id . lock ( ) . unwrap ( ) = None ;
121116
122117 if !focused {
123118 // Notify that no modifiers are being pressed.
@@ -129,14 +124,14 @@ impl Dispatch<WlKeyboard, KeyboardData, WinitState> for WinitState {
129124 state. events_sink . push_window_event ( WindowEvent :: Focused ( false ) , window_id) ;
130125 }
131126 } ,
132- WlKeyboardEvent :: Key { key, state : WEnum :: Value ( key_state) , .. }
127+ WlKeyboardEvent :: Key { key, state : key_state, .. }
133128 if matches ! ( key_state, WlKeyState :: Repeated | WlKeyState :: Pressed ) =>
134129 {
135130 let key = key + 8 ;
136131 key_input (
137132 keyboard_state,
138133 & mut state. events_sink ,
139- data ,
134+ self ,
140135 key,
141136 ElementState :: Pressed ,
142137 key_state == WlKeyState :: Repeated ,
@@ -204,13 +199,13 @@ impl Dispatch<WlKeyboard, KeyboardData, WinitState> for WinitState {
204199 } )
205200 . ok ( ) ;
206201 } ,
207- WlKeyboardEvent :: Key { key, state : WEnum :: Value ( WlKeyState :: Released ) , .. } => {
202+ WlKeyboardEvent :: Key { key, state : WlKeyState :: Released , .. } => {
208203 let key = key + 8 ;
209204
210205 key_input (
211206 keyboard_state,
212207 & mut state. events_sink ,
213- data ,
208+ self ,
214209 key,
215210 ElementState :: Released ,
216211 false ,
@@ -239,7 +234,7 @@ impl Dispatch<WlKeyboard, KeyboardData, WinitState> for WinitState {
239234 seat_state. modifiers = xkb_state. modifiers ( ) . into ( ) ;
240235
241236 // HACK: part of the workaround from `WlKeyboardEvent::Enter`.
242- let window_id = match * data . window_id . lock ( ) . unwrap ( ) {
237+ let window_id = match * self . window_id . lock ( ) . unwrap ( ) {
243238 Some ( window_id) => window_id,
244239 None => {
245240 seat_state. modifiers_pending = true ;
0 commit comments