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