To: vim-dev@vim.org Subject: Patch 6.0.075 Fcc: outbox From: Bram Moolenaar MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit ------------ Patch 6.0.075 Problem: When closing a horizontally split window while 'eadirection' is "hor" another horizontally split window is still resized. (Aron Griffis) Solution: Only resize windows in the same top frame as the window that is split or closed. Files: src/main.c, src/proto/window.pro, src/window.c *** ../vim60.74/src/main.c Thu Nov 1 12:22:41 2001 --- src/main.c Mon Nov 5 09:29:34 2001 *************** *** 1716,1722 **** # endif TIME_MSG("editing files in windows"); if (window_count > 1) ! win_equal(curwin, 'b'); /* adjust heights */ #endif /* FEAT_WINDOWS */ #ifdef FEAT_DIFF --- 1716,1722 ---- # endif TIME_MSG("editing files in windows"); if (window_count > 1) ! win_equal(curwin, FALSE, 'b'); /* adjust heights */ #endif /* FEAT_WINDOWS */ #ifdef FEAT_DIFF *** ../vim60.74/src/proto/window.pro Tue Sep 25 21:49:27 2001 --- src/proto/window.pro Mon Nov 5 09:29:09 2001 *************** *** 5,11 **** int win_count __ARGS((void)); int make_windows __ARGS((int count, int vertical)); void win_move_after __ARGS((win_T *win1, win_T *win2)); ! void win_equal __ARGS((win_T *next_curwin, int dir)); void close_windows __ARGS((buf_T *buf)); void win_close __ARGS((win_T *win, int free_buf)); void close_others __ARGS((int message, int forceit)); --- 5,11 ---- int win_count __ARGS((void)); int make_windows __ARGS((int count, int vertical)); void win_move_after __ARGS((win_T *win1, win_T *win2)); ! void win_equal __ARGS((win_T *next_curwin, int current, int dir)); void close_windows __ARGS((buf_T *buf)); void win_close __ARGS((win_T *win, int free_buf)); void close_others __ARGS((int message, int forceit)); *** ../vim60.74/src/window.c Thu Nov 1 14:51:27 2001 --- src/window.c Mon Nov 5 09:49:44 2001 *************** *** 25,31 **** static void win_exchange __ARGS((long)); static void win_rotate __ARGS((int, int)); static void win_totop __ARGS((int size, int flags)); ! static void win_equal_rec __ARGS((win_T *next_curwin, frame_T *topfr, int dir, int col, int row, int width, int height)); static win_T *winframe_remove __ARGS((win_T *win, int *dirp)); static frame_T *win_altframe __ARGS((win_T *win)); static win_T *frame2win __ARGS((frame_T *frp)); --- 25,31 ---- static void win_exchange __ARGS((long)); static void win_rotate __ARGS((int, int)); static void win_totop __ARGS((int size, int flags)); ! static void win_equal_rec __ARGS((win_T *next_curwin, int current, frame_T *topfr, int dir, int col, int row, int width, int height)); static win_T *winframe_remove __ARGS((win_T *win, int *dirp)); static frame_T *win_altframe __ARGS((win_T *win)); static win_T *frame2win __ARGS((frame_T *frp)); *************** *** 367,373 **** #ifdef FEAT_GUI need_mouse_correct = TRUE; #endif ! win_equal(NULL, 0); break; /* increase current window height */ --- 367,373 ---- #ifdef FEAT_GUI need_mouse_correct = TRUE; #endif ! win_equal(NULL, FALSE, 0); break; /* increase current window height */ *************** *** 1015,1021 **** * make the new window the current window and redraw */ if (do_equal || dir != 0) ! win_equal(wp, #ifdef FEAT_VERTSPLIT (flags & WSP_VERT) ? (dir == 'v' ? 'b' : 'h') : dir == 'h' ? 'b' : --- 1015,1021 ---- * make the new window the current window and redraw */ if (do_equal || dir != 0) ! win_equal(wp, TRUE, #ifdef FEAT_VERTSPLIT (flags & WSP_VERT) ? (dir == 'v' ? 'b' : 'h') : dir == 'h' ? 'b' : *************** *** 1485,1492 **** * rows. */ void ! win_equal(next_curwin, dir) win_T *next_curwin; /* pointer to current window to be or NULL */ int dir; /* 'v' for vertically, 'h' for horizontally, 'b' for both, 0 for using p_ead */ { --- 1485,1493 ---- * rows. */ void ! win_equal(next_curwin, current, dir) win_T *next_curwin; /* pointer to current window to be or NULL */ + int current; /* do only frame with current window */ int dir; /* 'v' for vertically, 'h' for horizontally, 'b' for both, 0 for using p_ead */ { *************** *** 1496,1503 **** #else dir = 'b'; #endif ! win_equal_rec(next_curwin == NULL ? curwin : next_curwin, topframe, dir, ! 0, 0, (int)Columns, topframe->fr_height); } /* --- 1497,1504 ---- #else dir = 'b'; #endif ! win_equal_rec(next_curwin == NULL ? curwin : next_curwin, current, ! topframe, dir, 0, 0, (int)Columns, topframe->fr_height); } /* *************** *** 1507,1514 **** * 'winheight' and 'winwidth' if possible. */ static void ! win_equal_rec(next_curwin, topfr, dir, col, row, width, height) win_T *next_curwin; /* pointer to current window to be or NULL */ frame_T *topfr; /* frame to set size off */ int dir; /* 'v', 'h' or 'b', see win_equal() */ int col; /* horizontal position for frame */ --- 1508,1516 ---- * 'winheight' and 'winwidth' if possible. */ static void ! win_equal_rec(next_curwin, current, topfr, dir, col, row, width, height) win_T *next_curwin; /* pointer to current window to be or NULL */ + int current; /* do only frame with current window */ frame_T *topfr; /* frame to set size off */ int dir; /* 'v', 'h' or 'b', see win_equal() */ int col; /* horizontal position for frame */ *************** *** 1616,1622 **** new_size += next_curwin_size; } } ! win_equal_rec(next_curwin, fr, dir, col, row, new_size + n, height); col += new_size + n; width -= new_size + n; if (n != m) /* contains curwin */ --- 1618,1631 ---- new_size += next_curwin_size; } } ! ! /* Skip frame that is full height when splitting or closing a ! * window, unless equalizing all frames. */ ! if (!current || dir != 'v' || topfr->fr_parent != NULL ! || (new_size != fr->fr_width) ! || frame_has_win(fr, next_curwin)) ! win_equal_rec(next_curwin, current, fr, dir, col, row, ! new_size + n, height); col += new_size + n; width -= new_size + n; if (n != m) /* contains curwin */ *************** *** 1766,1772 **** room -= new_size; new_size += n; } ! win_equal_rec(next_curwin, fr, dir, col, row, width, new_size); row += new_size; height -= new_size; totwincount -= wincount; --- 1775,1787 ---- room -= new_size; new_size += n; } ! /* Skip frame that is full width when splitting or closing a ! * window, unless equalizing all frames. */ ! if (!current || dir != 'h' || topfr->fr_parent != NULL ! || (new_size != fr->fr_height) ! || frame_has_win(fr, next_curwin)) ! win_equal_rec(next_curwin, current, fr, dir, col, row, ! width, new_size); row += new_size; height -= new_size; totwincount -= wincount; *************** *** 1906,1912 **** close_curwin = TRUE; } if (p_ea) ! win_equal(curwin, #ifdef FEAT_VERTSPLIT dir #else --- 1921,1927 ---- close_curwin = TRUE; } if (p_ea) ! win_equal(curwin, TRUE, #ifdef FEAT_VERTSPLIT dir #else *************** *** 3199,3205 **** #if 0 /* Disabled: don't want making the screen smaller make a window larger. */ if (p_ea) ! win_equal(curwin, 'v'); #endif } --- 3214,3220 ---- #if 0 /* Disabled: don't want making the screen smaller make a window larger. */ if (p_ea) ! win_equal(curwin, FALSE, 'v'); #endif } *************** *** 3217,3223 **** #if 0 /* Disabled: don't want making the screen smaller make a window larger. */ if (p_ea) ! win_equal(curwin, 'h'); #endif } #endif --- 3232,3238 ---- #if 0 /* Disabled: don't want making the screen smaller make a window larger. */ if (p_ea) ! win_equal(curwin, FALSE, 'h'); #endif } #endif *** ../vim60.74/src/version.c Mon Nov 5 09:00:25 2001 --- src/version.c Mon Nov 5 09:41:37 2001 *************** *** 608,609 **** --- 608,611 ---- { /* Add new patch number below this line */ + /**/ + 75, /**/ -- Imagine a world without hypothetical situations. /// Bram Moolenaar -- Bram@moolenaar.net -- http://www.moolenaar.net \\\ ((( Creator of Vim -- http://vim.sf.net -- ftp://ftp.vim.org/pub/vim ))) \\\ Help me helping AIDS orphans in Uganda - http://iccf-holland.org ///