aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/nvim/window.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/src/nvim/window.c b/src/nvim/window.c
index f9a0839702..8355f5397f 100644
--- a/src/nvim/window.c
+++ b/src/nvim/window.c
@@ -2313,10 +2313,10 @@ int win_close(win_T *win, bool free_buf)
if (!win->w_floating) {
wp = frame2win(win_altframe(win, NULL));
} else {
- if (win_valid(prevwin)) {
+ if (win_valid(prevwin) && prevwin != win) {
wp = prevwin;
} else {
- wp = curtab->tp_firstwin;
+ wp = firstwin;
}
}
@@ -2462,7 +2462,7 @@ int win_close(win_T *win, bool free_buf)
}
if (!was_floating) {
- if (p_ea && (*p_ead == 'b' || *p_ead == dir)) {
+ if (!curwin->w_floating && p_ea && (*p_ead == 'b' || *p_ead == dir)) {
// If the frame of the closed window contains the new current window,
// only resize that frame. Otherwise resize all windows.
win_equal(curwin, curwin->w_frame->fr_parent == win_frame, dir);
@@ -2595,10 +2595,10 @@ win_free_mem (
wp = winframe_remove(win, dirp, tp);
xfree(frp);
} else {
- if (win_valid(prevwin)) {
+ if (win_valid(prevwin) && prevwin != win) {
wp = prevwin;
} else {
- wp = curtab->tp_firstwin;
+ wp = firstwin;
}
}
win_free(win, tp);
@@ -4656,8 +4656,12 @@ void win_size_restore(garray_T *gap)
{
int i = 0;
FOR_ALL_WINDOWS_IN_TAB(wp, curtab) {
- frame_setwidth(wp->w_frame, ((int *)gap->ga_data)[i++]);
- win_setheight_win(((int *)gap->ga_data)[i++], wp);
+ int width = ((int *)gap->ga_data)[i++];
+ int height = ((int *)gap->ga_data)[i++];
+ if (!wp->w_floating) {
+ frame_setwidth(wp->w_frame, width);
+ win_setheight_win(height, wp);
+ }
}
}
/* recompute the window positions */