@@ -2511,7 +2511,7 @@ close_windows(
25112511 for (wp = firstwin ; wp != NULL && !ONE_WINDOW ; )
25122512 {
25132513 if (wp -> w_buffer == buf && (!keep_curwin || wp != curwin )
2514- && !(wp -> w_closing || wp -> w_buffer -> b_locked > 0 ))
2514+ && !(win_locked ( wp ) || wp -> w_buffer -> b_locked > 0 ))
25152515 {
25162516 if (win_close (wp , FALSE) == FAIL )
25172517 // If closing the window fails give up, to avoid looping
@@ -2532,7 +2532,7 @@ close_windows(
25322532 if (tp != curtab )
25332533 FOR_ALL_WINDOWS_IN_TAB (tp , wp )
25342534 if (wp -> w_buffer == buf
2535- && !(wp -> w_closing || wp -> w_buffer -> b_locked > 0 ))
2535+ && !(win_locked ( wp ) || wp -> w_buffer -> b_locked > 0 ))
25362536 {
25372537 win_close_othertab (wp , FALSE, tp );
25382538
@@ -2654,10 +2654,10 @@ win_close_buffer(win_T *win, int action, int abort_if_last)
26542654 bufref_T bufref ;
26552655
26562656 set_bufref (& bufref , curbuf );
2657- win -> w_closing = TRUE;
2657+ win -> w_locked = TRUE;
26582658 close_buffer (win , win -> w_buffer , action , abort_if_last , TRUE);
26592659 if (win_valid_any_tab (win ))
2660- win -> w_closing = FALSE;
2660+ win -> w_locked = FALSE;
26612661 // Make sure curbuf is valid. It can become invalid if 'bufhidden' is
26622662 // "wipe".
26632663 if (!bufref_valid (& bufref ))
@@ -2705,7 +2705,7 @@ win_close(win_T *win, int free_buf)
27052705 if (window_layout_locked (CMD_close ))
27062706 return FAIL ;
27072707
2708- if (win -> w_closing || (win -> w_buffer != NULL
2708+ if (win_locked ( win ) || (win -> w_buffer != NULL
27092709 && win -> w_buffer -> b_locked > 0 ))
27102710 return FAIL ; // window is already being closed
27112711 if (win_unlisted (win ))
@@ -2754,19 +2754,19 @@ win_close(win_T *win, int free_buf)
27542754 other_buffer = TRUE;
27552755 if (!win_valid (win ))
27562756 return FAIL ;
2757- win -> w_closing = TRUE;
2757+ win -> w_locked = TRUE;
27582758 apply_autocmds (EVENT_BUFLEAVE , NULL , NULL , FALSE, curbuf );
27592759 if (!win_valid (win ))
27602760 return FAIL ;
2761- win -> w_closing = FALSE;
2761+ win -> w_locked = FALSE;
27622762 if (last_window ())
27632763 return FAIL ;
27642764 }
2765- win -> w_closing = TRUE;
2765+ win -> w_locked = TRUE;
27662766 apply_autocmds (EVENT_WINLEAVE , NULL , NULL , FALSE, curbuf );
27672767 if (!win_valid (win ))
27682768 return FAIL ;
2769- win -> w_closing = FALSE;
2769+ win -> w_locked = FALSE;
27702770 if (last_window ())
27712771 return FAIL ;
27722772#ifdef FEAT_EVAL
@@ -3346,7 +3346,7 @@ win_close_othertab(win_T *win, int free_buf, tabpage_T *tp)
33463346
33473347 // Get here with win->w_buffer == NULL when win_close() detects the tab
33483348 // page changed.
3349- if (win -> w_closing || (win -> w_buffer != NULL
3349+ if (win_locked ( win ) || (win -> w_buffer != NULL
33503350 && win -> w_buffer -> b_locked > 0 ))
33513351 return ; // window is already being closed
33523352
@@ -8000,3 +8000,12 @@ get_last_winid(void)
80008000{
80018001 return last_win_id ;
80028002}
8003+
8004+ /*
8005+ * Don't let autocommands close the given window
8006+ */
8007+ int
8008+ win_locked (win_T * wp )
8009+ {
8010+ return wp -> w_locked ;
8011+ }
0 commit comments