@@ -234,6 +234,19 @@ void testMain() {
234234 expect (events[1 ].buttons, equals (0 ));
235235 expect (events[1 ].client.x, equals (0 ));
236236 expect (events[1 ].client.y, equals (0 ));
237+
238+ context.pressAllModifiers ();
239+ event = expectCorrectType (context.primaryDown (clientX: 100 , clientY: 101 ));
240+ expect (event.getModifierState ('Alt' ), true );
241+ expect (event.getModifierState ('Control' ), true );
242+ expect (event.getModifierState ('Meta' ), true );
243+ expect (event.getModifierState ('Shift' ), true );
244+ context.unpressAllModifiers ();
245+ event = expectCorrectType (context.primaryDown (clientX: 100 , clientY: 101 ));
246+ expect (event.getModifierState ('Alt' ), false );
247+ expect (event.getModifierState ('Control' ), false );
248+ expect (event.getModifierState ('Meta' ), false );
249+ expect (event.getModifierState ('Shift' ), false );
237250 });
238251
239252 test ('_TouchEventContext generates expected events' , () {
@@ -330,6 +343,19 @@ void testMain() {
330343 expect (events[0 ].changedTouches! [1 ].identifier, equals (105 ));
331344 expect (events[0 ].changedTouches! [1 ].client.x, equals (322 ));
332345 expect (events[0 ].changedTouches! [1 ].client.y, equals (323 ));
346+
347+ context.pressAllModifiers ();
348+ event = expectCorrectType (context.primaryDown (clientX: 100 , clientY: 101 ));
349+ expect (event.altKey, true );
350+ expect (event.ctrlKey, true );
351+ expect (event.metaKey, true );
352+ expect (event.shiftKey, true );
353+ context.unpressAllModifiers ();
354+ event = expectCorrectType (context.primaryDown (clientX: 100 , clientY: 101 ));
355+ expect (event.altKey, false );
356+ expect (event.ctrlKey, false );
357+ expect (event.metaKey, false );
358+ expect (event.shiftKey, false );
333359 });
334360
335361 test ('_MouseEventContext generates expected events' , () {
@@ -419,6 +445,19 @@ void testMain() {
419445 expect (event.buttons, equals (0 ));
420446 expect (event.client.x, equals (400 ));
421447 expect (event.client.y, equals (401 ));
448+
449+ context.pressAllModifiers ();
450+ event = expectCorrectType (context.primaryDown (clientX: 100 , clientY: 101 ));
451+ expect (event.getModifierState ('Alt' ), true );
452+ expect (event.getModifierState ('Control' ), true );
453+ expect (event.getModifierState ('Meta' ), true );
454+ expect (event.getModifierState ('Shift' ), true );
455+ context.unpressAllModifiers ();
456+ event = expectCorrectType (context.primaryDown (clientX: 100 , clientY: 101 ));
457+ expect (event.getModifierState ('Alt' ), false );
458+ expect (event.getModifierState ('Control' ), false );
459+ expect (event.getModifierState ('Meta' ), false );
460+ expect (event.getModifierState ('Shift' ), false );
422461 });
423462
424463 // ALL ADAPTERS
@@ -2420,6 +2459,15 @@ abstract class _BasicEventContext implements PointerSupportDetector {
24202459
24212460 bool get isSupported;
24222461
2462+ // Accepted modifier keys are 'Alt', 'Control', 'Meta' and 'Shift'.
2463+ // https://www.w3.org/TR/uievents-key/#keys-modifier defines more modifiers,
2464+ // but only the four main modifiers could be set from MouseEvent, PointerEvent
2465+ // and TouchEvent constructors.
2466+ bool altPressed = false ;
2467+ bool ctrlPressed = false ;
2468+ bool metaPressed = false ;
2469+ bool shitPressed = false ;
2470+
24232471 // Generate an event that is:
24242472 //
24252473 // * For mouse, a left click
@@ -2437,6 +2485,20 @@ abstract class _BasicEventContext implements PointerSupportDetector {
24372485 // * For mouse, release LMB
24382486 // * For touch, a touch up
24392487 DomEvent primaryUp ({double clientX, double clientY});
2488+
2489+ void pressAllModifiers () {
2490+ altPressed = true ;
2491+ ctrlPressed = true ;
2492+ metaPressed = true ;
2493+ shitPressed = true ;
2494+ }
2495+
2496+ void unpressAllModifiers () {
2497+ altPressed = false ;
2498+ ctrlPressed = false ;
2499+ metaPressed = false ;
2500+ shitPressed = false ;
2501+ }
24402502}
24412503
24422504mixin _ButtonedEventMixin on _BasicEventContext {
@@ -2622,6 +2684,10 @@ class _TouchEventContext extends _BasicEventContext
26222684 ),
26232685 )
26242686 .toList (),
2687+ 'altKey' : altPressed,
2688+ 'ctrlKey' : ctrlPressed,
2689+ 'metaKey' : metaPressed,
2690+ 'shiftKey' : shitPressed,
26252691 },
26262692 );
26272693 }
@@ -2757,6 +2823,10 @@ class _MouseEventContext extends _BasicEventContext
27572823 'button' : button,
27582824 'clientX' : clientX,
27592825 'clientY' : clientY,
2826+ 'altKey' : altPressed,
2827+ 'ctrlKey' : ctrlPressed,
2828+ 'metaKey' : metaPressed,
2829+ 'shiftKey' : shitPressed,
27602830 }
27612831 ];
27622832 return js_util.callConstructor <DomMouseEvent >(
@@ -2835,6 +2905,10 @@ class _PointerEventContext extends _BasicEventContext
28352905 'clientX' : clientX,
28362906 'clientY' : clientY,
28372907 'pointerType' : pointerType,
2908+ 'altKey' : altPressed,
2909+ 'ctrlKey' : ctrlPressed,
2910+ 'metaKey' : metaPressed,
2911+ 'shiftKey' : shitPressed,
28382912 });
28392913 }
28402914
0 commit comments