From 535e6c5c6e5293a44ea08849ab759c62dfd5ffb5 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Tue, 24 Jan 2012 00:09:40 +0100 Subject: [PATCH] gdk: Filter out either smooth or non-smooth event depending on the evmask If a device provides both smooth and non-smooth events, the latter will be flagged with _gdk_event_set_pointer_emulated() so the client side window receives one or the other. If a device is only able to deliver non-smooth events, those will be sent, so both direction/deltas may need to be handled. --- gdk/gdkwindow.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c index a46ccfb0ad..55c9e3779a 100644 --- a/gdk/gdkwindow.c +++ b/gdk/gdkwindow.c @@ -9888,6 +9888,13 @@ proxy_button_event (GdkEvent *source_event, state, time_, source_event, serial, FALSE); } + else if (type == GDK_SCROLL && + (((evmask & GDK_SMOOTH_SCROLL_MASK) == 0 && + source_event->scroll.direction == GDK_SCROLL_SMOOTH) || + ((evmask & GDK_SMOOTH_SCROLL_MASK) != 0 && + source_event->scroll.direction != GDK_SCROLL_SMOOTH && + _gdk_event_get_pointer_emulated (source_event)))) + return FALSE; event = _gdk_make_event (event_win, type, source_event, FALSE);