diff --git a/src/xterm.c b/src/xterm.c index d7ea63bb4f8..409d39b27e1 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 */