diff --git a/gtk/gtkmenu.c b/gtk/gtkmenu.c index fc25098..de9a4b0 100644 --- a/gtk/gtkmenu.c +++ b/gtk/gtkmenu.c @@ -55,6 +55,7 @@ #define MENU_SCROLL_FAST_ZONE 8 #define MENU_SCROLL_TIMEOUT1 50 #define MENU_SCROLL_TIMEOUT2 20 +#define GTK_SCROLL_STEP_SMOOTH 2 #define ATTACH_INFO_KEY "gtk-menu-child-attach-info-key" #define ATTACHED_MENUS "gtk-attached-menus" @@ -3504,17 +3505,25 @@ gtk_menu_scroll (GtkWidget *widget, GdkEventScroll *event) { GtkMenu *menu = GTK_MENU (widget); + gdouble dx, dy; - switch (event->direction) + if (gdk_event_get_scroll_deltas ((GdkEvent *) event, &dx, &dy)) { - case GDK_SCROLL_RIGHT: - case GDK_SCROLL_DOWN: - gtk_menu_scroll_by (menu, MENU_SCROLL_STEP2); - break; - case GDK_SCROLL_LEFT: - case GDK_SCROLL_UP: - gtk_menu_scroll_by (menu, - MENU_SCROLL_STEP2); - break; + gtk_menu_scroll_by (menu, GTK_SCROLL_STEP_SMOOTH * dy); + } + else + { + switch (event->direction) + { + case GDK_SCROLL_RIGHT: + case GDK_SCROLL_DOWN: + gtk_menu_scroll_by (menu, MENU_SCROLL_STEP2); + break; + case GDK_SCROLL_LEFT: + case GDK_SCROLL_UP: + gtk_menu_scroll_by (menu, - MENU_SCROLL_STEP2); + break; + } } return TRUE;