Fix the last change.
authorueno <ueno>
Wed, 13 Sep 2000 15:04:09 +0000 (15:04 +0000)
committerueno <ueno>
Wed, 13 Sep 2000 15:04:09 +0000 (15:04 +0000)
semi-def.el

index 83935f2..f39d217 100644 (file)
 ;;; @ menu
 ;;;
 
-(defmacro mime-popup-menu-bogus-filter-constructor (menu &optional modal)
+(defmacro mime-popup-menu-bogus-filter-constructor (menu)
   ;; #### Kludge for FSF Emacs-style menu.
   (let ((bogus-menu (make-symbol "bogus-menu")))
     `(let (,bogus-menu selection function)
        (easy-menu-define ,bogus-menu nil nil ,menu)
        (setq selection (x-popup-menu t ,bogus-menu))
-       ,(if modal
-           `selection
-         `(when selection
-            (setq function (lookup-key ,bogus-menu (apply #'vector selection)))
-            (if function
-                (funcall function)))))))
+       (when selection
+        (setq function (lookup-key ,bogus-menu (apply #'vector selection)))
+        ;; If a callback entry has no name, easy-menu wraps its value.
+        ;; See `easy-menu-make-symbol'.
+        (if (eq t (compare-strings "menu-function-" 0 nil (symbol-name function) 0 14))
+            (car (last (symbol-function function)))
+          function)))))
 
 ;;; While XEmacs can have both X and tty frames at the same time with
 ;;; gnuclient, we shouldn't emulate in text-mode here.
 (static-if (featurep 'xemacs)
     (defalias 'mime-popup-menu-popup 'popup-menu)
   (defun mime-popup-menu-popup (menu &optional event)
-    (mime-popup-menu-bogus-filter-constructor menu)))
+    (let ((function (mime-popup-menu-bogus-filter-constructor menu)))
+      (when (symbolp function)
+       (funcall function)))))
 
 (static-if (featurep 'xemacs)
     (defun mime-popup-menu-select (menu &optional event)
       (let ((selection (get-popup-menu-response menu event)))
        (event-object selection)))
   (defun mime-popup-menu-select (menu &optional event)
-    (mime-popup-menu-bogus-filter-constructor menu 'modal)))
+    (mime-popup-menu-bogus-filter-constructor menu)))
 
 
 ;;; @ Other Utility