diff options
Diffstat (limited to 'src/interface-gtk/interface.c')
-rw-r--r-- | src/interface-gtk/interface.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/interface-gtk/interface.c b/src/interface-gtk/interface.c index 9241767..3a2a971 100644 --- a/src/interface-gtk/interface.c +++ b/src/interface-gtk/interface.c @@ -253,7 +253,7 @@ teco_interface_init(void) gint events = gtk_widget_get_events(teco_interface.event_box_widget); events |= GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | - GDK_SCROLL_MASK; + GDK_SCROLL_MASK | GDK_SMOOTH_SCROLL_MASK; gtk_widget_set_events(teco_interface.event_box_widget, events); g_signal_connect(teco_interface.event_box_widget, "button-press-event", @@ -1114,11 +1114,10 @@ teco_interface_handle_mouse_button(GdkEventButton *event, GError **error) static gboolean teco_interface_handle_scroll(GdkEventScroll *event, GError **error) { + static gdouble delta_y = 0; + g_assert(event->type == GDK_SCROLL); - /* - * FIXME: Do we have to support GDK_SCROLL_SMOOTH? - */ switch (event->direction) { case GDK_SCROLL_UP: teco_mouse.type = TECO_MOUSE_SCROLLUP; @@ -1126,6 +1125,15 @@ teco_interface_handle_scroll(GdkEventScroll *event, GError **error) case GDK_SCROLL_DOWN: teco_mouse.type = TECO_MOUSE_SCROLLDOWN; break; + case GDK_SCROLL_SMOOTH: + /* emulate discrete scrolling */ + delta_y += event->delta_y; + if (ABS(delta_y) < 12) + return TRUE; + teco_mouse.type = delta_y < 0 ? TECO_MOUSE_SCROLLUP + : TECO_MOUSE_SCROLLDOWN; + delta_y = 0; + break; default: return TRUE; } |