comparison 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
comparison
equal deleted inserted replaced
13399:ad9ed174d094 13400:c415cdd49ea4
1102 1102
1103 /* 1103 /*
1104 * Execute the currently selected popup menu item. 1104 * Execute the currently selected popup menu item.
1105 */ 1105 */
1106 static void 1106 static void
1107 pum_execute_menu(vimmenu_T *menu) 1107 pum_execute_menu(vimmenu_T *menu, int mode)
1108 { 1108 {
1109 vimmenu_T *mp; 1109 vimmenu_T *mp;
1110 int idx = 0; 1110 int idx = 0;
1111 exarg_T ea; 1111 exarg_T ea;
1112 1112
1113 for (mp = menu->children; mp != NULL; mp = mp->next) 1113 for (mp = menu->children; mp != NULL; mp = mp->next)
1114 if (idx++ == pum_selected) 1114 if ((mp->modes & mp->enabled & mode) && idx++ == pum_selected)
1115 { 1115 {
1116 vim_memset(&ea, 0, sizeof(ea)); 1116 vim_memset(&ea, 0, sizeof(ea));
1117 execute_menu(&ea, mp); 1117 execute_menu(&ea, mp);
1118 break; 1118 break;
1119 } 1119 }
1169 for (;;) 1169 for (;;)
1170 { 1170 {
1171 int c; 1171 int c;
1172 1172
1173 pum_redraw(); 1173 pum_redraw();
1174 setcursor(); 1174 setcursor_mayforce(TRUE);
1175 out_flush(); 1175 out_flush();
1176 1176
1177 c = vgetc(); 1177 c = vgetc();
1178 if (c == ESC) 1178 if (c == ESC)
1179 break; 1179 break;
1180 else if (c == CAR || c == NL) 1180 else if (c == CAR || c == NL)
1181 { 1181 {
1182 /* enter: select current item, if any, and close */ 1182 /* enter: select current item, if any, and close */
1183 pum_execute_menu(menu); 1183 pum_execute_menu(menu, mode);
1184 break; 1184 break;
1185 } 1185 }
1186 else if (c == 'k' || c == K_UP || c == K_MOUSEUP) 1186 else if (c == 'k' || c == K_UP || c == K_MOUSEUP)
1187 { 1187 {
1188 /* cursor up: select previous item */ 1188 /* cursor up: select previous item */
1219 /* left mouse click: select clicked item, if any, and close; 1219 /* left mouse click: select clicked item, if any, and close;
1220 * right mouse release: select clicked item, close if any */ 1220 * right mouse release: select clicked item, close if any */
1221 pum_select_mouse_pos(); 1221 pum_select_mouse_pos();
1222 if (pum_selected >= 0) 1222 if (pum_selected >= 0)
1223 { 1223 {
1224 pum_execute_menu(menu); 1224 pum_execute_menu(menu, mode);
1225 break; 1225 break;
1226 } 1226 }
1227 if (c == K_LEFTMOUSE || c == K_LEFTMOUSE_NM) 1227 if (c == K_LEFTMOUSE || c == K_LEFTMOUSE_NM)
1228 break; 1228 break;
1229 } 1229 }