Skip to content

Commit 689e163

Browse files
committed
wl_keyboard: cleanup
1 parent 0ecf7eb commit 689e163

File tree

2 files changed

+35
-26
lines changed

2 files changed

+35
-26
lines changed

src/ifs/wl_seat/wl_keyboard.rs

Lines changed: 34 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use {
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

3131
pub 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

215224
object_base! {
216225
self = WlKeyboard;
217-
version = self.seat.version;
226+
version = self.version;
218227
}
219228

220229
impl Object for WlKeyboard {}

src/ifs/wl_seat/zwp_virtual_keyboard_v1.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ pub struct ZwpVirtualKeyboardV1 {
3232
impl ZwpVirtualKeyboardV1 {
3333
fn for_each_kb<F>(&self, mut f: F)
3434
where
35-
F: FnMut(u64, &WlSurface, &WlKeyboard),
35+
F: FnMut(u64, &WlSurface, &Rc<WlKeyboard>),
3636
{
3737
let Some(surface) = self.seat.keyboard_node.get().node_into_surface() else {
3838
return;

0 commit comments

Comments
 (0)