+2012-07-20 Masatake YAMATO <yamato@redhat.com>
+
+ * term/x-win.el (x-menu-bar-open): Use `frame-parameter'
+ to check whether menu-bar is shown or not. If not shown,
+ show the menu-bar as a popup menu instead of using tmm.
+ * mouse.el (popup-menu): Accept `point' as `position' argument.
+
2012-07-20 Dmitry Gutov <dgutov@yandex.ru>
* progmodes/ruby-mode.el (ruby-parse-partial): No error when end
MENU can be a keymap, an easymenu-style menu or a list of keymaps as for
`x-popup-menu'.
POSITION can be a click event or ((XOFFSET YOFFSET) WINDOW) and defaults to
- the current mouse position.
+ the current mouse position. If POSITION is a symbol, `point' the current point
+position is used.
PREFIX is the prefix argument (if any) to pass to the command."
(let* ((map (cond
((keymapp menu) menu)
(plist-get (get map 'menu-prop) :filter))))
(if filter (funcall filter (symbol-function map)) map)))))
event cmd)
- (unless position
- (let ((mp (mouse-pixel-position)))
- (setq position (list (list (cadr mp) (cddr mp)) (car mp)))))
+ (setq position
+ (cond
+ ((eq position 'point)
+ (let* ((pp (posn-at-point pos window))
+ (xy (posn-x-y pp)))
+ (list (list (car xy) (cdr xy)) (posn-window pp))))
+ ((not position)
+ (let ((mp (mouse-pixel-position)))
+ (list (list (cadr mp) (cddr mp)) (car mp))))
+ (t
+ position)))
;; The looping behavior was taken from lmenu's popup-menu-popup
(while (and map (setq event
;; map could be a prefix key, in which case
(declare-function accelerate-menu "xmenu.c" (&optional frame) t)
(defun x-menu-bar-open (&optional frame)
- "Open the menu bar if `menu-bar-mode' is on, otherwise call `tmm-menubar'."
+ "Open the menu bar if it is shown.
+`popup-menu' is used if it is off "
(interactive "i")
- (if (and menu-bar-mode
- (fboundp 'accelerate-menu))
- (accelerate-menu frame)
- (tmm-menubar)))
+ (cond
+ ((and (not (zerop (or (frame-parameter nil 'menu-bar-lines) 0)))
+ (fboundp 'accelerate-menu))
+ (accelerate-menu frame))
+ (t
+ (popup-menu (mouse-menu-bar-map)
+ (if (listp last-nonmenu-event)
+ nil
+ 'point)))))
\f
;;; Window system initialization.