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.
This commit is contained in:
Po Lu 2022-09-28 20:33:24 +08:00
parent 9f32e6dea1
commit 5f7d9a1a9f

View file

@ -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 */