emacs-diffs
[Top][All Lists]
Advanced

[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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]