11use {
22 crate :: {
33 backend:: KeyState ,
4- client:: ClientError ,
4+ client:: { Client , ClientError } ,
55 ifs:: wl_seat:: WlSeat ,
66 keyboard:: { KeyboardError , KeyboardState , KeyboardStateId } ,
77 leaks:: Tracker ,
@@ -30,6 +30,8 @@ pub const REPEATED: u32 = 2;
3030
3131pub struct WlKeyboard {
3232 id : WlKeyboardId ,
33+ client : Rc < Client > ,
34+ version : Version ,
3335 seat : Rc < WlSeat > ,
3436 kb_state_id : Cell < KeyboardStateId > ,
3537 pressed_keys : RefCell < VecSet < u32 > > ,
@@ -40,6 +42,8 @@ impl WlKeyboard {
4042 pub fn new ( id : WlKeyboardId , seat : & Rc < WlSeat > ) -> Self {
4143 Self {
4244 id,
45+ client : seat. client . clone ( ) ,
46+ version : seat. version ,
4347 seat : seat. clone ( ) ,
4448 kb_state_id : Cell :: new ( KeyboardStateId :: from_raw ( 0 ) ) ,
4549 pressed_keys : Default :: default ( ) ,
@@ -52,7 +56,7 @@ impl WlKeyboard {
5256 }
5357
5458 fn send_kb_state (
55- & self ,
59+ self : & Rc < Self > ,
5660 serial : u64 ,
5761 kb_state : & KeyboardState ,
5862 surface_id : WlSurfaceId ,
@@ -67,27 +71,27 @@ impl WlKeyboard {
6771 self . send_modifiers ( serial, & kb_state. mods ) ;
6872 }
6973
70- fn send_keymap ( & self , state : & KeyboardState ) {
74+ fn send_keymap ( self : & Rc < Self > , state : & KeyboardState ) {
7175 let fd = match self . seat . keymap_fd ( state) {
7276 Ok ( fd) => fd,
7377 Err ( e) => {
7478 log:: error!(
7579 "Could not creat a file descriptor to transfer the keymap to client {}: {}" ,
76- self . seat . client. id,
80+ self . client. id,
7781 ErrorFmt ( e)
7882 ) ;
7983 return ;
8084 }
8185 } ;
82- self . seat . client . event ( Keymap {
86+ self . client . event ( Keymap {
8387 self_id : self . id ,
8488 format : XKB_V1 ,
8589 fd : fd. map ,
8690 size : fd. len as _ ,
8791 } ) ;
8892 }
8993
90- pub fn enter ( & self , serial : u64 , surface : WlSurfaceId , kb_state : & KeyboardState ) {
94+ pub fn enter ( self : & Rc < Self > , serial : u64 , surface : WlSurfaceId , kb_state : & KeyboardState ) {
9195 if kb_state. id != self . kb_state_id . get ( ) {
9296 self . send_kb_state ( serial, kb_state, surface, false ) ;
9397 } else {
@@ -96,30 +100,30 @@ impl WlKeyboard {
96100 }
97101 }
98102
99- fn send_enter ( & self , serial : u64 , surface : WlSurfaceId , keys : & [ u32 ] ) {
103+ fn send_enter ( self : & Rc < Self > , serial : u64 , surface : WlSurfaceId , keys : & [ u32 ] ) {
100104 {
101105 let pk = & mut self . pressed_keys . borrow_mut ( ) ;
102106 pk. clear ( ) ;
103107 pk. extend ( keys) ;
104108 }
105- self . seat . client . event ( Enter {
109+ self . client . event ( Enter {
106110 self_id : self . id ,
107111 serial : serial as _ ,
108112 surface,
109113 keys,
110- } )
114+ } ) ;
111115 }
112116
113- pub fn send_leave ( & self , serial : u64 , surface : WlSurfaceId ) {
114- self . seat . client . event ( Leave {
117+ pub fn send_leave ( self : & Rc < Self > , serial : u64 , surface : WlSurfaceId ) {
118+ self . client . event ( Leave {
115119 self_id : self . id ,
116120 serial : serial as _ ,
117121 surface,
118- } )
122+ } ) ;
119123 }
120124
121125 pub fn on_key (
122- & self ,
126+ self : & Rc < Self > ,
123127 serial : u64 ,
124128 time : u32 ,
125129 key : u32 ,
@@ -133,8 +137,8 @@ impl WlKeyboard {
133137 self . send_key ( serial, time, key, state) ;
134138 }
135139
136- fn send_key ( & self , serial : u64 , time : u32 , key : u32 , state : KeyState ) {
137- if state == KeyState :: Repeated && self . seat . version < REPEATED_SINCE {
140+ fn send_key ( self : & Rc < Self > , serial : u64 , time : u32 , key : u32 , state : KeyState ) {
141+ if state == KeyState :: Repeated && self . version < REPEATED_SINCE {
138142 return ;
139143 }
140144 {
@@ -157,7 +161,7 @@ impl WlKeyboard {
157161 }
158162 }
159163 }
160- self . seat . client . event ( Key {
164+ self . client . event ( Key {
161165 self_id : self . id ,
162166 serial : serial as _ ,
163167 time,
@@ -167,38 +171,43 @@ impl WlKeyboard {
167171 KeyState :: Pressed => PRESSED ,
168172 KeyState :: Repeated => REPEATED ,
169173 } ,
170- } )
174+ } ) ;
171175 }
172176
173- pub fn on_mods_changed ( & self , serial : u64 , surface : WlSurfaceId , kb_state : & KeyboardState ) {
177+ pub fn on_mods_changed (
178+ self : & Rc < Self > ,
179+ serial : u64 ,
180+ surface : WlSurfaceId ,
181+ kb_state : & KeyboardState ,
182+ ) {
174183 if self . kb_state_id . get ( ) != kb_state. id {
175184 self . send_kb_state ( serial, kb_state, surface, true ) ;
176185 } else {
177186 self . send_modifiers ( serial, & kb_state. mods ) ;
178187 }
179188 }
180189
181- fn send_modifiers ( & self , serial : u64 , mods : & Components ) {
182- self . seat . client . event ( Modifiers {
190+ fn send_modifiers ( self : & Rc < Self > , serial : u64 , mods : & Components ) {
191+ self . client . event ( Modifiers {
183192 self_id : self . id ,
184193 serial : serial as _ ,
185194 mods_depressed : mods. mods_pressed . 0 ,
186195 mods_latched : mods. mods_latched . 0 ,
187196 mods_locked : mods. mods_locked . 0 ,
188197 group : mods. group . 0 ,
189- } )
198+ } ) ;
190199 }
191200
192201 pub fn send_repeat_info ( self : & Rc < Self > , mut rate : i32 , mut delay : i32 ) {
193- if self . seat . version >= REPEATED_SINCE {
202+ if self . version >= REPEATED_SINCE {
194203 rate = 0 ;
195204 delay = 0 ;
196205 }
197- self . seat . client . event ( RepeatInfo {
206+ self . client . event ( RepeatInfo {
198207 self_id : self . id ,
199208 rate,
200209 delay,
201- } )
210+ } ) ;
202211 }
203212}
204213
@@ -214,7 +223,7 @@ impl WlKeyboardRequestHandler for WlKeyboard {
214223
215224object_base ! {
216225 self = WlKeyboard ;
217- version = self . seat . version;
226+ version = self . version;
218227}
219228
220229impl Object for WlKeyboard { }
0 commit comments