mirror of
https://github.com/vim/vim.git
synced 2025-09-25 03:54:15 -04:00
updated for version 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)
This commit is contained in:
@@ -728,6 +728,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
1246,
|
||||||
/**/
|
/**/
|
||||||
1245,
|
1245,
|
||||||
/**/
|
/**/
|
||||||
|
54
src/window.c
54
src/window.c
@@ -66,6 +66,11 @@ static void clear_snapshot_rec __ARGS((frame_T *fr));
|
|||||||
static int check_snapshot_rec __ARGS((frame_T *sn, frame_T *fr));
|
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 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 */
|
#endif /* FEAT_WINDOWS */
|
||||||
|
|
||||||
static win_T *win_alloc __ARGS((win_T *after, int hidden));
|
static win_T *win_alloc __ARGS((win_T *after, int hidden));
|
||||||
@@ -4749,7 +4754,7 @@ shell_new_rows()
|
|||||||
/* First try setting the heights of windows with 'winfixheight'. If
|
/* First try setting the heights of windows with 'winfixheight'. If
|
||||||
* that doesn't result in the right height, forget about that option. */
|
* that doesn't result in the right height, forget about that option. */
|
||||||
frame_new_height(topframe, h, FALSE, TRUE);
|
frame_new_height(topframe, h, FALSE, TRUE);
|
||||||
if (topframe->fr_height != h)
|
if (!frame_check_height(topframe, h))
|
||||||
frame_new_height(topframe, h, FALSE, FALSE);
|
frame_new_height(topframe, h, FALSE, FALSE);
|
||||||
|
|
||||||
(void)win_comp_pos(); /* recompute w_winrow and w_wincol */
|
(void)win_comp_pos(); /* recompute w_winrow and w_wincol */
|
||||||
@@ -4783,7 +4788,7 @@ shell_new_columns()
|
|||||||
/* First try setting the widths of windows with 'winfixwidth'. If that
|
/* First try setting the widths of windows with 'winfixwidth'. If that
|
||||||
* doesn't result in the right width, forget about that option. */
|
* doesn't result in the right width, forget about that option. */
|
||||||
frame_new_width(topframe, (int)Columns, FALSE, TRUE);
|
frame_new_width(topframe, (int)Columns, FALSE, TRUE);
|
||||||
if (topframe->fr_width != Columns)
|
if (!frame_check_width(topframe, Columns))
|
||||||
frame_new_width(topframe, (int)Columns, FALSE, FALSE);
|
frame_new_width(topframe, (int)Columns, FALSE, FALSE);
|
||||||
|
|
||||||
(void)win_comp_pos(); /* recompute w_winrow and w_wincol */
|
(void)win_comp_pos(); /* recompute w_winrow and w_wincol */
|
||||||
@@ -6922,3 +6927,48 @@ get_tab_number(tabpage_T *tp UNUSED)
|
|||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
#endif
|
#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
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user