diff options
| author | Po Lu | 2022-08-22 09:50:45 +0800 |
|---|---|---|
| committer | Po Lu | 2022-08-22 09:50:45 +0800 |
| commit | e154ba196a38c1398d506f9c1c8ba58966d9aa3e (patch) | |
| tree | 6e0c8cb2e2f50f000c1ea99cab63e2e6f1c51abf /src | |
| parent | 15d628f1960ba71912cc9c3e8deaded77b953ccb (diff) | |
| download | emacs-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.c | 22 |
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 (); |