[gtk+/gtk-3-20] wayland: Improve checks when flushing scroll events
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/gtk-3-20] wayland: Improve checks when flushing scroll events
- Date: Tue, 19 Apr 2016 14:58:06 +0000 (UTC)
commit 9187677a781e6776cc35065366fad416b282e7de
Author: Carlos Garnacho <carlosg gnome org>
Date: Mon Apr 18 14:10:49 2016 +0100
wayland: Improve checks when flushing scroll events
If we get gdk_wayland_seat_flush_frame_event() with no previous event to be
flushed, we fallback into the scroll event checks. However, there's no check
performed there as to whether it really scrolled, so it'd always send a smooth
scroll event with 0/0 deltas in this case.
This should be mostly harmless, but still, we should only end up emitting scroll
events if those really happened.
gdk/wayland/gdkdevice-wayland.c | 41 +++++++++++++++++++++-----------------
1 files changed, 23 insertions(+), 18 deletions(-)
---
diff --git a/gdk/wayland/gdkdevice-wayland.c b/gdk/wayland/gdkdevice-wayland.c
index d02f580..296dd3c 100644
--- a/gdk/wayland/gdkdevice-wayland.c
+++ b/gdk/wayland/gdkdevice-wayland.c
@@ -1054,26 +1054,31 @@ flush_scroll_event (GdkWaylandSeat *seat,
direction = GDK_SCROLL_DOWN;
flush_discrete_scroll_event (seat, direction);
+ pointer_frame->discrete_x = 0;
+ pointer_frame->discrete_y = 0;
}
- /* Axes can stop independently, if we stop on one axis but have a
- * delta on the other, we don't count it as a stop event.
- */
- if (pointer_frame->is_scroll_stop &&
- pointer_frame->delta_x == 0 &&
- pointer_frame->delta_y == 0)
- is_stop = TRUE;
-
- flush_smooth_scroll_event (seat,
- pointer_frame->delta_x,
- pointer_frame->delta_y,
- is_stop);
-
- pointer_frame->delta_x = 0;
- pointer_frame->delta_y = 0;
- pointer_frame->discrete_x = 0;
- pointer_frame->discrete_y = 0;
- pointer_frame->is_scroll_stop = FALSE;
+ if (pointer_frame->is_scroll_stop ||
+ pointer_frame->delta_x != 0 ||
+ pointer_frame->delta_y != 0)
+ {
+ /* Axes can stop independently, if we stop on one axis but have a
+ * delta on the other, we don't count it as a stop event.
+ */
+ if (pointer_frame->is_scroll_stop &&
+ pointer_frame->delta_x == 0 &&
+ pointer_frame->delta_y == 0)
+ is_stop = TRUE;
+
+ flush_smooth_scroll_event (seat,
+ pointer_frame->delta_x,
+ pointer_frame->delta_y,
+ is_stop);
+
+ pointer_frame->delta_x = 0;
+ pointer_frame->delta_y = 0;
+ pointer_frame->is_scroll_stop = FALSE;
+ }
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]