@@ -603,28 +603,30 @@ class _PointerAdapter extends _BaseAdapter with _WheelEventListenerMixin {
603
603
String eventName,
604
604
_PointerEventListener handler, {
605
605
bool useCapture = true ,
606
+ bool checkModifiers = true ,
606
607
}) {
607
608
addEventListener (target, eventName, (DomEvent event) {
608
609
final DomPointerEvent pointerEvent = event as DomPointerEvent ;
610
+ if (checkModifiers) {
611
+ _checkModifiersState (event);
612
+ }
609
613
handler (pointerEvent);
610
614
}, useCapture: useCapture);
611
615
}
612
616
613
- void _checkModifiersState (DomEvent event) {
614
- // TODO(bleroux): add support for 'Meta', 'Ctrl' and 'Alt'
615
- final DomPointerEvent pointerEvent = event as DomPointerEvent ;
616
-
617
- final bool shiftPressed = pointerEvent.getModifierState ('Shift' );
618
- KeyboardBinding .instance! .synthesizeShiftKeyIfNeeded (
619
- shiftPressed ? ui.KeyEventType .down : ui.KeyEventType .up,
617
+ void _checkModifiersState (DomPointerEvent event) {
618
+ KeyboardBinding .instance! .synthesizeModifiersIfNeeded (
619
+ event.getModifierState ('Alt' ),
620
+ event.getModifierState ('Control' ),
621
+ event.getModifierState ('Meta' ),
622
+ event.getModifierState ('Shift' ),
620
623
event.timeStamp! ,
621
624
);
622
625
}
623
626
624
627
@override
625
628
void setup () {
626
629
_addPointerEventListener (glassPaneElement, 'pointerdown' , (DomPointerEvent event) {
627
- _checkModifiersState (event);
628
630
final int device = _getPointerId (event);
629
631
final List <ui.PointerData > pointerData = < ui.PointerData > [];
630
632
final _ButtonSanitizer sanitizer = _ensureSanitizer (device);
@@ -643,7 +645,6 @@ class _PointerAdapter extends _BaseAdapter with _WheelEventListenerMixin {
643
645
});
644
646
645
647
_addPointerEventListener (domWindow, 'pointermove' , (DomPointerEvent event) {
646
- _checkModifiersState (event);
647
648
final int device = _getPointerId (event);
648
649
final _ButtonSanitizer sanitizer = _ensureSanitizer (device);
649
650
final List <ui.PointerData > pointerData = < ui.PointerData > [];
@@ -668,10 +669,9 @@ class _PointerAdapter extends _BaseAdapter with _WheelEventListenerMixin {
668
669
_convertEventsToPointerData (data: pointerData, event: event, details: details);
669
670
_callback (pointerData);
670
671
}
671
- }, useCapture: false );
672
+ }, useCapture: false , checkModifiers : false );
672
673
673
674
_addPointerEventListener (domWindow, 'pointerup' , (DomPointerEvent event) {
674
- _checkModifiersState (event);
675
675
final int device = _getPointerId (event);
676
676
if (_hasSanitizer (device)) {
677
677
final List <ui.PointerData > pointerData = < ui.PointerData > [];
@@ -695,7 +695,7 @@ class _PointerAdapter extends _BaseAdapter with _WheelEventListenerMixin {
695
695
_convertEventsToPointerData (data: pointerData, event: event, details: details);
696
696
_callback (pointerData);
697
697
}
698
- });
698
+ }, checkModifiers : false );
699
699
700
700
_addWheelEventListener ((DomEvent event) {
701
701
_handleWheelEvent (event);
@@ -790,13 +790,26 @@ class _TouchAdapter extends _BaseAdapter {
790
790
void _pressTouch (int identifier) { _pressedTouches.add (identifier); }
791
791
void _unpressTouch (int identifier) { _pressedTouches.remove (identifier); }
792
792
793
- void _addTouchEventListener (DomEventTarget target, String eventName, _TouchEventListener handler) {
793
+ void _addTouchEventListener (DomEventTarget target, String eventName, _TouchEventListener handler, { bool checkModifiers = true ,} ) {
794
794
addEventListener (target, eventName, (DomEvent event) {
795
795
final DomTouchEvent touchEvent = event as DomTouchEvent ;
796
+ if (checkModifiers) {
797
+ _checkModifiersState (event);
798
+ }
796
799
handler (touchEvent);
797
800
});
798
801
}
799
802
803
+ void _checkModifiersState (DomTouchEvent event) {
804
+ KeyboardBinding .instance! .synthesizeModifiersIfNeeded (
805
+ event.altKey,
806
+ event.ctrlKey,
807
+ event.metaKey,
808
+ event.shiftKey,
809
+ event.timeStamp! ,
810
+ );
811
+ }
812
+
800
813
@override
801
814
void setup () {
802
815
_addTouchEventListener (glassPaneElement, 'touchstart' , (DomTouchEvent event) {
@@ -935,13 +948,27 @@ class _MouseAdapter extends _BaseAdapter with _WheelEventListenerMixin {
935
948
String eventName,
936
949
_MouseEventListener handler, {
937
950
bool useCapture = true ,
951
+ bool checkModifiers = true ,
938
952
}) {
939
953
addEventListener (target, eventName, (DomEvent event) {
940
954
final DomMouseEvent mouseEvent = event as DomMouseEvent ;
955
+ if (checkModifiers) {
956
+ _checkModifiersState (event);
957
+ }
941
958
handler (mouseEvent);
942
959
}, useCapture: useCapture);
943
960
}
944
961
962
+ void _checkModifiersState (DomMouseEvent event) {
963
+ KeyboardBinding .instance! .synthesizeModifiersIfNeeded (
964
+ event.getModifierState ('Alt' ),
965
+ event.getModifierState ('Control' ),
966
+ event.getModifierState ('Meta' ),
967
+ event.getModifierState ('Shift' ),
968
+ event.timeStamp! ,
969
+ );
970
+ }
971
+
945
972
@override
946
973
void setup () {
947
974
_addMouseEventListener (glassPaneElement, 'mousedown' , (DomMouseEvent event) {
0 commit comments