summaryrefslogtreecommitdiff
path: root/src/xterm.c
diff options
context:
space:
mode:
authorDaniel Colascione <dancol@dancol.org>2020-03-03 18:27:51 -0800
committerDaniel Colascione <dancol@dancol.org>2020-03-03 18:29:41 -0800
commit1aa8780d7b3bf0b4dd227946f0c6095b2c9e545e (patch)
treed55447c970fe51e3f263ee742198654644df74ef /src/xterm.c
parent21ebfa1dd8129420c832031d055c708075aec02c (diff)
downloademacs-1aa8780d7b3bf0b4dd227946f0c6095b2c9e545e.tar.gz
Ignore spurious focus events
* src/xterm.c (x_detect_focus_change): Ignore FocusIn and FocusOut events from grabs
Diffstat (limited to 'src/xterm.c')
-rw-r--r--src/xterm.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/xterm.c b/src/xterm.c
index 21d99f0c7bb..5d229e4f524 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -4790,6 +4790,16 @@ x_detect_focus_change (struct x_display_info *dpyinfo, struct frame *frame,
case FocusIn:
case FocusOut:
+ /* Ignore transient focus events from hotkeys, window manager
+ gadgets, and other odd sources. Some buggy window managers
+ (e.g., Muffin 4.2.4) send FocusIn events of this type without
+ corresponding FocusOut events even when some other window
+ really has focus, and these kinds of focus event don't
+ correspond to real user input changes. GTK+ uses the same
+ filtering. */
+ if (event->xfocus.mode == NotifyGrab ||
+ event->xfocus.mode == NotifyUngrab)
+ return;
x_focus_changed (event->type,
(event->xfocus.detail == NotifyPointer ?
FOCUS_IMPLICIT : FOCUS_EXPLICIT),