keyboard: use kbvm::Components
This commit is contained in:
parent
e7d5a23af3
commit
51ceba72b0
10 changed files with 106 additions and 44 deletions
|
|
@ -45,10 +45,10 @@ impl EiKeyboard {
|
|||
self.client.event(Modifiers {
|
||||
self_id: self.id,
|
||||
serial: self.client.serial(),
|
||||
depressed: state.mods.mods_depressed,
|
||||
locked: state.mods.mods_locked,
|
||||
latched: state.mods.mods_latched,
|
||||
group: state.mods.group,
|
||||
depressed: state.mods.mods_pressed.0,
|
||||
locked: state.mods.mods_locked.0,
|
||||
latched: state.mods.mods_latched.0,
|
||||
group: state.mods.group.0,
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ use {
|
|||
wl_pointer::PendingScroll,
|
||||
SeatId,
|
||||
},
|
||||
keyboard::ModifierState,
|
||||
leaks::Tracker,
|
||||
object::{Object, Version},
|
||||
wire::{jay_seat_events::*, JaySeatEventsId},
|
||||
|
|
@ -26,12 +25,12 @@ pub struct JaySeatEvents {
|
|||
}
|
||||
|
||||
impl JaySeatEvents {
|
||||
pub fn send_modifiers(&self, seat: SeatId, mods: &ModifierState) {
|
||||
pub fn send_modifiers(&self, seat: SeatId, mods: &kbvm::Components) {
|
||||
self.client.event(Modifiers {
|
||||
self_id: self.id,
|
||||
seat: seat.raw(),
|
||||
modifiers: mods.mods_effective,
|
||||
group: mods.group,
|
||||
modifiers: mods.mods.0,
|
||||
group: mods.group.0,
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -818,7 +818,7 @@ impl WlSeatGlobal {
|
|||
let mut shortcuts = SmallVec::<[_; 1]>::new();
|
||||
let new_mods;
|
||||
{
|
||||
let mut mods = xkb_state.mods().mods_effective & !(CAPS.0 | NUM.0);
|
||||
let mut mods = xkb_state.mods().mods.0 & !(CAPS.0 | NUM.0);
|
||||
if state == wl_keyboard::RELEASED {
|
||||
mods |= RELEASE.0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -78,10 +78,10 @@ impl ZwpInputMethodKeyboardGrabV2 {
|
|||
self.client.event(Modifiers {
|
||||
self_id: self.id,
|
||||
serial: serial as _,
|
||||
mods_depressed: kb_state.mods.mods_depressed,
|
||||
mods_latched: kb_state.mods.mods_latched,
|
||||
mods_locked: kb_state.mods.mods_locked,
|
||||
group: kb_state.mods.group,
|
||||
mods_depressed: kb_state.mods.mods_pressed.0,
|
||||
mods_latched: kb_state.mods.mods_latched.0,
|
||||
mods_locked: kb_state.mods.mods_locked.0,
|
||||
group: kb_state.mods.group.0,
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2,13 +2,14 @@ use {
|
|||
crate::{
|
||||
client::ClientError,
|
||||
ifs::wl_seat::WlSeat,
|
||||
keyboard::{KeyboardState, KeyboardStateId, ModifierState},
|
||||
keyboard::{KeyboardState, KeyboardStateId},
|
||||
leaks::Tracker,
|
||||
object::{Object, Version},
|
||||
utils::errorfmt::ErrorFmt,
|
||||
wire::{wl_keyboard::*, WlKeyboardId, WlSurfaceId},
|
||||
xkbcommon::XkbCommonError,
|
||||
},
|
||||
kbvm::Components,
|
||||
std::{cell::Cell, rc::Rc},
|
||||
thiserror::Error,
|
||||
};
|
||||
|
|
@ -138,14 +139,14 @@ impl WlKeyboard {
|
|||
}
|
||||
}
|
||||
|
||||
fn send_modifiers(&self, serial: u64, mods: &ModifierState) {
|
||||
fn send_modifiers(&self, serial: u64, mods: &Components) {
|
||||
self.seat.client.event(Modifiers {
|
||||
self_id: self.id,
|
||||
serial: serial as _,
|
||||
mods_depressed: mods.mods_depressed,
|
||||
mods_latched: mods.mods_latched,
|
||||
mods_locked: mods.mods_locked,
|
||||
group: mods.group,
|
||||
mods_depressed: mods.mods_pressed.0,
|
||||
mods_latched: mods.mods_latched.0,
|
||||
mods_locked: mods.mods_locked.0,
|
||||
group: mods.group.0,
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -110,11 +110,11 @@ impl ZwpVirtualKeyboardV1RequestHandler for ZwpVirtualKeyboardV1 {
|
|||
|
||||
fn modifiers(&self, req: Modifiers, _slf: &Rc<Self>) -> Result<(), Self::Error> {
|
||||
let kb_state = &mut *self.kb_state.borrow_mut();
|
||||
kb_state.mods.mods_depressed = req.mods_depressed;
|
||||
kb_state.mods.mods_latched = req.mods_latched;
|
||||
kb_state.mods.mods_locked = req.mods_locked;
|
||||
kb_state.mods.mods_effective = req.mods_depressed | req.mods_latched | req.mods_locked;
|
||||
kb_state.mods.group = req.group;
|
||||
kb_state.mods.mods_pressed.0 = req.mods_depressed;
|
||||
kb_state.mods.mods_latched.0 = req.mods_latched;
|
||||
kb_state.mods.mods_locked.0 = req.mods_locked;
|
||||
kb_state.mods.group_locked.0 = req.group;
|
||||
kb_state.mods.update_effective();
|
||||
self.for_each_kb(|serial, surface, kb| {
|
||||
kb.on_mods_changed(serial, surface.id, &kb_state);
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
use {
|
||||
crate::utils::vecset::VecSet,
|
||||
kbvm::Components,
|
||||
std::{
|
||||
cell::{Ref, RefCell},
|
||||
rc::Rc,
|
||||
|
|
@ -7,15 +8,6 @@ use {
|
|||
uapi::OwnedFd,
|
||||
};
|
||||
|
||||
#[derive(Copy, Clone, Debug, Default)]
|
||||
pub struct ModifierState {
|
||||
pub mods_depressed: u32,
|
||||
pub mods_latched: u32,
|
||||
pub mods_locked: u32,
|
||||
pub mods_effective: u32,
|
||||
pub group: u32,
|
||||
}
|
||||
|
||||
linear_ids!(KeyboardStateIds, KeyboardStateId, u64);
|
||||
|
||||
pub struct KeyboardState {
|
||||
|
|
@ -23,7 +15,7 @@ pub struct KeyboardState {
|
|||
pub map: Rc<OwnedFd>,
|
||||
pub map_len: usize,
|
||||
pub pressed_keys: VecSet<u32>,
|
||||
pub mods: ModifierState,
|
||||
pub mods: Components,
|
||||
}
|
||||
|
||||
pub trait DynKeyboardState {
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ include!(concat!(env!("OUT_DIR"), "/xkbcommon_tys.rs"));
|
|||
pub use consts::*;
|
||||
use {
|
||||
crate::{
|
||||
keyboard::{DynKeyboardState, KeyboardState, KeyboardStateId, ModifierState},
|
||||
keyboard::{DynKeyboardState, KeyboardState, KeyboardStateId},
|
||||
utils::{errorfmt::ErrorFmt, oserror::OsError, ptr_ext::PtrExt},
|
||||
},
|
||||
bstr::{BStr, ByteSlice},
|
||||
|
|
@ -288,24 +288,22 @@ impl KeyboardState {
|
|||
}
|
||||
|
||||
impl XkbState {
|
||||
pub fn mods(&self) -> ModifierState {
|
||||
pub fn mods(&self) -> kbvm::Components {
|
||||
self.kb_state.mods
|
||||
}
|
||||
|
||||
fn fetch(&mut self, changes: xkb_state_component) -> bool {
|
||||
unsafe {
|
||||
if changes != 0 {
|
||||
self.kb_state.mods.mods_depressed =
|
||||
self.kb_state.mods.mods_pressed.0 =
|
||||
xkb_state_serialize_mods(self.state, XKB_STATE_MODS_DEPRESSED.raw() as _);
|
||||
self.kb_state.mods.mods_latched =
|
||||
self.kb_state.mods.mods_latched.0 =
|
||||
xkb_state_serialize_mods(self.state, XKB_STATE_MODS_LATCHED.raw() as _);
|
||||
self.kb_state.mods.mods_locked =
|
||||
self.kb_state.mods.mods_locked.0 =
|
||||
xkb_state_serialize_mods(self.state, XKB_STATE_MODS_LOCKED.raw() as _);
|
||||
self.kb_state.mods.mods_effective = self.kb_state.mods.mods_depressed
|
||||
| self.kb_state.mods.mods_latched
|
||||
| self.kb_state.mods.mods_locked;
|
||||
self.kb_state.mods.group =
|
||||
self.kb_state.mods.group_locked.0 =
|
||||
xkb_state_serialize_layout(self.state, XKB_STATE_LAYOUT_EFFECTIVE.raw() as _);
|
||||
self.kb_state.mods.update_effective();
|
||||
true
|
||||
} else {
|
||||
false
|
||||
|
|
@ -359,7 +357,7 @@ impl XkbState {
|
|||
let num = xkb_keymap_key_get_syms_by_level(
|
||||
self.map.keymap,
|
||||
key + 8,
|
||||
self.kb_state.mods.group,
|
||||
self.kb_state.mods.group.0,
|
||||
0,
|
||||
&mut res,
|
||||
);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue