1
0
Fork 0
forked from wry/wry

keyboard: send keymap without actions/behaviors to xwayland

This commit is contained in:
Julian Orth 2025-01-22 16:49:14 +01:00
parent 541a7b5ebc
commit abaeed4c01
10 changed files with 52 additions and 34 deletions

View file

@ -75,8 +75,8 @@ impl JayInput {
fn send_keymap(&self, map: &KbvmMap) {
self.client.event(Keymap {
self_id: self.id,
keymap: map.map.clone(),
keymap_len: (map.map_len - 1) as _,
keymap: map.map.map.clone(),
keymap_len: (map.map.len - 1) as _,
});
}

View file

@ -73,7 +73,7 @@ use {
xdg_toplevel_drag_v1::XdgToplevelDragV1,
},
kbvm::{KbvmMap, KbvmMapId, KbvmState, PhysicalKeyboardState},
keyboard::{DynKeyboardState, KeyboardState, KeyboardStateId},
keyboard::{DynKeyboardState, KeyboardState, KeyboardStateId, KeymapFd},
leaks::Tracker,
object::{Object, Version},
rect::Rect,
@ -104,7 +104,6 @@ use {
rc::{Rc, Weak},
},
thiserror::Error,
uapi::OwnedFd,
};
pub use {
event_handling::NodeSeatState,
@ -1179,11 +1178,15 @@ impl WlSeat {
})
}
pub fn keymap_fd(&self, state: &KeyboardState) -> Result<Rc<OwnedFd>, WlKeyboardError> {
pub fn keymap_fd(&self, state: &KeyboardState) -> Result<KeymapFd, WlKeyboardError> {
let fd = match self.client.is_xwayland {
true => &state.xwayland_map,
_ => &state.map,
};
if self.version >= READ_ONLY_KEYMAP_SINCE {
return Ok(state.map.clone());
return Ok(fd.clone());
}
Ok(state.create_new_keymap_fd()?)
Ok(fd.create_unprotected_fd()?)
}
}

View file

@ -27,7 +27,7 @@ impl ZwpInputMethodKeyboardGrabV2 {
}
fn send_keymap(&self, kb_state: &KeyboardState) {
let map = match kb_state.create_new_keymap_fd() {
let map = match kb_state.map.create_unprotected_fd() {
Ok(m) => m,
Err(e) => {
log::error!("Could not create new keymap fd: {}", ErrorFmt(e));
@ -37,8 +37,8 @@ impl ZwpInputMethodKeyboardGrabV2 {
self.client.event(Keymap {
self_id: self.id,
format: wl_keyboard::XKB_V1,
fd: map,
size: kb_state.map_len as _,
fd: map.map,
size: map.len as _,
});
}

View file

@ -74,8 +74,8 @@ impl WlKeyboard {
self.seat.client.event(Keymap {
self_id: self.id,
format: XKB_V1,
fd,
size: state.map_len as _,
fd: fd.map,
size: fd.len as _,
});
}

View file

@ -87,7 +87,7 @@ impl ZwpVirtualKeyboardManagerV1RequestHandler for ZwpVirtualKeyboardManagerV1 {
kb_state: Rc::new(RefCell::new(KeyboardState {
id: self.client.state.keyboard_state_ids.next(),
map: seat_keymap.map.clone(),
map_len: seat_keymap.map_len,
xwayland_map: seat_keymap.xwayland_map.clone(),
pressed_keys: Default::default(),
mods: Default::default(),
})),

View file

@ -80,7 +80,7 @@ impl ZwpVirtualKeyboardV1RequestHandler for ZwpVirtualKeyboardV1 {
*self.kb_state.borrow_mut() = KeyboardState {
id: self.client.state.keyboard_state_ids.next(),
map: map.map.clone(),
map_len: map.map_len,
xwayland_map: map.xwayland_map.clone(),
pressed_keys: Default::default(),
mods: Default::default(),
};