diff --git a/.gitignore b/.gitignore index a821aa9..b459f8b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ - +.idea/ /target **/*.rs.bk Cargo.lock diff --git a/src/lib.rs b/src/lib.rs index a6fdae2..98bb1ae 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -420,7 +420,7 @@ pub trait ScancodeSet { } /// The set of modifier keys you have on a keyboard. -#[derive(Debug, Default)] +#[derive(Debug, Default, Clone, Eq, PartialEq, Hash)] pub struct Modifiers { /// The left shift key is down pub lshift: bool, @@ -505,6 +505,11 @@ where } } + /// Get the current key modifier states. + pub const fn get_modifiers(&self) -> &Modifiers { + &self.event_decoder.modifiers + } + /// Change the Ctrl key mapping. pub fn set_ctrl_handling(&mut self, new_value: HandleControl) { self.event_decoder.set_ctrl_handling(new_value); @@ -1594,6 +1599,28 @@ mod test { process_keyevents(&mut k, &test_sequence); } + + #[test] + fn test_modifier_state_shift() { + let mut k = Keyboard::new( + ScancodeSet2::new(), + layouts::Uk105Key, + HandleControl::MapLettersToUnicode, + ); + assert!(!k.get_modifiers().lshift); + + k.process_keyevent(KeyEvent { + code: KeyCode::LShift, + state: KeyState::Down, + }); + assert!(k.get_modifiers().lshift); + + k.process_keyevent(KeyEvent { + code: KeyCode::LShift, + state: KeyState::Up, + }); + assert!(!k.get_modifiers().lshift); + } } // ****************************************************************************