emacs-diffs
[Top][All Lists]
Advanced

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

master 5f7d9a1a9f: Apply root window coordinate optimizations to crossin


From: Po Lu
Subject: master 5f7d9a1a9f: Apply root window coordinate optimizations to crossing events as well
Date: Wed, 28 Sep 2022 08:36:27 -0400 (EDT)

branch: master
commit 5f7d9a1a9f9ac2b57cd84da6a1bd460b3111562b
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>

    Apply root window coordinate optimizations to crossing events as well
    
    * src/xterm.c (xi_compute_root_window_offset_enter): New
    function.
    (handle_one_xevent): Apply root window crossing optimizations to
    XI_Enter and XI_Leave events too.  Not strictly necessary but
    since we apply them to motion events it would be consistent to
    apply them to crossing events as well as recommended by the
    ICCCM.
---
 src/xterm.c | 30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/src/xterm.c b/src/xterm.c
index d7ea63bb4f..409d39b27e 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -13584,6 +13584,13 @@ xi_compute_root_window_offset (struct frame *f, 
XIDeviceEvent *xev)
                                xev->event_x, xev->event_y);
 }
 
+static void
+xi_compute_root_window_offset_enter (struct frame *f, XIEnterEvent *enter)
+{
+  x_compute_root_window_offset (f, enter->root_x, enter->root_y,
+                               enter->event_x, enter->event_y);
+}
+
 #ifdef HAVE_XINPUT2_4
 
 static void
@@ -19495,6 +19502,16 @@ handle_one_xevent (struct x_display_info *dpyinfo,
 
       f = any;
 
+      if (f && event->xcrossing.window == FRAME_X_WINDOW (f))
+       x_compute_root_window_offset (f, event->xcrossing.x_root,
+                                     event->xcrossing.y_root,
+                                     event->xcrossing.x,
+                                     event->xcrossing.y);
+
+      /* The code below relies on the first several fields of
+        XCrossingEvent being laid out the same way as
+        XMotionEvent.  */
+
       if (f && x_mouse_click_focus_ignore_position)
        {
          ignore_next_mouse_click_timeout = (event->xmotion.time
@@ -19639,6 +19656,13 @@ handle_one_xevent (struct x_display_info *dpyinfo,
                    || EQ (track_mouse, Qdropping))
                   && gui_mouse_grabbed (dpyinfo)))
            do_help = -1;
+
+         if (event->xcrossing.window == FRAME_X_WINDOW (f))
+           x_compute_root_window_offset (f, event->xcrossing.x_root,
+                                         event->xcrossing.y_root,
+                                         event->xcrossing.x,
+                                         event->xcrossing.y);
+
         }
 #ifdef USE_GTK
       /* See comment in EnterNotify above */
@@ -21049,6 +21073,9 @@ handle_one_xevent (struct x_display_info *dpyinfo,
 
              f = any;
 
+             if (f && enter->event == FRAME_X_WINDOW (f))
+               xi_compute_root_window_offset_enter (f, enter);
+
              if (f && x_mouse_click_focus_ignore_position)
                {
                  ignore_next_mouse_click_timeout = (enter->time
@@ -21245,6 +21272,9 @@ handle_one_xevent (struct x_display_info *dpyinfo,
                            || EQ (track_mouse, Qdropping))
                           && gui_mouse_grabbed (dpyinfo)))
                    do_help = -1;
+
+                 if (f && leave->event == FRAME_X_WINDOW (f))
+                   xi_compute_root_window_offset_enter (f, leave);
                }
 #ifdef USE_GTK
              /* See comment in EnterNotify above */



reply via email to

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