* lisp/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.
* lisp/mouse.el (popup-menu): Accept `point' as `position' argument.
This commit is contained in:
Masatake YAMATO 2012-07-20 07:32:30 -04:00 committed by Stefan Monnier
parent c28662a8dc
commit bbf0e7d978
3 changed files with 31 additions and 9 deletions

View file

@ -1,3 +1,10 @@
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

View file

@ -102,7 +102,8 @@ point at the click position."
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)
@ -112,9 +113,17 @@ PREFIX is the prefix argument (if any) to pass to the command."
(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

View file

@ -1305,12 +1305,18 @@ Request data types in the order specified by `x-select-request-type'."
(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)))))
;;; Window system initialization.