changeset 71403:0759482f5cba

* msb.el (msb): Move `sit-for' hack here to handle both "mouse-down and drag" and "mouse-up and select" situations. (mouse-select-buffer): Move `sit-for' hack to `msb'.
author Chong Yidong <cyd@stupidchicken.com>
date Tue, 20 Jun 2006 18:08:40 +0000
parents 1402c47ef55a
children fc1ff7769630
files lisp/ChangeLog lisp/msb.el
diffstat 2 files changed, 16 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Tue Jun 20 07:40:36 2006 +0000
+++ b/lisp/ChangeLog	Tue Jun 20 18:08:40 2006 +0000
@@ -1,3 +1,9 @@
+2006-06-20  Chong Yidong  <cyd@stupidchicken.com>
+
+	* msb.el (msb): Move `sit-for' hack here to handle both
+	"mouse-down and drag" and "mouse-up and select" situations.
+	(mouse-select-buffer): Move `sit-for' hack to `msb'.
+
 2006-06-20  Kenichi Handa  <handa@m17n.org>
 
 	* international/characters.el (word-combining-categories): Add
--- a/lisp/msb.el	Tue Jun 20 07:40:36 2006 +0000
+++ b/lisp/msb.el	Tue Jun 20 18:08:40 2006 +0000
@@ -473,18 +473,21 @@
 See the function `mouse-select-buffer' and the variable
 `msb-menu-cond' for more information about how the menus are split."
   (interactive "e")
-  ;; If EVENT is a down-event, read and discard the
-  ;; corresponding up-event.
-  (and (eventp event)
-       (memq 'down (event-modifiers event))
-       (read-event))
   (let ((old-window (selected-window))
-	(window (posn-window (event-start event))))
+	(window (posn-window (event-start event)))
+	early-release)
     (unless (framep window) (select-window window))
+    ;; This `sit-for' magically makes the menu stay up if the mouse
+    ;; button is released within 0.1 second.
+    (setq early-release (not (sit-for 0.1 t)))
     (let ((buffer (mouse-select-buffer event)))
       (if buffer
 	  (switch-to-buffer buffer)
-	(select-window old-window))))
+	(select-window old-window)))
+    ;; If the above `sit-for' was interrupted by a mouse-up, avoid
+    ;; generating a drag event.
+    (if (and early-release (memq 'down (event-modifiers last-input-event)))
+	(discard-input)))
   nil)
 
 ;;;
@@ -995,9 +998,6 @@
 	;; adjust position
 	(setq posX (- posX (funcall msb-horizontal-shift-function))
 	      position (list (list posX posY) posWind))))
-    ;; This `sit-for' magically makes the menu stay up if the mouse
-    ;; button is released within 0.1 second.
-    (sit-for 0 100)
     ;; Popup the menu
     (setq choice (x-popup-menu position msb--last-buffer-menu))
     (cond