diff --git a/exo/exo-icon-view.c b/exo/exo-icon-view.c index f6e3948..ffb9fca 100644 --- a/exo/exo-icon-view.c +++ b/exo/exo-icon-view.c @@ -1720,6 +1720,9 @@ exo_icon_view_realize (GtkWidget *widget) | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK +#if GTK_CHECK_VERSION (3, 4, 0) + | GDK_SMOOTH_SCROLL_MASK +#endif | gtk_widget_get_events (widget); priv->bin_window = gdk_window_new (gtk_widget_get_window (widget), &attributes, attributes_mask); gdk_window_set_user_data (priv->bin_window, widget); @@ -2866,10 +2869,31 @@ static gboolean exo_icon_view_scroll_event (GtkWidget *widget, GdkEventScroll *event) { - GtkAdjustment *adjustment; - ExoIconView *icon_view = EXO_ICON_VIEW (widget); - gdouble delta; - gdouble value; + GdkScrollDirection direction; + GtkAdjustment *adjustment; + ExoIconView *icon_view = EXO_ICON_VIEW (widget); + gdouble delta; + gdouble value; + +#if GTK_CHECK_VERSION (3, 0, 0) + if (event->direction != GDK_SCROLL_SMOOTH) + direction = event->direction; + else if (event->delta_y < 0) + direction = GDK_SCROLL_UP; + else if (event->delta_y > 0) + direction = GDK_SCROLL_DOWN; + else if (event->delta_x < 0) + direction = GDK_SCROLL_LEFT; + else if (event->delta_x > 0) + direction = GDK_SCROLL_RIGHT; + else + { + g_debug ("GDK_SCROLL_SMOOTH scrolling event with no delta happened"); + return TRUE; + } +#else + direction = event->direction; +#endif /* we don't care for scroll events in "rows" layout mode, as * that's completely handled by GtkScrolledWindow. @@ -2880,7 +2904,7 @@ exo_icon_view_scroll_event (GtkWidget *widget, /* also, we don't care for anything but Up/Down, as * everything else will be handled by GtkScrolledWindow. */ - if (event->direction != GDK_SCROLL_UP && event->direction != GDK_SCROLL_DOWN) + if (direction != GDK_SCROLL_UP && direction != GDK_SCROLL_DOWN) return FALSE; /* determine the horizontal adjustment */ @@ -2888,7 +2912,7 @@ exo_icon_view_scroll_event (GtkWidget *widget, /* determine the scroll delta */ delta = pow (gtk_adjustment_get_page_size (adjustment), 2.0 / 3.0); - delta = (event->direction == GDK_SCROLL_UP) ? -delta : delta; + delta = (direction == GDK_SCROLL_UP) ? -delta : delta; /* apply the new adjustment value */ value = CLAMP (gtk_adjustment_get_value (adjustment) + delta, gtk_adjustment_get_lower (adjustment), gtk_adjustment_get_upper (adjustment) - gtk_adjustment_get_page_size (adjustment));