summaryrefslogtreecommitdiff
path: root/lisp/help.el
diff options
context:
space:
mode:
authorAlan Mackenzie <acm@muc.de>2017-11-18 14:52:39 +0000
committerAlan Mackenzie <acm@muc.de>2017-11-18 14:52:39 +0000
commite9dd580cc8b3134eb82d758efb070a3ab8dd3e9a (patch)
treecb626131eee284316025393543072a69557681e4 /lisp/help.el
parent90075e8e1e6d6d7b6b49cb20ecdbb5d3de53d48b (diff)
downloademacs-e9dd580cc8b3134eb82d758efb070a3ab8dd3e9a.tar.gz
Filter obtrusive events in help-read-key-sequence.
This fixes most of bug #29272. * lisp/help.el (help-read-key-sequence): After a mouse event, pause for 0.01s, discarding any events (such as <help-echo>) received in this time, before polling for the double-click (etc.) events which may follow. This fixes the infinite loop which occurred whwn <help-echo> events triggered a sit-for whilst handling menu events.
Diffstat (limited to 'lisp/help.el')
-rw-r--r--lisp/help.el16
1 files changed, 11 insertions, 5 deletions
diff --git a/lisp/help.el b/lisp/help.el
index fbb9fc8cbe6..212e3679dad 100644
--- a/lisp/help.el
+++ b/lisp/help.el
@@ -728,11 +728,17 @@ with `mouse-movement' events."
Describe the following key, mouse click, or menu item: "))
((and (pred vectorp) (let `(,key0 . ,_) (aref key 0))
(guard (symbolp key0)) (let keyname (symbol-name key0)))
- (if no-mouse-movement
- (string-match "mouse-movement" keyname)
- (and (string-match "\\(mouse\\|down\\|click\\|drag\\)"
- keyname)
- (not (sit-for (/ double-click-time 1000.0) t)))))))
+ (or
+ (and no-mouse-movement
+ (string-match "mouse-movement" keyname))
+ (and (string-match "\\(mouse\\|down\\|click\\|drag\\)"
+ keyname)
+ (progn
+ ;; Discard events (e.g. <help-echo>) which might
+ ;; spuriously trigger the `sit-for'.
+ (sleep-for 0.01)
+ (while (read-event nil nil 0.01))
+ (not (sit-for (/ double-click-time 1000.0) t))))))))
(list
key
;; If KEY is a down-event, read and include the