changeset 32312:b95ac47063ce

(popup-menu): Move the command call outside the loop so that popup-menu returns whatever the command returns.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Sun, 08 Oct 2000 20:16:56 +0000
parents 035ce2227d76
children 31f35570f268
files lisp/mouse.el
diffstat 1 files changed, 26 insertions(+), 28 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/mouse.el	Sun Oct 08 19:25:30 2000 +0000
+++ b/lisp/mouse.el	Sun Oct 08 20:16:56 2000 +0000
@@ -58,7 +58,7 @@
 		       (filter (when (symbolp map)
 				 (plist-get (get map 'menu-pro) :filter))))
 		  (if filter (funcall filter (symbol-function map)) map)))))
-	 event)
+	 event cmd)
     (unless position
       (let ((mp (mouse-pixel-position)))
 	(setq position (list (list (cadr mp) (cddr mp)) (car mp)))))
@@ -71,33 +71,31 @@
       ;; Strangely x-popup-menu returns a list.
       ;; mouse-major-mode-menu was using a weird:
       ;; (key-binding (apply 'vector (append '(menu-bar) menu-prefix events)))
-      (let ((cmd
-	     (if (and (not (keymapp map)) (listp map))
-		 ;; We were given a list of keymaps.  Search them all
-		 ;; in sequence until a first binding is found.
-		 (let ((mouse-click (apply 'vector event))
-		       binding)
-		   (while (and map (null binding))
-		     (setq binding (lookup-key (car map) mouse-click))
-		     (if (numberp binding) ; `too long'
-		       (setq binding nil))
-		     (setq map (cdr map)))
-		   binding)
-	       ;; We were given a single keymap.
-	       (lookup-key map (apply 'vector event)))))
-	(setq map nil)
-	;; Clear out echoing, which perhaps shows a prefix arg.
-	(message "")
-	(when cmd
-	  (if (keymapp cmd)
-	      ;; Try again but with the submap.
-	      (setq map cmd)
-	    (setq prefix-arg prefix)
-	    ;; `setup-specified-language-environment', for instance,
-	    ;; expects this to be set from a menu keymap.
-	    (setq last-command-event (car (last event)))
-	    ;; mouse-major-mode-menu was using `command-execute' instead.
-	    (call-interactively cmd)))))))
+      (setq cmd
+	    (if (and (not (keymapp map)) (listp map))
+		;; We were given a list of keymaps.  Search them all
+		;; in sequence until a first binding is found.
+		(let ((mouse-click (apply 'vector event))
+		      binding)
+		  (while (and map (null binding))
+		    (setq binding (lookup-key (car map) mouse-click))
+		    (if (numberp binding) ; `too long'
+			(setq binding nil))
+		    (setq map (cdr map)))
+		  binding)
+	      ;; We were given a single keymap.
+	      (lookup-key map (apply 'vector event))))
+      ;; Clear out echoing, which perhaps shows a prefix arg.
+      (message "")
+      ;; Maybe try again but with the submap.
+      (setq map (if (keymapp cmd) cmd)))
+    (when (functionp cmd)
+      (setq prefix-arg prefix)
+      ;; `setup-specified-language-environment', for instance,
+      ;; expects this to be set from a menu keymap.
+      (setq last-command-event (car (last event)))
+      ;; mouse-major-mode-menu was using `command-execute' instead.
+      (call-interactively cmd)))))))
 
 (defvar mouse-major-mode-menu-prefix)	; dynamically bound