@@ -290,6 +290,29 @@ mixin _WheelEventListenerMixin on _BaseAdapter {
290290 );
291291 }
292292
293+ void _handleWheelEvent (
294+ html.Event e, void Function (Iterable <ui.PointerData >) sink) {
295+ assert (e is html.WheelEvent );
296+ final html.WheelEvent event = e as html.WheelEvent ;
297+ if (_debugLogPointerEvents) {
298+ print (event.type);
299+ }
300+ if (event.getModifierState ('Control' ) &&
301+ operatingSystem != OperatingSystem .macOs &&
302+ operatingSystem != OperatingSystem .iOs) {
303+ // Ignore Control+wheel events since the default handler
304+ // will change browser zoom level instead of scrolling.
305+ // The exception is MacOs where Control+wheel will still scroll and zoom
306+ // is not implemented.
307+ return ;
308+ }
309+ _callback (_convertWheelEventToPointerData (event));
310+ // Prevent default so mouse wheel event doesn't get converted to
311+ // a scroll event that semantic nodes would process.
312+ //
313+ event.preventDefault ();
314+ }
315+
293316 /// For browsers that report delta line instead of pixels such as FireFox
294317 /// compute line height using the default font size.
295318 ///
@@ -514,14 +537,7 @@ class _PointerAdapter extends _BaseAdapter with _WheelEventListenerMixin {
514537 });
515538
516539 _addWheelEventListener ((html.Event event) {
517- assert (event is html.WheelEvent );
518- if (_debugLogPointerEvents) {
519- print (event.type);
520- }
521- _callback (_convertWheelEventToPointerData (event as html.WheelEvent ));
522- // Prevent default so mouse wheel event doesn't get converted to
523- // a scroll event that semantic nodes would process.
524- event.preventDefault ();
540+ _handleWheelEvent (event, _callback);
525541 });
526542 }
527543
@@ -793,14 +809,7 @@ class _MouseAdapter extends _BaseAdapter with _WheelEventListenerMixin {
793809 }, acceptOutsideGlasspane: true );
794810
795811 _addWheelEventListener ((html.Event event) {
796- assert (event is html.WheelEvent );
797- if (_debugLogPointerEvents) {
798- print (event.type);
799- }
800- _callback (_convertWheelEventToPointerData (event as html.WheelEvent ));
801- // Prevent default so mouse wheel event doesn't get converted to
802- // a scroll event that semantic nodes would process.
803- event.preventDefault ();
812+ _handleWheelEvent (event, _callback);
804813 });
805814 }
806815
0 commit comments