]> git.eshelyaron.com Git - emacs.git/commitdiff
Send scroll stop events to xwidgets correctly
authorPo Lu <luangruo@yahoo.com>
Wed, 8 Dec 2021 02:04:31 +0000 (10:04 +0800)
committerPo Lu <luangruo@yahoo.com>
Wed, 8 Dec 2021 02:04:31 +0000 (10:04 +0800)
* src/xterm.c (handle_one_xevent): Record stop events manually.

* src/xwidget.h (xwidget_scroll):
* src/xwidget.c (xwidget_scroll): New parameter `stop_p'.

src/xterm.c
src/xwidget.c
src/xwidget.h

index 3f7b9560345951b86f99fdd4c44e66126894d57b..ae0daa79f31589fd5c11b182e77ee6a31b24283d 100644 (file)
@@ -9851,6 +9851,7 @@ handle_one_xevent (struct x_display_info *dpyinfo,
        XIValuatorState *states;
        double *values;
        bool found_valuator = false;
+       bool any_stop_p = false;
 
        /* A fake XMotionEvent for x_note_mouse_movement. */
        XMotionEvent ev;
@@ -10003,9 +10004,13 @@ handle_one_xevent (struct x_display_info *dpyinfo,
                            if (val->horizontal)
                              xv_total_x += delta;
                            else
-                             xv_total_y += -delta;
+                             xv_total_y += delta;
 
                            found_valuator = true;
+
+                           if (delta == 0.0)
+                             any_stop_p = true;
+
                            continue;
                          }
 #endif
@@ -10092,7 +10097,7 @@ handle_one_xevent (struct x_display_info *dpyinfo,
                if (found_valuator)
                  xwidget_scroll (xv, xev->event_x, xev->event_y,
                                  xv_total_x, xv_total_y, xev->mods.effective,
-                                 xev->time);
+                                 xev->time, any_stop_p);
                else
                  xwidget_motion_notify (xv, xev->event_x, xev->event_y,
                                         xev->mods.effective, xev->time);
index 9b9f364ce40d1a2e607651fde2d964d78dd4873d..d8510ef928609c276e46f4a0670d726d4c11d242 100644 (file)
@@ -1062,7 +1062,8 @@ xwidget_motion_notify (struct xwidget_view *view,
 
 void
 xwidget_scroll (struct xwidget_view *view, double x, double y,
-               double dx, double dy, uint state, Time time)
+               double dx, double dy, uint state, Time time,
+               bool stop_p)
 {
   GdkEvent *xg_event;
   GtkWidget *target;
@@ -1097,9 +1098,7 @@ xwidget_scroll (struct xwidget_view *view, double x, double y,
   xg_event->scroll.delta_x = dx;
   xg_event->scroll.delta_y = dy;
   xg_event->scroll.device = find_suitable_pointer (view->frame);
-
-  if (!(fabs (dx) > 0) || !(fabs (dy) > 0))
-    xg_event->scroll.is_stop = TRUE;
+  xg_event->scroll.is_stop = stop_p;
 
   g_object_ref (xg_event->any.window);
 
index f2d497c09206f298cd4e6c448fdd19dc79bdd204..a03006fde9a16987023fb7b3b6df24d1528d722b 100644 (file)
@@ -199,7 +199,7 @@ extern void xwidget_motion_or_crossing (struct xwidget_view *,
 extern void xwidget_motion_notify (struct xwidget_view *, double,
                                   double, uint, Time);
 extern void xwidget_scroll (struct xwidget_view *, double, double,
-                            double, double, uint, Time);
+                            double, double, uint, Time, bool);
 #endif
 #endif
 #else