From aca8351376da38fbfa2b8fb632b0868e13381f00 Mon Sep 17 00:00:00 2001 From: John Ralls Date: Sun, 13 Mar 2022 13:30:49 -0700 Subject: [PATCH] Bug 798474 - Windows 10: Mouse scroll wheel on register... only scrolls 1 pixel at a time (instead of 1 line at a time) Gdk supports fine-resolution smooth scrolling on macOS only. --- gnucash/register/register-gnome/gnucash-sheet.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/gnucash/register/register-gnome/gnucash-sheet.c b/gnucash/register/register-gnome/gnucash-sheet.c index acbfcb01c6..2991e31e7b 100644 --- a/gnucash/register/register-gnome/gnucash-sheet.c +++ b/gnucash/register/register-gnome/gnucash-sheet.c @@ -1377,6 +1377,7 @@ gnucash_scroll_event (GtkWidget *widget, GdkEventScroll *event) GnucashSheet *sheet; GtkAdjustment *vadj; gfloat h_value, v_value; + int direction; g_return_val_if_fail (widget != NULL, TRUE); g_return_val_if_fail (GNUCASH_IS_SHEET(widget), TRUE); @@ -1394,12 +1395,22 @@ gnucash_scroll_event (GtkWidget *widget, GdkEventScroll *event) case GDK_SCROLL_DOWN: v_value += gtk_adjustment_get_step_increment (vadj); break; +/* GdkQuartz reserves GDK_SCROLL_SMOOTH for high-resolution touchpad + * scrolling events, and in that case scrolling by line is much too + * fast. Gdk/Wayland and Gdk/Win32 pass GDK_SCROLL_SMOOTH for all + * scroll-wheel events and expect coarse resolution. + */ case GDK_SCROLL_SMOOTH: h_value = gtk_adjustment_get_value (sheet->hadj); h_value += event->delta_x; h_value = clamp_scrollable_value (h_value, sheet->hadj); gtk_adjustment_set_value (sheet->hadj, h_value); +#if defined MAC_INTEGRATION v_value += event->delta_y; +#else + direction = event->delta_y > 0 ? 1 : event->delta_y < 0 ? -1 : 0; + v_value += gtk_adjustment_get_step_increment (vadj) * direction; +#endif break; default: return FALSE;