]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix setting user time for mouse movement events
authorPo Lu <luangruo@yahoo.com>
Wed, 22 Jun 2022 01:49:16 +0000 (09:49 +0800)
committerPo Lu <luangruo@yahoo.com>
Wed, 22 Jun 2022 01:49:16 +0000 (09:49 +0800)
* src/xterm.c (x_note_mouse_movement, XTmouse_position)
(x_scroll_bar_note_movement, handle_one_xevent): Record whether
or not mouse movement was send_event before using the mouse
movement time.

* src/xterm.h (struct x_display_info): New field
`last_mouse_movement_time_send_event'.

src/xterm.c
src/xterm.h

index ee78da085e2dc3d587defac6e22a762c04351ba9..f97452a2e5684b069c7e0e17369124ed940a0532 100644 (file)
@@ -12335,10 +12335,11 @@ x_construct_mouse_click (struct input_event *result,
    The XMotionEvent structure passed as EVENT might not come from the
    X server, and instead be artificially constructed from input
    extension events.  In these special events, the only fields that
-   are initialized are `time', `window', and `x' and `y'.  This
-   function should not access any other fields in EVENT without also
-   initializing the corresponding fields in `ev' under the XI_Motion,
-   XI_Enter and XI_Leave labels inside `handle_one_xevent'.  */
+   are initialized are `time', `window', `send_event', `x' and `y'.
+   This function should not access any other fields in EVENT without
+   also initializing the corresponding fields in `ev' under the
+   XI_Motion, XI_Enter and XI_Leave labels inside
+   `handle_one_xevent'.  */
 
 static bool
 x_note_mouse_movement (struct frame *frame, const XMotionEvent *event,
@@ -12352,6 +12353,7 @@ x_note_mouse_movement (struct frame *frame, const XMotionEvent *event,
 
   dpyinfo = FRAME_DISPLAY_INFO (frame);
   dpyinfo->last_mouse_movement_time = event->time;
+  dpyinfo->last_mouse_movement_time_send_event = event->send_event;
   dpyinfo->last_mouse_motion_frame = frame;
   dpyinfo->last_mouse_motion_x = event->x;
   dpyinfo->last_mouse_motion_y = event->y;
@@ -12667,7 +12669,8 @@ XTmouse_position (struct frame **fp, int insist, Lisp_Object *bar_window,
            && (dpyinfo->last_user_time
                < dpyinfo->last_mouse_movement_time))
          x_display_set_last_user_time (dpyinfo,
-                                       dpyinfo->last_mouse_movement_time, false);
+                                       dpyinfo->last_mouse_movement_time,
+                                       dpyinfo->last_mouse_movement_time_send_event);
 
        if ((!f1 || FRAME_TOOLTIP_P (f1))
            && (EQ (track_mouse, Qdropping)
@@ -15075,6 +15078,7 @@ x_scroll_bar_note_movement (struct scroll_bar *bar,
   struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
 
   dpyinfo->last_mouse_movement_time = event->time;
+  dpyinfo->last_mouse_movement_send_event = event->send_event;
   dpyinfo->last_mouse_scroll_bar = bar;
   f->mouse_moved = true;
 
@@ -19168,10 +19172,12 @@ handle_one_xevent (struct x_display_info *dpyinfo,
 
              any = x_top_window_to_frame (dpyinfo, enter->event);
              source = xi_device_from_id (dpyinfo, enter->sourceid);
+
              ev.x = lrint (enter->event_x);
              ev.y = lrint (enter->event_y);
              ev.window = enter->event;
              ev.time = enter->time;
+             ev.send_event = enter->send_event;
 
              x_display_set_last_user_time (dpyinfo, enter->time,
                                            enter->send_event);
@@ -19262,6 +19268,7 @@ handle_one_xevent (struct x_display_info *dpyinfo,
              ev.y = lrint (leave->event_y);
              ev.window = leave->event;
              ev.time = leave->time;
+             ev.send_event = leave->send_event;
 #endif
 
              any = x_top_window_to_frame (dpyinfo, leave->event);
@@ -19680,6 +19687,7 @@ handle_one_xevent (struct x_display_info *dpyinfo,
              ev.y = lrint (xev->event_y);
              ev.window = xev->event;
              ev.time = xev->time;
+             ev.send_event = xev->send_event;
 
 #ifdef USE_MOTIF
              use_copy = true;
index 3d243f3eabff8cd50d6c4b9bfc9838bd4bc2327f..f136b6b97fea35b124f171e9950d90990d3324d7 100644 (file)
@@ -515,6 +515,9 @@ struct x_display_info
      received, and return that in hopes that it's somewhat accurate.  */
   Time last_mouse_movement_time;
 
+  /* Whether or not the last mouse motion was synthetic.  */
+  bool last_mouse_movement_time_send_event;
+
   /* The gray pixmap.  */
   Pixmap gray;