Mercurial > vim
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 } |