[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] emacs-26 e9dd580: Filter obtrusive events in help-read-key
From: |
Alan Mackenzie |
Subject: |
[Emacs-diffs] emacs-26 e9dd580: Filter obtrusive events in help-read-key-sequence. |
Date: |
Sat, 18 Nov 2017 09:57:12 -0500 (EST) |
branch: emacs-26
commit e9dd580cc8b3134eb82d758efb070a3ab8dd3e9a
Author: Alan Mackenzie <address@hidden>
Commit: Alan Mackenzie <address@hidden>
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.
---
lisp/help.el | 16 +++++++++++-----
1 file changed, 11 insertions(+), 5 deletions(-)
diff --git a/lisp/help.el b/lisp/help.el
index fbb9fc8..212e367 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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] emacs-26 e9dd580: Filter obtrusive events in help-read-key-sequence.,
Alan Mackenzie <=