Skip to content

Commit 43171a1

Browse files
authored
Merge pull request #648 from mahkoh/jorth/compositor-side-repeat
seat: implement key repeat
2 parents e22e668 + 4b4f05d commit 43171a1

24 files changed

+228
-85
lines changed

docs/features.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ Jay supports the following wayland protocols:
170170
| wl_drm | 2 | |
171171
| wl_fixes | 1 | |
172172
| wl_output | 4 | |
173-
| wl_seat | 9 | |
173+
| wl_seat | 10 | |
174174
| wl_shm | 2 | |
175175
| wl_subcompositor | 1 | |
176176
| wp_alpha_modifier_v1 | 1 | |

src/backend.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,13 @@ pub enum BackendEvent {
315315
pub enum KeyState {
316316
Released,
317317
Pressed,
318+
Repeated,
319+
}
320+
321+
#[derive(Debug, Copy, Clone, Eq, PartialEq)]
322+
pub enum ButtonState {
323+
Released,
324+
Pressed,
318325
}
319326

320327
#[derive(Debug, Copy, Clone, Eq, PartialEq, Linearize)]
@@ -369,7 +376,7 @@ pub enum InputEvent {
369376
Button {
370377
time_usec: u64,
371378
button: u32,
372-
state: KeyState,
379+
state: ButtonState,
373380
},
374381

375382
AxisPx {

src/backends/metal.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use {
88
crate::{
99
async_engine::SpawnedFuture,
1010
backend::{
11-
Backend, InputDevice, InputDeviceAccelProfile, InputDeviceCapability,
11+
Backend, ButtonState, InputDevice, InputDeviceAccelProfile, InputDeviceCapability,
1212
InputDeviceClickMethod, InputDeviceGroupId, InputDeviceId, InputEvent, KeyState, Leds,
1313
TransformMatrix, transaction::BackendConnectorTransactionError,
1414
},
@@ -598,7 +598,7 @@ impl MetalInputDevice {
598598
self.event(InputEvent::Button {
599599
time_usec,
600600
button,
601-
state: KeyState::Released,
601+
state: ButtonState::Released,
602602
});
603603
}
604604
}

src/backends/metal/input.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use {
22
crate::{
3-
backend::{AxisSource, InputEvent, KeyState, ScrollAxis},
3+
backend::{AxisSource, ButtonState, InputEvent, KeyState, ScrollAxis},
44
backends::metal::MetalBackend,
55
fixed::Fixed,
66
ifs::wl_seat::tablet::{
@@ -216,12 +216,12 @@ impl MetalBackend {
216216
if dev.pressed_buttons.insert(event.button(), ()).is_some() {
217217
return;
218218
}
219-
KeyState::Pressed
219+
ButtonState::Pressed
220220
} else {
221221
if dev.pressed_buttons.remove(&event.button()).is_none() {
222222
return;
223223
}
224-
KeyState::Released
224+
ButtonState::Released
225225
};
226226
dev.event(InputEvent::Button {
227227
time_usec: event.time_usec(),

src/backends/x.rs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@ use {
44
async_engine::{Phase, SpawnedFuture},
55
backend::{
66
AXIS_120, AxisSource, Backend, BackendConnectorState, BackendDrmDevice, BackendEvent,
7-
Connector, ConnectorEvent, ConnectorId, ConnectorKernelId, DrmDeviceId, DrmEvent,
8-
InputDevice, InputDeviceAccelProfile, InputDeviceCapability, InputDeviceClickMethod,
9-
InputDeviceId, InputEvent, KeyState, Mode, MonitorInfo, ScrollAxis, TransformMatrix,
7+
ButtonState, Connector, ConnectorEvent, ConnectorId, ConnectorKernelId, DrmDeviceId,
8+
DrmEvent, InputDevice, InputDeviceAccelProfile, InputDeviceCapability,
9+
InputDeviceClickMethod, InputDeviceId, InputEvent, KeyState, Mode, MonitorInfo,
10+
ScrollAxis, TransformMatrix,
1011
transaction::{
1112
BackendAppliedConnectorTransaction, BackendConnectorTransaction,
1213
BackendConnectorTransactionError, BackendConnectorTransactionType,
@@ -817,8 +818,8 @@ impl XBackend {
817818
match event.code() {
818819
XiMotion::OPCODE => self.handle_input_motion(event),
819820
XiEnter::OPCODE => self.handle_input_enter(event),
820-
XiButtonPress::OPCODE => self.handle_input_button_press(event, KeyState::Pressed),
821-
XiButtonRelease::OPCODE => self.handle_input_button_press(event, KeyState::Released),
821+
XiButtonPress::OPCODE => self.handle_input_button_press(event, ButtonState::Pressed),
822+
XiButtonRelease::OPCODE => self.handle_input_button_press(event, ButtonState::Released),
822823
XiKeyPress::OPCODE => self.handle_input_key_press(event, KeyState::Pressed),
823824
XiKeyRelease::OPCODE => self.handle_input_key_press(event, KeyState::Released),
824825
XiHierarchy::OPCODE => self.handle_input_hierarchy(event).await,
@@ -829,14 +830,14 @@ impl XBackend {
829830
fn handle_input_button_press(
830831
self: &Rc<Self>,
831832
event: &Event,
832-
state: KeyState,
833+
state: ButtonState,
833834
) -> Result<(), XBackendError> {
834835
let event: XiButtonPress = event.parse()?;
835836
if let Some(seat) = self.mouse_seats.get(&event.deviceid) {
836837
let button = event.detail;
837838
// let button = seat.button_map.get(&event.detail).unwrap_or(event.detail);
838839
if matches!(button, 4..=7) {
839-
if state == KeyState::Pressed {
840+
if state == ButtonState::Pressed {
840841
let (axis, val) = match button {
841842
4 => (ScrollAxis::Vertical, -1),
842843
5 => (ScrollAxis::Vertical, 1),

src/ei/ei_ifs/ei_button.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use {
22
crate::{
3-
backend::KeyState,
3+
backend::ButtonState,
44
ei::{
55
ei_client::{EiClient, EiClientError},
66
ei_ifs::ei_device::{EiDevice, EiDeviceInterface},
@@ -27,7 +27,7 @@ pub struct EiButton {
2727
ei_device_interface!(EiButton, ei_button, button);
2828

2929
impl EiButton {
30-
pub fn send_button(&self, button: u32, state: KeyState) {
30+
pub fn send_button(&self, button: u32, state: ButtonState) {
3131
self.client.event(ServerButton {
3232
self_id: self.id,
3333
button,
@@ -46,8 +46,8 @@ impl EiButtonRequestHandler for EiButton {
4646

4747
fn client_button(&self, req: ClientButton, _slf: &Rc<Self>) -> Result<(), Self::Error> {
4848
let pressed = match req.state {
49-
0 => KeyState::Released,
50-
1 => KeyState::Pressed,
49+
0 => ButtonState::Released,
50+
1 => ButtonState::Pressed,
5151
_ => return Err(EiButtonError::InvalidButtonState(req.state)),
5252
};
5353
self.device.button_changes.push((req.button, pressed));

src/ei/ei_ifs/ei_device.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use {
22
crate::{
3-
backend::{KeyState, ScrollAxis},
3+
backend::{ButtonState, KeyState, ScrollAxis},
44
ei::{
55
ei_client::{EiClient, EiClientError},
66
ei_ifs::{ei_seat::EiSeat, ei_touchscreen::TouchChange},
@@ -40,7 +40,7 @@ pub struct EiDevice {
4040
pub version: EiVersion,
4141
pub seat: Rc<EiSeat>,
4242

43-
pub button_changes: SyncQueue<(u32, KeyState)>,
43+
pub button_changes: SyncQueue<(u32, ButtonState)>,
4444
pub touch_changes: CopyHashMap<u32, TouchChange>,
4545
pub scroll_px: [Cell<Option<f32>>; 2],
4646
pub scroll_v120: [Cell<Option<i32>>; 2],

src/ei/ei_ifs/ei_keyboard.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ impl EiKeyboard {
5959
state: match state {
6060
KeyState::Released => 0,
6161
KeyState::Pressed => 1,
62+
KeyState::Repeated => return,
6263
},
6364
});
6465
}

src/ei/ei_ifs/ei_seat.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use {
22
crate::{
3-
backend::KeyState,
3+
backend::{ButtonState, KeyState},
44
ei::{
55
EiContext,
66
ei_client::{EiClient, EiClientError},
@@ -150,7 +150,7 @@ impl EiSeat {
150150
}
151151
}
152152

153-
pub fn handle_button(&self, time_usec: u64, button: u32, state: KeyState) {
153+
pub fn handle_button(&self, time_usec: u64, button: u32, state: ButtonState) {
154154
if self.is_sender() {
155155
return;
156156
}

src/ifs/jay_seat_events.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use {
22
crate::{
3-
backend::{InputDeviceId, KeyState, ScrollAxis},
3+
backend::{ButtonState, InputDeviceId, KeyState, ScrollAxis},
44
client::Client,
55
fixed::Fixed,
66
ifs::wl_seat::{
@@ -79,7 +79,7 @@ impl JaySeatEvents {
7979
});
8080
}
8181

82-
pub fn send_button(&self, seat: SeatId, time_usec: u64, button: u32, state: KeyState) {
82+
pub fn send_button(&self, seat: SeatId, time_usec: u64, button: u32, state: ButtonState) {
8383
self.client.event(Button {
8484
self_id: self.id,
8585
seat: seat.raw(),

0 commit comments

Comments
 (0)