@@ -420,7 +420,7 @@ pub trait ScancodeSet {
420
420
}
421
421
422
422
/// The set of modifier keys you have on a keyboard.
423
- #[ derive( Debug , Default ) ]
423
+ #[ derive( Debug , Default , Clone , Eq , PartialEq , Hash ) ]
424
424
pub struct Modifiers {
425
425
/// The left shift key is down
426
426
pub lshift : bool ,
@@ -505,6 +505,11 @@ where
505
505
}
506
506
}
507
507
508
+ /// Get the current key modifier states.
509
+ pub const fn get_modifiers ( & self ) -> & Modifiers {
510
+ & self . event_decoder . modifiers
511
+ }
512
+
508
513
/// Change the Ctrl key mapping.
509
514
pub fn set_ctrl_handling ( & mut self , new_value : HandleControl ) {
510
515
self . event_decoder . set_ctrl_handling ( new_value) ;
@@ -1594,6 +1599,28 @@ mod test {
1594
1599
1595
1600
process_keyevents ( & mut k, & test_sequence) ;
1596
1601
}
1602
+
1603
+ #[ test]
1604
+ fn test_modifier_state_shift ( ) {
1605
+ let mut k = Keyboard :: new (
1606
+ ScancodeSet2 :: new ( ) ,
1607
+ layouts:: Uk105Key ,
1608
+ HandleControl :: MapLettersToUnicode ,
1609
+ ) ;
1610
+ assert ! ( !k. get_modifiers( ) . lshift) ;
1611
+
1612
+ k. process_keyevent ( KeyEvent {
1613
+ code : KeyCode :: LShift ,
1614
+ state : KeyState :: Down ,
1615
+ } ) ;
1616
+ assert ! ( k. get_modifiers( ) . lshift) ;
1617
+
1618
+ k. process_keyevent ( KeyEvent {
1619
+ code : KeyCode :: LShift ,
1620
+ state : KeyState :: Up ,
1621
+ } ) ;
1622
+ assert ! ( !k. get_modifiers( ) . lshift) ;
1623
+ }
1597
1624
}
1598
1625
1599
1626
// ****************************************************************************
0 commit comments