@@ -18,8 +18,8 @@ use objc::{
1818
1919use crate :: {
2020 event:: {
21- DeviceEvent , ElementState , Event , KeyboardInput , MouseButton , MouseScrollDelta , TouchPhase ,
22- VirtualKeyCode , WindowEvent ,
21+ DeviceEvent , ElementState , Event , KeyboardInput , ModifiersState , MouseButton ,
22+ MouseScrollDelta , TouchPhase , VirtualKeyCode , WindowEvent ,
2323 } ,
2424 platform_impl:: platform:: {
2525 app_state:: AppState ,
@@ -35,21 +35,13 @@ use crate::{
3535 window:: WindowId ,
3636} ;
3737
38- #[ derive( Default ) ]
39- struct Modifiers {
40- shift_pressed : bool ,
41- ctrl_pressed : bool ,
42- win_pressed : bool ,
43- alt_pressed : bool ,
44- }
45-
4638struct ViewState {
4739 ns_window : id ,
4840 pub cursor : Arc < Mutex < util:: Cursor > > ,
4941 ime_spot : Option < ( f64 , f64 ) > ,
5042 raw_characters : Option < String > ,
5143 is_key_down : bool ,
52- modifiers : Modifiers ,
44+ modifiers : ModifiersState ,
5345}
5446
5547pub fn new_view ( ns_window : id ) -> ( IdRef , Weak < Mutex < util:: Cursor > > ) {
@@ -654,36 +646,36 @@ extern "C" fn flags_changed(this: &Object, _sel: Sel, event: id) {
654646 if let Some ( window_event) = modifier_event (
655647 event,
656648 NSEventModifierFlags :: NSShiftKeyMask ,
657- state. modifiers . shift_pressed ,
649+ state. modifiers . shift ,
658650 ) {
659- state. modifiers . shift_pressed = !state. modifiers . shift_pressed ;
651+ state. modifiers . shift = !state. modifiers . shift ;
660652 events. push_back ( window_event) ;
661653 }
662654
663655 if let Some ( window_event) = modifier_event (
664656 event,
665657 NSEventModifierFlags :: NSControlKeyMask ,
666- state. modifiers . ctrl_pressed ,
658+ state. modifiers . ctrl ,
667659 ) {
668- state. modifiers . ctrl_pressed = !state. modifiers . ctrl_pressed ;
660+ state. modifiers . ctrl = !state. modifiers . ctrl ;
669661 events. push_back ( window_event) ;
670662 }
671663
672664 if let Some ( window_event) = modifier_event (
673665 event,
674666 NSEventModifierFlags :: NSCommandKeyMask ,
675- state. modifiers . win_pressed ,
667+ state. modifiers . logo ,
676668 ) {
677- state. modifiers . win_pressed = !state. modifiers . win_pressed ;
669+ state. modifiers . logo = !state. modifiers . logo ;
678670 events. push_back ( window_event) ;
679671 }
680672
681673 if let Some ( window_event) = modifier_event (
682674 event,
683675 NSEventModifierFlags :: NSAlternateKeyMask ,
684- state. modifiers . alt_pressed ,
676+ state. modifiers . alt ,
685677 ) {
686- state. modifiers . alt_pressed = !state. modifiers . alt_pressed ;
678+ state. modifiers . alt = !state. modifiers . alt ;
687679 events. push_back ( window_event) ;
688680 }
689681
@@ -693,6 +685,13 @@ extern "C" fn flags_changed(this: &Object, _sel: Sel, event: id) {
693685 event,
694686 } ) ;
695687 }
688+
689+ AppState :: queue_event ( Event :: DeviceEvent {
690+ device_id : DEVICE_ID ,
691+ event : DeviceEvent :: ModifiersChanged {
692+ modifiers : state. modifiers ,
693+ } ,
694+ } ) ;
696695 }
697696 trace ! ( "Completed `flagsChanged`" ) ;
698697}
0 commit comments