From 3b3633ad2693d4c050e76fe666043180e51cd0b9 Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Wed, 1 Feb 2017 18:35:16 +0300 Subject: [PATCH] Ignore duplicated scroll events --- src/Gtk/Avalonia.Gtk3/TopLevelImpl.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/Gtk/Avalonia.Gtk3/TopLevelImpl.cs b/src/Gtk/Avalonia.Gtk3/TopLevelImpl.cs index 52feafa99d..a8dc884244 100644 --- a/src/Gtk/Avalonia.Gtk3/TopLevelImpl.cs +++ b/src/Gtk/Avalonia.Gtk3/TopLevelImpl.cs @@ -22,6 +22,7 @@ namespace Avalonia.Gtk3 private Size _lastSize; private Point _lastPosition; private uint _lastKbdEvent; + private uint _lastSmoothScrollEvent; public TopLevelImpl(GtkWindow gtkWidget) { @@ -145,6 +146,11 @@ namespace Avalonia.Gtk3 private unsafe bool OnScroll(IntPtr w, IntPtr ev, IntPtr userdata) { var evnt = (GdkEventScroll*)ev; + + //Ignore duplicates + if (evnt->time - _lastSmoothScrollEvent < 10 && evnt->direction != GdkScrollDirection.Smooth) + return true; + var delta = new Vector(); const double step = (double) 1; if (evnt->direction == GdkScrollDirection.Down) @@ -158,6 +164,7 @@ namespace Avalonia.Gtk3 else if (evnt->direction == GdkScrollDirection.Smooth) { delta = new Vector(-evnt->delta_x, -evnt->delta_y); + _lastSmoothScrollEvent = evnt->time; } var e = new RawMouseWheelEventArgs(Gtk3Platform.Mouse, evnt->time, _inputRoot, new Point(evnt->x, evnt->y), delta, GetModifierKeys(evnt->state));