diff options
author | Richard M. Stallman <rms@gnu.org> | 1993-03-12 06:20:52 +0000 |
---|---|---|
committer | Richard M. Stallman <rms@gnu.org> | 1993-03-12 06:20:52 +0000 |
commit | 7da99777446e018cfe2eac5659034568db52a303 (patch) | |
tree | e23b5f23ac2630062fcdf6523edf615b5aeae658 | |
parent | 323e7e53e35a17765e92443b50b21398062bd05b (diff) | |
download | emacs-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.c | 26 |
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; |