]> granicus.if.org Git - vim/commitdiff
updated for version 7.4.280 v7.4.280
authorBram Moolenaar <Bram@vim.org>
Wed, 7 May 2014 18:25:35 +0000 (20:25 +0200)
committerBram Moolenaar <Bram@vim.org>
Wed, 7 May 2014 18:25:35 +0000 (20:25 +0200)
Problem:    When using a session file the relative position of the cursor is
            not restored if there is another tab. (Nobuhiro Takasaki)
Solution:   Update w_wrow before calculating the fraction.

src/version.c
src/window.c

index 80c9fe3fa5958b80ec95a1fe0e28d67acfca22cf..818a8b5c16299daebb4c1737729b7457753b1fbb 100644 (file)
@@ -734,6 +734,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    280,
 /**/
     279,
 /**/
index 02eb903fb6908735d3c967103f5f70bae2050264..485f7ef04c847554f944bdd62dc7e799024faa2d 100644 (file)
@@ -5623,7 +5623,7 @@ set_fraction(wp)
     win_T      *wp;
 {
     wp->w_fraction = ((long)wp->w_wrow * FRACTION_MULT
-                                   + FRACTION_MULT / 2) / (long)wp->w_height;
+                                   + wp->w_height / 2) / (long)wp->w_height;
 }
 
 /*
@@ -5638,6 +5638,7 @@ win_new_height(wp, height)
 {
     linenr_T   lnum;
     int                sline, line_size;
+    int                prev_height = wp->w_height;
 
     /* Don't want a negative height.  Happens when splitting a tiny window.
      * Will equalize heights soon to fix it. */
@@ -5646,8 +5647,13 @@ win_new_height(wp, height)
     if (wp->w_height == height)
        return;     /* nothing to do */
 
-    if (wp->w_wrow != wp->w_prev_fraction_row && wp->w_height > 0)
-       set_fraction(wp);
+    if (wp->w_height > 0)
+    {
+       if (wp == curwin)
+           validate_cursor();          /* w_wrow needs to be valid */
+       if (wp->w_wrow != wp->w_prev_fraction_row)
+           set_fraction(wp);
+    }
 
     wp->w_height = height;
     wp->w_skipcol = 0;
@@ -5667,7 +5673,8 @@ win_new_height(wp, height)
        lnum = wp->w_cursor.lnum;
        if (lnum < 1)           /* can happen when starting up */
            lnum = 1;
-       wp->w_wrow = ((long)wp->w_fraction * (long)height - 1L) / FRACTION_MULT;
+       wp->w_wrow = ((long)wp->w_fraction * (long)height - 1L
+                                        + FRACTION_MULT / 2) / FRACTION_MULT;
        line_size = plines_win_col(wp, lnum, (long)(wp->w_cursor.col)) - 1;
        sline = wp->w_wrow - line_size;
 
@@ -5757,7 +5764,8 @@ win_new_height(wp, height)
            update_topline();
        curs_columns(FALSE);    /* validate w_wrow */
     }
-    wp->w_prev_fraction_row = wp->w_wrow;
+    if (prev_height > 0)
+       wp->w_prev_fraction_row = wp->w_wrow;
 
     win_comp_scroll(wp);
     redraw_win_later(wp, SOME_VALID);