From bbf0e7d97893b9abfe6575a408f03e48543cb513 Mon Sep 17 00:00:00 2001 From: Masatake YAMATO Date: Fri, 20 Jul 2012 07:32:30 -0400 Subject: [PATCH] * 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. --- lisp/ChangeLog | 7 +++++++ lisp/mouse.el | 17 +++++++++++++---- lisp/term/x-win.el | 16 +++++++++++----- 3 files changed, 31 insertions(+), 9 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index d7cb05c0664..969f36c8457 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,10 @@ +2012-07-20 Masatake YAMATO + + * 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 * progmodes/ruby-mode.el (ruby-parse-partial): No error when end diff --git a/lisp/mouse.el b/lisp/mouse.el index a0d10a64945..84b76e184a8 100644 --- a/lisp/mouse.el +++ b/lisp/mouse.el @@ -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 diff --git a/lisp/term/x-win.el b/lisp/term/x-win.el index 498cc01fe22..fb7389b856c 100644 --- a/lisp/term/x-win.el +++ b/lisp/term/x-win.el @@ -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. -- 2.39.2