[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master 8c8403af36: Fix passive input focus when the pointer moves over i
From: |
Po Lu |
Subject: |
master 8c8403af36: Fix passive input focus when the pointer moves over inferiors |
Date: |
Thu, 13 Jan 2022 06:45:06 -0500 (EST) |
branch: master
commit 8c8403af3621e0a0a83cb14a14409f11f562ea06
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>
Fix passive input focus when the pointer moves over inferiors
* src/xterm.c (handle_one_xevent): Don't detect focus on entry
and exit events if we're not on the top window.
---
src/xterm.c | 36 ++++++++++++++++++++++++++++--------
1 file changed, 28 insertions(+), 8 deletions(-)
diff --git a/src/xterm.c b/src/xterm.c
index 34097ebfd9..a74c31c3f6 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -9459,7 +9459,9 @@ handle_one_xevent (struct x_display_info *dpyinfo,
case EnterNotify:
x_display_set_last_user_time (dpyinfo, event->xcrossing.time);
- x_detect_focus_change (dpyinfo, any, event, &inev.ie);
+
+ if (x_top_window_to_frame (dpyinfo, event->xcrossing.window))
+ x_detect_focus_change (dpyinfo, any, event, &inev.ie);
#ifdef HAVE_XWIDGETS
{
@@ -9541,7 +9543,9 @@ handle_one_xevent (struct x_display_info *dpyinfo,
}
#endif
x_display_set_last_user_time (dpyinfo, event->xcrossing.time);
- x_detect_focus_change (dpyinfo, any, event, &inev.ie);
+
+ if (x_top_window_to_frame (dpyinfo, event->xcrossing.window))
+ x_detect_focus_change (dpyinfo, any, event, &inev.ie);
f = x_top_window_to_frame (dpyinfo, event->xcrossing.window);
#if defined HAVE_X_TOOLKIT && defined HAVE_XINPUT2
@@ -10152,13 +10156,23 @@ handle_one_xevent (struct x_display_info *dpyinfo,
x_detect_focus_change (dpyinfo, any, event, &inev.ie);
goto XI_OTHER;
case XI_Enter:
- any = x_any_window_to_frame (dpyinfo, enter->event);
+
+ any = x_top_window_to_frame (dpyinfo, enter->event);
ev.x = lrint (enter->event_x);
ev.y = lrint (enter->event_y);
- ev.window = leave->event;
-
+ ev.window = enter->event;
x_display_set_last_user_time (dpyinfo, xi_event->time);
- x_detect_focus_change (dpyinfo, any, event, &inev.ie);
+
+ /* There is no need to handle entry/exit events for
+ passive focus from non-top windows at all, since they
+ are an inferiors of the frame's top window, which will
+ get virtual events. */
+ if (any)
+ x_detect_focus_change (dpyinfo, any, event, &inev.ie);
+
+ if (!any)
+ any = x_any_window_to_frame (dpyinfo, enter->event);
+
{
#ifdef HAVE_XWIDGETS
struct xwidget_view *xwidget_view = xwidget_view_from_window
(enter->event);
@@ -10222,11 +10236,12 @@ handle_one_xevent (struct x_display_info *dpyinfo,
x_note_mouse_movement (dpyinfo->last_mouse_glyph_frame, &ev);
#endif
goto XI_OTHER;
+
case XI_Leave:
ev.x = lrint (leave->event_x);
ev.y = lrint (leave->event_y);
ev.window = leave->event;
- any = x_any_window_to_frame (dpyinfo, leave->event);
+ any = x_top_window_to_frame (dpyinfo, leave->event);
#ifdef HAVE_XWIDGETS
{
@@ -10244,7 +10259,12 @@ handle_one_xevent (struct x_display_info *dpyinfo,
#endif
x_display_set_last_user_time (dpyinfo, xi_event->time);
- x_detect_focus_change (dpyinfo, any, event, &inev.ie);
+
+ if (any)
+ x_detect_focus_change (dpyinfo, any, event, &inev.ie);
+
+ if (!any)
+ any = x_any_window_to_frame (dpyinfo, leave->event);
#ifndef USE_X_TOOLKIT
f = x_top_window_to_frame (dpyinfo, leave->event);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master 8c8403af36: Fix passive input focus when the pointer moves over inferiors,
Po Lu <=