@@ -603,28 +603,30 @@ class _PointerAdapter extends _BaseAdapter with _WheelEventListenerMixin {
603603 String eventName,
604604 _PointerEventListener handler, {
605605 bool useCapture = true ,
606+ bool checkModifiers = true ,
606607 }) {
607608 addEventListener (target, eventName, (DomEvent event) {
608609 final DomPointerEvent pointerEvent = event as DomPointerEvent ;
610+ if (checkModifiers) {
611+ _checkModifiersState (event);
612+ }
609613 handler (pointerEvent);
610614 }, useCapture: useCapture);
611615 }
612616
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' ),
620623 event.timeStamp! ,
621624 );
622625 }
623626
624627 @override
625628 void setup () {
626629 _addPointerEventListener (glassPaneElement, 'pointerdown' , (DomPointerEvent event) {
627- _checkModifiersState (event);
628630 final int device = _getPointerId (event);
629631 final List <ui.PointerData > pointerData = < ui.PointerData > [];
630632 final _ButtonSanitizer sanitizer = _ensureSanitizer (device);
@@ -643,7 +645,6 @@ class _PointerAdapter extends _BaseAdapter with _WheelEventListenerMixin {
643645 });
644646
645647 _addPointerEventListener (domWindow, 'pointermove' , (DomPointerEvent event) {
646- _checkModifiersState (event);
647648 final int device = _getPointerId (event);
648649 final _ButtonSanitizer sanitizer = _ensureSanitizer (device);
649650 final List <ui.PointerData > pointerData = < ui.PointerData > [];
@@ -668,10 +669,9 @@ class _PointerAdapter extends _BaseAdapter with _WheelEventListenerMixin {
668669 _convertEventsToPointerData (data: pointerData, event: event, details: details);
669670 _callback (pointerData);
670671 }
671- }, useCapture: false );
672+ }, useCapture: false , checkModifiers : false );
672673
673674 _addPointerEventListener (domWindow, 'pointerup' , (DomPointerEvent event) {
674- _checkModifiersState (event);
675675 final int device = _getPointerId (event);
676676 if (_hasSanitizer (device)) {
677677 final List <ui.PointerData > pointerData = < ui.PointerData > [];
@@ -695,7 +695,7 @@ class _PointerAdapter extends _BaseAdapter with _WheelEventListenerMixin {
695695 _convertEventsToPointerData (data: pointerData, event: event, details: details);
696696 _callback (pointerData);
697697 }
698- });
698+ }, checkModifiers : false );
699699
700700 _addWheelEventListener ((DomEvent event) {
701701 _handleWheelEvent (event);
@@ -790,13 +790,26 @@ class _TouchAdapter extends _BaseAdapter {
790790 void _pressTouch (int identifier) { _pressedTouches.add (identifier); }
791791 void _unpressTouch (int identifier) { _pressedTouches.remove (identifier); }
792792
793- void _addTouchEventListener (DomEventTarget target, String eventName, _TouchEventListener handler) {
793+ void _addTouchEventListener (DomEventTarget target, String eventName, _TouchEventListener handler, { bool checkModifiers = true ,} ) {
794794 addEventListener (target, eventName, (DomEvent event) {
795795 final DomTouchEvent touchEvent = event as DomTouchEvent ;
796+ if (checkModifiers) {
797+ _checkModifiersState (event);
798+ }
796799 handler (touchEvent);
797800 });
798801 }
799802
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+
800813 @override
801814 void setup () {
802815 _addTouchEventListener (glassPaneElement, 'touchstart' , (DomTouchEvent event) {
@@ -935,13 +948,27 @@ class _MouseAdapter extends _BaseAdapter with _WheelEventListenerMixin {
935948 String eventName,
936949 _MouseEventListener handler, {
937950 bool useCapture = true ,
951+ bool checkModifiers = true ,
938952 }) {
939953 addEventListener (target, eventName, (DomEvent event) {
940954 final DomMouseEvent mouseEvent = event as DomMouseEvent ;
955+ if (checkModifiers) {
956+ _checkModifiersState (event);
957+ }
941958 handler (mouseEvent);
942959 }, useCapture: useCapture);
943960 }
944961
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+
945972 @override
946973 void setup () {
947974 _addMouseEventListener (glassPaneElement, 'mousedown' , (DomMouseEvent event) {
0 commit comments