emacs-diffs
[Top][All Lists]
Advanced

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

master 5784533cb6: Fix device reporting from scroll bar events on X


From: Po Lu
Subject: master 5784533cb6: Fix device reporting from scroll bar events on X
Date: Wed, 4 May 2022 21:04:43 -0400 (EDT)

branch: master
commit 5784533cb6e1fe5edf4d5f6c24c02ab8ef5be732
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>

    Fix device reporting from scroll bar events on X
    
    * src/xterm.c (x_scroll_bar_handle_click): New argument
    `device'.
    (handle_one_xevent): Set it appropriately as long as required.
---
 src/xterm.c | 40 ++++++++++++++++++++++++++--------------
 1 file changed, 26 insertions(+), 14 deletions(-)

diff --git a/src/xterm.c b/src/xterm.c
index 0625b03ea0..68ee63aea4 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -13226,8 +13226,14 @@ x_scroll_bar_expose (struct scroll_bar *bar, const 
XEvent *event)
 static void
 x_scroll_bar_handle_click (struct scroll_bar *bar,
                           const XEvent *event,
-                          struct input_event *emacs_event)
+                          struct input_event *emacs_event,
+                          Lisp_Object device)
 {
+  int left_range, x, top_range, y;
+#ifndef USE_TOOLKIT_SCROLL_BARS
+  int new_start, new_end;
+#endif
+
   if (! WINDOWP (bar->window))
     emacs_abort ();
 
@@ -13245,11 +13251,15 @@ x_scroll_bar_handle_click (struct scroll_bar *bar,
   emacs_event->frame_or_window = bar->window;
   emacs_event->arg = Qnil;
   emacs_event->timestamp = event->xbutton.time;
+
+  if (!NILP (device))
+    emacs_event->device = device;
+
   if (bar->horizontal)
     {
-      int left_range
-       = HORIZONTAL_SCROLL_BAR_LEFT_RANGE (f, bar->width);
-      int x = event->xbutton.x - HORIZONTAL_SCROLL_BAR_LEFT_BORDER;
+
+      left_range = HORIZONTAL_SCROLL_BAR_LEFT_RANGE (f, bar->width);
+      x = event->xbutton.x - HORIZONTAL_SCROLL_BAR_LEFT_BORDER;
 
       if (x < 0) x = 0;
       if (x > left_range) x = left_range;
@@ -13265,8 +13275,8 @@ x_scroll_bar_handle_click (struct scroll_bar *bar,
       /* If the user has released the handle, set it to its final position.  */
       if (event->type == ButtonRelease && bar->dragging != -1)
        {
-         int new_start = - bar->dragging;
-         int new_end = new_start + bar->end - bar->start;
+         new_start = - bar->dragging;
+         new_end = new_start + bar->end - bar->start;
 
          x_scroll_bar_set_handle (bar, new_start, new_end, false);
          bar->dragging = -1;
@@ -13278,9 +13288,9 @@ x_scroll_bar_handle_click (struct scroll_bar *bar,
     }
   else
     {
-      int top_range
+      top_range
        = VERTICAL_SCROLL_BAR_TOP_RANGE (f, bar->height);
-      int y = event->xbutton.y - VERTICAL_SCROLL_BAR_TOP_BORDER;
+      y = event->xbutton.y - VERTICAL_SCROLL_BAR_TOP_BORDER;
 
       if (y < 0) y = 0;
       if (y > top_range) y = top_range;
@@ -13296,8 +13306,8 @@ x_scroll_bar_handle_click (struct scroll_bar *bar,
       /* If the user has released the handle, set it to its final position.  */
       if (event->type == ButtonRelease && bar->dragging != -1)
        {
-         int new_start = y - bar->dragging;
-         int new_end = new_start + bar->end - bar->start;
+         new_start = y - bar->dragging;
+         new_end = new_start + bar->end - bar->start;
 
          x_scroll_bar_set_handle (bar, new_start, new_end, false);
          bar->dragging = -1;
@@ -16532,12 +16542,12 @@ handle_one_xevent (struct x_display_info *dpyinfo,
                scroll bars.  */
             if (bar && event->xbutton.state & ControlMask)
               {
-                x_scroll_bar_handle_click (bar, event, &inev.ie);
+                x_scroll_bar_handle_click (bar, event, &inev.ie, Qnil);
                 *finish = X_EVENT_DROP;
               }
 #else /* not USE_TOOLKIT_SCROLL_BARS */
             if (bar)
-              x_scroll_bar_handle_click (bar, event, &inev.ie);
+              x_scroll_bar_handle_click (bar, event, &inev.ie, Qnil);
 #endif /* not USE_TOOLKIT_SCROLL_BARS */
           }
 
@@ -17993,13 +18003,15 @@ handle_one_xevent (struct x_display_info *dpyinfo,
 
 #ifndef USE_TOOLKIT_SCROLL_BARS
                  if (bar)
-                   x_scroll_bar_handle_click (bar, (XEvent *) &bv, &inev.ie);
+                   x_scroll_bar_handle_click (bar, (XEvent *) &bv, &inev.ie,
+                                              source ? source->name : Qnil);
 #else
                  /* Make the "Ctrl-Mouse-2 splits window" work for toolkit
                     scroll bars.  */
                  if (bar && xev->mods.effective & ControlMask)
                    {
-                     x_scroll_bar_handle_click (bar, (XEvent *) &bv, &inev.ie);
+                     x_scroll_bar_handle_click (bar, (XEvent *) &bv, &inev.ie,
+                                                source ? source->name : Qnil);
                      *finish = X_EVENT_DROP;
                    }
 #endif



reply via email to

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