bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#52685: 29.0.50; Horizontal scrolling doesn't work when compiled with


From: Po Lu
Subject: bug#52685: 29.0.50; Horizontal scrolling doesn't work when compiled with pgtk
Date: Wed, 22 Dec 2021 09:09:11 +0800
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.60 (gnu/linux)

Po Lu <luangruo@yahoo.com> writes:

> Andrey Listopadov <andreyorst@gmail.com> writes:
>
>> When `pixel-scroll-precision-mode' is disabled everything works fine.
>> When compiled without `--with-pgtk' but with `--with-xinput2'
>> `pixel-scroll-precision-mode' works as expected.
>
> Thanks, I will look into this now.

Please try the following patch to see if it resolves your problem.
Thanks.

diff --git a/src/pgtkterm.c b/src/pgtkterm.c
index bd61c65edd..bea2650584 100644
--- a/src/pgtkterm.c
+++ b/src/pgtkterm.c
@@ -6133,78 +6133,64 @@ scroll_event (GtkWidget * widget, GdkEvent * event, 
gpointer * user_data)
     }
   else if (gdk_event_get_scroll_deltas (event, &delta_x, &delta_y))
     {
-      dpyinfo->scroll.acc_x += delta_x;
-      dpyinfo->scroll.acc_y += delta_y;
-      if (dpyinfo->scroll.acc_y >= dpyinfo->scroll.y_per_line
-         || !mwheel_coalesce_scroll_events)
+      if (!mwheel_coalesce_scroll_events)
        {
-         int nlines = dpyinfo->scroll.acc_y / dpyinfo->scroll.y_per_line;
-         inev.ie.kind = WHEEL_EVENT;
-         inev.ie.modifiers |= down_modifier;
-         inev.ie.arg = list3 (make_fixnum (nlines),
-                              make_float (-dpyinfo->scroll.acc_x * 100),
-                              make_float (-dpyinfo->scroll.acc_y * 100));
-         if (!mwheel_coalesce_scroll_events)
-           {
-             dpyinfo->scroll.acc_y = 0;
-             dpyinfo->scroll.acc_x = 0;
-           }
-         else
+         inev.ie.kind = ((fabs (delta_x) > fabs (delta_y))
+                         ? HORIZ_WHEEL_EVENT
+                         : WHEEL_EVENT);
+         inev.ie.modifiers = (inev.ie.kind == HORIZ_WHEEL_EVENT
+                              ? (delta_x >= 0 ? down_modifier : up_modifier)
+                              : (delta_y >= 0 ? down_modifier : up_modifier));
+         inev.ie.arg = list3 (Qnil, make_float (delta_x),
+                              make_float (delta_y));
+       }
+      else
+       {
+         dpyinfo->scroll.acc_x += delta_x;
+         dpyinfo->scroll.acc_y += delta_y;
+         if (dpyinfo->scroll.acc_y >= dpyinfo->scroll.y_per_line)
            {
+             int nlines = dpyinfo->scroll.acc_y / dpyinfo->scroll.y_per_line;
+             inev.ie.kind = WHEEL_EVENT;
+             inev.ie.modifiers |= down_modifier;
+             inev.ie.arg = list3 (make_fixnum (nlines),
+                                  make_float (-dpyinfo->scroll.acc_x * 100),
+                                  make_float (-dpyinfo->scroll.acc_y * 100));
              dpyinfo->scroll.acc_y -= dpyinfo->scroll.y_per_line * nlines;
            }
-       }
-      else if (dpyinfo->scroll.acc_y <= -dpyinfo->scroll.y_per_line
-              || !mwheel_coalesce_scroll_events)
-       {
-         int nlines = -dpyinfo->scroll.acc_y / dpyinfo->scroll.y_per_line;
-         inev.ie.kind = WHEEL_EVENT;
-         inev.ie.modifiers |= up_modifier;
-         inev.ie.arg = list3 (make_fixnum (nlines),
-                              make_float (-dpyinfo->scroll.acc_x * 100),
-                              make_float (-dpyinfo->scroll.acc_y * 100));
-
-         if (!mwheel_coalesce_scroll_events)
+         else if (dpyinfo->scroll.acc_y <= -dpyinfo->scroll.y_per_line)
            {
-             dpyinfo->scroll.acc_y = 0;
-             dpyinfo->scroll.acc_x = 0;
+             int nlines = -dpyinfo->scroll.acc_y / dpyinfo->scroll.y_per_line;
+             inev.ie.kind = WHEEL_EVENT;
+             inev.ie.modifiers |= up_modifier;
+             inev.ie.arg = list3 (make_fixnum (nlines),
+                                  make_float (-dpyinfo->scroll.acc_x * 100),
+                                  make_float (-dpyinfo->scroll.acc_y * 100));
+
+             dpyinfo->scroll.acc_y -= -dpyinfo->scroll.y_per_line * nlines;
            }
-         else
-           dpyinfo->scroll.acc_y -= -dpyinfo->scroll.y_per_line * nlines;
-       }
-      else if (dpyinfo->scroll.acc_x >= dpyinfo->scroll.x_per_char
-              || !mwheel_coalesce_scroll_events)
-       {
-         int nchars = dpyinfo->scroll.acc_x / dpyinfo->scroll.x_per_char;
-         inev.ie.kind = HORIZ_WHEEL_EVENT;
-         inev.ie.modifiers |= up_modifier;
-         inev.ie.arg = list3 (make_fixnum (nchars),
-                              make_float (-dpyinfo->scroll.acc_x * 100),
-                              make_float (-dpyinfo->scroll.acc_y * 100));
-
-         if (mwheel_coalesce_scroll_events)
-           dpyinfo->scroll.acc_x -= dpyinfo->scroll.x_per_char * nchars;
-         else
+         else if (dpyinfo->scroll.acc_x >= dpyinfo->scroll.x_per_char
+                  || !mwheel_coalesce_scroll_events)
            {
-             dpyinfo->scroll.acc_x = 0;
-             dpyinfo->scroll.acc_y = 0;
+             int nchars = dpyinfo->scroll.acc_x / dpyinfo->scroll.x_per_char;
+             inev.ie.kind = HORIZ_WHEEL_EVENT;
+             inev.ie.modifiers |= up_modifier;
+             inev.ie.arg = list3 (make_fixnum (nchars),
+                                  make_float (-dpyinfo->scroll.acc_x * 100),
+                                  make_float (-dpyinfo->scroll.acc_y * 100));
+
+             dpyinfo->scroll.acc_x -= dpyinfo->scroll.x_per_char * nchars;
            }
-       }
-      else if (dpyinfo->scroll.acc_x <= -dpyinfo->scroll.x_per_char)
-       {
-         int nchars = -dpyinfo->scroll.acc_x / dpyinfo->scroll.x_per_char;
-         inev.ie.kind = HORIZ_WHEEL_EVENT;
-         inev.ie.modifiers |= down_modifier;
-         inev.ie.arg = list3 (make_fixnum (nchars),
-                              make_float (-dpyinfo->scroll.acc_x * 100),
-                              make_float (-dpyinfo->scroll.acc_y * 100));
-
-         if (mwheel_coalesce_scroll_events)
-           dpyinfo->scroll.acc_x -= -dpyinfo->scroll.x_per_char * nchars;
-         else
+         else if (dpyinfo->scroll.acc_x <= -dpyinfo->scroll.x_per_char)
            {
-             dpyinfo->scroll.acc_x = 0;
-             dpyinfo->scroll.acc_y = 0;
+             int nchars = -dpyinfo->scroll.acc_x / dpyinfo->scroll.x_per_char;
+             inev.ie.kind = HORIZ_WHEEL_EVENT;
+             inev.ie.modifiers |= down_modifier;
+             inev.ie.arg = list3 (make_fixnum (nchars),
+                                  make_float (-dpyinfo->scroll.acc_x * 100),
+                                  make_float (-dpyinfo->scroll.acc_y * 100));
+
+             dpyinfo->scroll.acc_x -= -dpyinfo->scroll.x_per_char * nchars;
            }
        }
     }




reply via email to

[Prev in Thread] Current Thread [Next in Thread]