mirror of
https://github.com/vim/vim.git
synced 2025-09-24 03:44:06 -04:00
updated for version 7.3.306
Problem: When closing a window there is a chance that deleting a scrollbar triggers a GUI resize, which uses the window while it is not in a valid state. Solution: Set the buffer pointer to NULL to be able to detect the invalid situation. Fix a few places that used the buffer pointer incorrectly.
This commit is contained in:
18
src/buffer.c
18
src/buffer.c
@@ -416,6 +416,8 @@ close_buffer(win, buf, action)
|
||||
#endif
|
||||
|
||||
buf_freeall(buf, (del_buf ? BFA_DEL : 0) + (wipe_buf ? BFA_WIPE : 0));
|
||||
if (win_valid(win) && win->w_buffer == buf)
|
||||
win->w_buffer = NULL; /* make sure we don't use the buffer now */
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* Autocommands may have deleted the buffer. */
|
||||
@@ -560,6 +562,10 @@ buf_freeall(buf, flags)
|
||||
#ifdef FEAT_DIFF
|
||||
diff_buf_delete(buf); /* Can't use 'diff' for unloaded buffer. */
|
||||
#endif
|
||||
#ifdef FEAT_SYN_HL
|
||||
if (curwin->w_buffer == buf)
|
||||
reset_synblock(curwin); /* remove any ownsyntax */
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_FOLDING
|
||||
/* No folds in an empty buffer. */
|
||||
@@ -1346,6 +1352,10 @@ set_curbuf(buf, action)
|
||||
# endif
|
||||
#endif
|
||||
{
|
||||
#ifdef FEAT_SYN_HL
|
||||
if (prevbuf == curwin->w_buffer)
|
||||
reset_synblock(curwin);
|
||||
#endif
|
||||
#ifdef FEAT_WINDOWS
|
||||
if (unload)
|
||||
close_windows(prevbuf, FALSE);
|
||||
@@ -1395,10 +1405,6 @@ enter_buffer(buf)
|
||||
foldUpdateAll(curwin); /* update folds (later). */
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_SYN_HL
|
||||
reset_synblock(curwin);
|
||||
curwin->w_s = &(buf->b_s);
|
||||
#endif
|
||||
/* Get the buffer in the current window. */
|
||||
curwin->w_buffer = buf;
|
||||
curbuf = buf;
|
||||
@@ -1409,6 +1415,10 @@ enter_buffer(buf)
|
||||
diff_buf_add(curbuf);
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_SYN_HL
|
||||
curwin->w_s = &(buf->b_s);
|
||||
#endif
|
||||
|
||||
/* Cursor on first line by default. */
|
||||
curwin->w_cursor.lnum = 1;
|
||||
curwin->w_cursor.col = 0;
|
||||
|
Reference in New Issue
Block a user