comparison src/popupwin.c @ 16794:ddfa924df50d v8.1.1399

patch 8.1.1399: popup windows not adjusted when switching tabs commit https://github.com/vim/vim/commit/ec58384afa0dc1678afd7b8d19b4645ac2f73f42 Author: Bram Moolenaar <Bram@vim.org> Date: Sun May 26 14:11:23 2019 +0200 patch 8.1.1399: popup windows not adjusted when switching tabs Problem: Popup windows not adjusted when switching tabs. Solution: Save and restore first_tab_popupwin. Fix closing a tabpage.
author Bram Moolenaar <Bram@vim.org>
date Sun, 26 May 2019 14:15:06 +0200
parents eda4d65f232c
children 5f98d80d116a
comparison
equal deleted inserted replaced
16793:c7a0f8ed435d 16794:ddfa924df50d
175 int nr = (int)tv_get_number(argvars); 175 int nr = (int)tv_get_number(argvars);
176 176
177 popup_close(nr); 177 popup_close(nr);
178 } 178 }
179 179
180 void 180 /*
181 popup_close(int nr) 181 * Close a popup window by Window-id.
182 */
183 void
184 popup_close(int id)
182 { 185 {
183 win_T *wp; 186 win_T *wp;
187 tabpage_T *tp;
184 win_T *prev = NULL; 188 win_T *prev = NULL;
185 189
190 // go through global popups
186 for (wp = first_popupwin; wp != NULL; prev = wp, wp = wp->w_next) 191 for (wp = first_popupwin; wp != NULL; prev = wp, wp = wp->w_next)
187 if (wp->w_id == nr) 192 if (wp->w_id == id)
188 { 193 {
189 if (prev == NULL) 194 if (prev == NULL)
190 first_popupwin = wp->w_next; 195 first_popupwin = wp->w_next;
191 else 196 else
192 prev->w_next = wp->w_next; 197 prev->w_next = wp->w_next;
193 break; 198 win_free_popup(wp);
199 redraw_all_later(NOT_VALID);
200 return;
194 } 201 }
195 202
196 if (wp == NULL) 203 // go through tab-local popups
197 { 204 FOR_ALL_TABPAGES(tp)
198 prev = NULL; 205 popup_close_tabpage(tp, id);
199 for (wp = first_tab_popupwin; wp != NULL; prev = wp, wp = wp->w_next) 206 }
200 if (wp->w_id == nr) 207
201 { 208 /*
202 if (prev == NULL) 209 * Close a popup window with Window-id "id" in tabpage "tp".
203 first_tab_popupwin = wp->w_next; 210 */
204 else 211 void
205 prev->w_next = wp->w_next; 212 popup_close_tabpage(tabpage_T *tp, int id)
206 break; 213 {
207 } 214 win_T *wp;
208 } 215 win_T **root;
209 if (wp != NULL) 216 win_T *prev = NULL;
210 { 217
211 win_free_popup(wp); 218 if (tp == curtab)
212 redraw_all_later(NOT_VALID); 219 root = &first_tab_popupwin;
213 } 220 else
221 root = &tp->tp_first_popupwin;
222 for (wp = *root; wp != NULL; prev = wp, wp = wp->w_next)
223 if (wp->w_id == id)
224 {
225 if (prev == NULL)
226 *root = wp->w_next;
227 else
228 prev->w_next = wp->w_next;
229 win_free_popup(wp);
230 redraw_all_later(NOT_VALID);
231 return;
232 }
214 } 233 }
215 234
216 void 235 void
217 close_all_popups(void) 236 close_all_popups(void)
218 { 237 {