To: vim_dev@googlegroups.com Subject: Patch 7.3.1246 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 7.3.1246 Problem: When setting 'winfixheight' and resizing the window causes the window layout to be wrong. Solution: Add frame_check_height() and frame_check_width() (Yukihiro Nakadaira) Files: src/window.c *** ../vim-7.3.1245/src/window.c 2013-06-16 17:32:33.000000000 +0200 --- src/window.c 2013-06-26 13:51:25.000000000 +0200 *************** *** 66,71 **** --- 66,76 ---- static int check_snapshot_rec __ARGS((frame_T *sn, frame_T *fr)); static win_T *restore_snapshot_rec __ARGS((frame_T *sn, frame_T *fr)); + static int frame_check_height __ARGS((frame_T *topfrp, int height)); + #ifdef FEAT_VERTSPLIT + static int frame_check_width __ARGS((frame_T *topfrp, int width)); + #endif + #endif /* FEAT_WINDOWS */ static win_T *win_alloc __ARGS((win_T *after, int hidden)); *************** *** 4749,4755 **** /* First try setting the heights of windows with 'winfixheight'. If * that doesn't result in the right height, forget about that option. */ frame_new_height(topframe, h, FALSE, TRUE); ! if (topframe->fr_height != h) frame_new_height(topframe, h, FALSE, FALSE); (void)win_comp_pos(); /* recompute w_winrow and w_wincol */ --- 4754,4760 ---- /* First try setting the heights of windows with 'winfixheight'. If * that doesn't result in the right height, forget about that option. */ frame_new_height(topframe, h, FALSE, TRUE); ! if (!frame_check_height(topframe, h)) frame_new_height(topframe, h, FALSE, FALSE); (void)win_comp_pos(); /* recompute w_winrow and w_wincol */ *************** *** 4783,4789 **** /* First try setting the widths of windows with 'winfixwidth'. If that * doesn't result in the right width, forget about that option. */ frame_new_width(topframe, (int)Columns, FALSE, TRUE); ! if (topframe->fr_width != Columns) frame_new_width(topframe, (int)Columns, FALSE, FALSE); (void)win_comp_pos(); /* recompute w_winrow and w_wincol */ --- 4788,4794 ---- /* First try setting the widths of windows with 'winfixwidth'. If that * doesn't result in the right width, forget about that option. */ frame_new_width(topframe, (int)Columns, FALSE, TRUE); ! if (!frame_check_width(topframe, Columns)) frame_new_width(topframe, (int)Columns, FALSE, FALSE); (void)win_comp_pos(); /* recompute w_winrow and w_wincol */ *************** *** 6922,6924 **** --- 6927,6974 ---- return i; } #endif + + /* + * Return TRUE if "topfrp" and its children are at the right height. + */ + static int + frame_check_height(topfrp, height) + frame_T *topfrp; + int height; + { + frame_T *frp; + + if (topfrp->fr_height != height) + return FALSE; + + if (topfrp->fr_layout == FR_ROW) + for (frp = topfrp->fr_child; frp != NULL; frp = frp->fr_next) + if (frp->fr_height != height) + return FALSE; + + return TRUE; + } + + #ifdef FEAT_VERTSPLIT + /* + * Return TRUE if "topfrp" and its children are at the right width. + */ + static int + frame_check_width(topfrp, width) + frame_T *topfrp; + int width; + { + frame_T *frp; + + if (topfrp->fr_width != width) + return FALSE; + + if (topfrp->fr_layout == FR_COL) + for (frp = topfrp->fr_child; frp != NULL; frp = frp->fr_next) + if (frp->fr_width != width) + return FALSE; + + return TRUE; + } + #endif + *** ../vim-7.3.1245/src/version.c 2013-06-26 13:16:13.000000000 +0200 --- src/version.c 2013-06-26 13:47:56.000000000 +0200 *************** *** 730,731 **** --- 730,733 ---- { /* Add new patch number below this line */ + /**/ + 1246, /**/ -- Back up my hard drive? I can't find the reverse switch! /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///