summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard M. Stallman <rms@gnu.org>1993-03-12 06:20:52 +0000
committerRichard M. Stallman <rms@gnu.org>1993-03-12 06:20:52 +0000
commit7da99777446e018cfe2eac5659034568db52a303 (patch)
treee23b5f23ac2630062fcdf6523edf615b5aeae658
parent323e7e53e35a17765e92443b50b21398062bd05b (diff)
downloademacs-7da99777446e018cfe2eac5659034568db52a303.tar.gz
emacs-7da99777446e018cfe2eac5659034568db52a303.tar.bz2
emacs-7da99777446e018cfe2eac5659034568db52a303.zip
(Fx_popup_menu): Allow a frame instead of a window, in arg.
-rw-r--r--src/xmenu.c26
1 files changed, 19 insertions, 7 deletions
diff --git a/src/xmenu.c b/src/xmenu.c
index bf0d4c497da..aa8ec70a520 100644
--- a/src/xmenu.c
+++ b/src/xmenu.c
@@ -89,7 +89,7 @@ DEFUN ("x-popup-menu",Fx_popup_menu, Sx_popup_menu, 1, 2, 0,
POSITION is a position specification. This is either a mouse button event\n\
or a list ((XOFFSET YOFFSET) WINDOW)\n\
where XOFFSET and YOFFSET are positions in characters from the top left\n\
-corner of WINDOW's frame. A mouse-event list will serve for this.\n\
+corner of WINDOW's frame. (WINDOW may be a frame object instead of a window.)\n\
This controls the position of the center of the first line\n\
in the first pane of the menu, not the top left of the menu as a whole.\n\
\n\
@@ -138,16 +138,28 @@ be the return value for that line (i.e. if it is selected).")
x = Fcar (tem);
y = Fcdr (tem);
}
- CHECK_LIVE_WINDOW (window, 0);
CHECK_NUMBER (x, 0);
CHECK_NUMBER (y, 0);
- f = XFRAME (WINDOW_FRAME (XWINDOW (window)));
+ if (XTYPE (window) == Lisp_Frame)
+ {
+ f = XFRAME (window);
+
+ XMenu_xpos = 0;
+ XMenu_ypos = 0;
+ }
+ else if (XTYPE (window) == Lisp_Window)
+ {
+ CHECK_LIVE_WINDOW (window, 0);
+ f = XFRAME (WINDOW_FRAME (XWINDOW (window)));
+
+ XMenu_xpos = FONT_WIDTH (f->display.x->font) * XWINDOW (window)->left;
+ XMenu_ypos = FONT_HEIGHT (f->display.x->font) * XWINDOW (window)->top;
+ }
+
+ XMenu_xpos += FONT_WIDTH (f->display.x->font) * XINT (x);
+ XMenu_ypos += FONT_HEIGHT (f->display.x->font) * XINT (y);
- XMenu_xpos
- = FONT_WIDTH (f->display.x->font) * (XINT (x) + XWINDOW (window)->left);
- XMenu_ypos
- = FONT_HEIGHT (f->display.x->font) * (XINT (y) + XWINDOW (window)->top);
XMenu_xpos += f->display.x->left_pos;
XMenu_ypos += f->display.x->top_pos;