Mercurial > vim
diff src/popupmnu.c @ 13400:c415cdd49ea4 v8.0.1574
patch 8.0.1574: show cursor in wrong place when using popup menu
commit https://github.com/vim/vim/commit/987723e084660290270b3c3d943eb13bd828d5da
Author: Bram Moolenaar <Bram@vim.org>
Date: Tue Mar 6 11:43:04 2018 +0100
patch 8.0.1574: show cursor in wrong place when using popup menu
Problem: Show cursor in wrong place when using popup menu. (Wei Zhang)
Solution: Force updating the cursor position. Fix skipping over unused
entries.
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Tue, 06 Mar 2018 11:45:05 +0100 |
parents | d5347779fb20 |
children | b85526d90aba |
line wrap: on
line diff
--- a/src/popupmnu.c +++ b/src/popupmnu.c @@ -1104,14 +1104,14 @@ pum_select_mouse_pos(void) * Execute the currently selected popup menu item. */ static void -pum_execute_menu(vimmenu_T *menu) +pum_execute_menu(vimmenu_T *menu, int mode) { vimmenu_T *mp; int idx = 0; exarg_T ea; for (mp = menu->children; mp != NULL; mp = mp->next) - if (idx++ == pum_selected) + if ((mp->modes & mp->enabled & mode) && idx++ == pum_selected) { vim_memset(&ea, 0, sizeof(ea)); execute_menu(&ea, mp); @@ -1171,7 +1171,7 @@ pum_show_popupmenu(vimmenu_T *menu) int c; pum_redraw(); - setcursor(); + setcursor_mayforce(TRUE); out_flush(); c = vgetc(); @@ -1180,7 +1180,7 @@ pum_show_popupmenu(vimmenu_T *menu) else if (c == CAR || c == NL) { /* enter: select current item, if any, and close */ - pum_execute_menu(menu); + pum_execute_menu(menu, mode); break; } else if (c == 'k' || c == K_UP || c == K_MOUSEUP) @@ -1221,7 +1221,7 @@ pum_show_popupmenu(vimmenu_T *menu) pum_select_mouse_pos(); if (pum_selected >= 0) { - pum_execute_menu(menu); + pum_execute_menu(menu, mode); break; } if (c == K_LEFTMOUSE || c == K_LEFTMOUSE_NM)