aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPo Lu2022-08-22 09:50:45 +0800
committerPo Lu2022-08-22 09:50:45 +0800
commite154ba196a38c1398d506f9c1c8ba58966d9aa3e (patch)
tree6e0c8cb2e2f50f000c1ea99cab63e2e6f1c51abf /src
parent15d628f1960ba71912cc9c3e8deaded77b953ccb (diff)
downloademacs-e154ba196a38c1398d506f9c1c8ba58966d9aa3e.tar.gz
emacs-e154ba196a38c1398d506f9c1c8ba58966d9aa3e.zip
Fix child frame focus for MPX environments
* src/xterm.c (handle_one_xevent): Set child frame click-to focus on the pointer device's attachment.
Diffstat (limited to 'src')
-rw-r--r--src/xterm.c22
1 files changed, 20 insertions, 2 deletions
diff --git a/src/xterm.c b/src/xterm.c
index 200ef1d11fc..103573d1fdc 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -20270,7 +20270,7 @@ handle_one_xevent (struct x_display_info *dpyinfo,
20270 { 20270 {
20271 block_input (); 20271 block_input ();
20272 XSetInputFocus (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f), 20272 XSetInputFocus (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f),
20273 RevertToParent, CurrentTime); 20273 RevertToParent, event->xbutton.time);
20274 if (FRAME_PARENT_FRAME (f)) 20274 if (FRAME_PARENT_FRAME (f))
20275 XRaiseWindow (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f)); 20275 XRaiseWindow (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f));
20276 unblock_input (); 20276 unblock_input ();
@@ -21852,8 +21852,26 @@ handle_one_xevent (struct x_display_info *dpyinfo,
21852 if (FRAME_PARENT_FRAME (f) || (hf && frame_ancestor_p (f, hf))) 21852 if (FRAME_PARENT_FRAME (f) || (hf && frame_ancestor_p (f, hf)))
21853 { 21853 {
21854 block_input (); 21854 block_input ();
21855#if defined HAVE_GTK3 || (!defined USE_GTK && !defined USE_X_TOOLKIT)
21856 if (device)
21857 {
21858 /* This can generate XI_BadDevice if the
21859 device's attachment was destroyed
21860 server-side. */
21861 x_ignore_errors_for_next_request (dpyinfo);
21862 XISetFocus (dpyinfo->display, device->attachment,
21863 /* Note that the input extension
21864 only supports RevertToParent-type
21865 behavior. */
21866 FRAME_OUTER_WINDOW (f), xev->time);
21867 x_stop_ignoring_errors (dpyinfo);
21868 }
21869#else
21870 /* Non-no toolkit builds without GTK 3 use core
21871 events to handle focus. */
21855 XSetInputFocus (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f), 21872 XSetInputFocus (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f),
21856 RevertToParent, CurrentTime); 21873 RevertToParent, xev->time);
21874#endif
21857 if (FRAME_PARENT_FRAME (f)) 21875 if (FRAME_PARENT_FRAME (f))
21858 XRaiseWindow (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f)); 21876 XRaiseWindow (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f));
21859 unblock_input (); 21877 unblock_input ();