@@ -119,7 +119,7 @@ pub(crate) struct WindowState {
119
119
drawing_area : DrawingArea ,
120
120
pub ( crate ) handler : RefCell < Box < dyn WinHandler > > ,
121
121
idle_queue : Arc < Mutex < Vec < IdleKind > > > ,
122
- current_keyval : RefCell < Option < u32 > > ,
122
+ current_keycode : RefCell < Option < u16 > > ,
123
123
}
124
124
125
125
impl WindowBuilder {
@@ -201,7 +201,7 @@ impl WindowBuilder {
201
201
drawing_area,
202
202
handler : RefCell :: new ( handler) ,
203
203
idle_queue : Arc :: new ( Mutex :: new ( vec ! [ ] ) ) ,
204
- current_keyval : RefCell :: new ( None ) ,
204
+ current_keycode : RefCell :: new ( None ) ,
205
205
} ) ;
206
206
207
207
self . app
@@ -475,10 +475,11 @@ impl WindowBuilder {
475
475
win_state. drawing_area . connect_key_press_event ( clone ! ( handle => move |_widget, key| {
476
476
if let Some ( state) = handle. state. upgrade( ) {
477
477
478
- let mut current_keyval = state. current_keyval. borrow_mut( ) ;
479
- let repeat = * current_keyval == Some ( key. get_keyval( ) ) ;
478
+ let mut current_keycode = state. current_keycode. borrow_mut( ) ;
479
+ let hw_keycode = key. get_hardware_keycode( ) ;
480
+ let repeat = * current_keycode == Some ( hw_keycode) ;
480
481
481
- * current_keyval = Some ( key . get_keyval ( ) ) ;
482
+ * current_keycode = Some ( hw_keycode ) ;
482
483
483
484
if let Ok ( mut handler) = state. handler. try_borrow_mut( ) {
484
485
handler. key_down( make_key_event( key, repeat, KeyState :: Down ) ) ;
@@ -493,7 +494,10 @@ impl WindowBuilder {
493
494
win_state. drawing_area . connect_key_release_event ( clone ! ( handle => move |_widget, key| {
494
495
if let Some ( state) = handle. state. upgrade( ) {
495
496
496
- * ( state. current_keyval. borrow_mut( ) ) = None ;
497
+ let mut current_keycode = state. current_keycode. borrow_mut( ) ;
498
+ if * current_keycode == Some ( key. get_hardware_keycode( ) ) {
499
+ * current_keycode = None ;
500
+ }
497
501
498
502
if let Ok ( mut handler) = state. handler. try_borrow_mut( ) {
499
503
handler. key_up( make_key_event( key, false , KeyState :: Up ) ) ;
@@ -839,6 +843,10 @@ const MODIFIER_MAP: &[(gdk::ModifierType, Modifiers)] = &[
839
843
( ModifierType :: MOD1_MASK , Modifiers :: ALT ) ,
840
844
( ModifierType :: CONTROL_MASK , Modifiers :: CONTROL ) ,
841
845
( ModifierType :: META_MASK , Modifiers :: META ) ,
846
+ ( ModifierType :: LOCK_MASK , Modifiers :: CAPS_LOCK ) ,
847
+ // Note: this is the usual value on X11, not sure how consistent it is.
848
+ // Possibly we should use `Keymap::get_num_lock_state()` instead.
849
+ ( ModifierType :: MOD2_MASK , Modifiers :: NUM_LOCK ) ,
842
850
] ;
843
851
844
852
fn get_modifiers ( modifiers : gdk:: ModifierType ) -> Modifiers {
0 commit comments