emacs-diffs
[Top][All Lists]
Advanced

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

master 84d4a34919: Fix duplicate scroll events without XI2


From: Po Lu
Subject: master 84d4a34919: Fix duplicate scroll events without XI2
Date: Fri, 28 Jan 2022 01:07:46 -0500 (EST)

branch: master
commit 84d4a349190fc51bf333c6fb60ab36be39a6a678
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>

    Fix duplicate scroll events without XI2
    
    * src/xwidget.c (xwidget_button): Only generate scroll events
    when the button was released.
---
 src/xwidget.c | 73 +++++++++++++++++++++++++++++++----------------------------
 1 file changed, 38 insertions(+), 35 deletions(-)

diff --git a/src/xwidget.c b/src/xwidget.c
index 2080f109cd..75e909f0e6 100644
--- a/src/xwidget.c
+++ b/src/xwidget.c
@@ -1295,45 +1295,48 @@ xwidget_button (struct xwidget_view *view,
           || FRAME_DISPLAY_INFO (view->frame)->xi2_version < 1)
 #endif
     {
-      GdkEvent *xg_event = gdk_event_new (GDK_SCROLL);
-      struct xwidget *model = XXWIDGET (view->model);
-      GtkWidget *target;
-
-      x += view->clip_left;
-      y += view->clip_top;
-
-      target = find_widget_at_pos (model->widgetwindow_osr, x, y, &x, &y,
-                                  true, view);
-
-      if (!target)
-       target = model->widget_osr;
-
-      xg_event->any.window = gtk_widget_get_window (target);
-      g_object_ref (xg_event->any.window); /* The window will be unrefed
-                                             later by gdk_event_free.  */
-      if (button == 4)
-       xg_event->scroll.direction = GDK_SCROLL_UP;
-      else if (button == 5)
-       xg_event->scroll.direction = GDK_SCROLL_DOWN;
-      else if (button == 6)
-       xg_event->scroll.direction = GDK_SCROLL_LEFT;
-      else
-       xg_event->scroll.direction = GDK_SCROLL_RIGHT;
+      if (!down_p)
+       {
+         GdkEvent *xg_event = gdk_event_new (GDK_SCROLL);
+         struct xwidget *model = XXWIDGET (view->model);
+         GtkWidget *target;
+
+         x += view->clip_left;
+         y += view->clip_top;
+
+         target = find_widget_at_pos (model->widgetwindow_osr, x, y, &x, &y,
+                                      true, view);
+
+         if (!target)
+           target = model->widget_osr;
+
+         xg_event->any.window = gtk_widget_get_window (target);
+         g_object_ref (xg_event->any.window); /* The window will be unrefed
+                                                 later by gdk_event_free.  */
+         if (button == 4)
+           xg_event->scroll.direction = GDK_SCROLL_UP;
+         else if (button == 5)
+           xg_event->scroll.direction = GDK_SCROLL_DOWN;
+         else if (button == 6)
+           xg_event->scroll.direction = GDK_SCROLL_LEFT;
+         else
+           xg_event->scroll.direction = GDK_SCROLL_RIGHT;
 
-      xg_event->scroll.device = find_suitable_pointer (view->frame);
+         xg_event->scroll.device = find_suitable_pointer (view->frame);
 
-      xg_event->scroll.x = x;
-      xg_event->scroll.x_root = x;
-      xg_event->scroll.y = y;
-      xg_event->scroll.y_root = y;
-      xg_event->scroll.state = modifier_state;
-      xg_event->scroll.time = time;
+         xg_event->scroll.x = x;
+         xg_event->scroll.x_root = x;
+         xg_event->scroll.y = y;
+         xg_event->scroll.y_root = y;
+         xg_event->scroll.state = modifier_state;
+         xg_event->scroll.time = time;
 
-      xg_event->scroll.delta_x = 0;
-      xg_event->scroll.delta_y = 0;
+         xg_event->scroll.delta_x = 0;
+         xg_event->scroll.delta_y = 0;
 
-      gtk_main_do_event (xg_event);
-      gdk_event_free (xg_event);
+         gtk_main_do_event (xg_event);
+         gdk_event_free (xg_event);
+       }
     }
 }
 



reply via email to

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