From 045e82deef5c2eed3039e24f879a8169e4170a5f Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Fri, 8 Jul 2005 22:25:33 +0000 Subject: updated for version 7.0105 --- src/gui_gtk.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) (limited to 'src/gui_gtk.c') diff --git a/src/gui_gtk.c b/src/gui_gtk.c index cd7d6bbc5..5bde7913c 100644 --- a/src/gui_gtk.c +++ b/src/gui_gtk.c @@ -2411,6 +2411,10 @@ gui_mch_show_popupmenu(vimmenu_T *menu) 3U, (guint32)GDK_CURRENT_TIME); } +/* Ugly global variable to pass "mouse_pos" flag from gui_make_popup() to + * popup_menu_position_func(). */ +static int popup_mouse_pos; + /* * Menu position callback; used by gui_make_popup() to place the menu * at the current text cursor position. @@ -2427,10 +2431,18 @@ popup_menu_position_func(GtkMenu *menu, # endif gpointer user_data) { - if (curwin != NULL && gui.drawarea != NULL && gui.drawarea->window != NULL) + gdk_window_get_origin(gui.drawarea->window, x, y); + + if (popup_mouse_pos) { - gdk_window_get_origin(gui.drawarea->window, x, y); + int mx, my; + gui_mch_getmouse(&mx, &my); + *x += mx; + *y += my; + } + else if (curwin != NULL && gui.drawarea != NULL && gui.drawarea->window != NULL) + { /* Find the cursor position in the current window */ *x += FILL_X(W_WINCOL(curwin) + curwin->w_wcol + 1) + 1; *y += FILL_Y(W_WINROW(curwin) + curwin->w_wrow + 1) + 1; @@ -2438,10 +2450,12 @@ popup_menu_position_func(GtkMenu *menu, } void -gui_make_popup(char_u *path_name) +gui_make_popup(char_u *path_name, int mouse_pos) { vimmenu_T *menu; + popup_mouse_pos = mouse_pos; + menu = gui_find_menu(path_name); if (menu != NULL && menu->submenu_id != NULL) -- cgit v1.2.1