]> git.eshelyaron.com Git - emacs.git/commitdiff
(size_window): Compute size difference from sum of old
authorGerd Moellmann <gerd@gnu.org>
Thu, 26 Oct 2000 20:38:06 +0000 (20:38 +0000)
committerGerd Moellmann <gerd@gnu.org>
Thu, 26 Oct 2000 20:38:06 +0000 (20:38 +0000)
child window sizes instead of from parent's size.

src/ChangeLog
src/window.c

index 5f5c7c569cf5996c4a0b60e6bd37fd4d76b0f39f..f6ba041731cee908dbeef709f66443501051d7d7 100644 (file)
@@ -1,5 +1,8 @@
 2000-10-26  Gerd Moellmann  <gerd@gnu.org>
 
+       * window.c (size_window): Compute size difference from sum of old
+       child window sizes instead of from parent's size.
+
        * xdisp.c (pos_visible_p): Change current buffer if necessary.
        Handle obscured lines at the top of the window.
 
index 2db5ddd2215aa960231da7db52d9f06d4c681fd2..38724e22bbc151e1666a8293acdfd389e2b139be 100644 (file)
@@ -2277,12 +2277,12 @@ size_window (window, size, width_p, nodelete_p)
      Preserve it as long as that is at all possible.  */
   if (width_p)
     {
-      old_size = XFASTINT (w->width);
+      old_size = XINT (w->width);
       min_size = window_min_width;
     }
   else
     {
-      old_size = XFASTINT (w->height);
+      old_size = XINT (w->height);
       min_size = window_min_height;
     }
   
@@ -2341,18 +2341,22 @@ size_window (window, size, width_p, nodelete_p)
     {
       int fixed_size, each, extra, n;
       int resize_fixed_p, nfixed;
-      int last_pos, first_pos, nchildren;
+      int last_pos, first_pos, nchildren, total;
 
       /* Determine the fixed-size portion of the this window, and the
         number of child windows.  */
-      fixed_size = nchildren = nfixed = 0;
+      fixed_size = nchildren = nfixed = total = 0;
       for (child = *forward; !NILP (child); child = c->next, ++nchildren)
        {
+         int child_size;
+         
          c = XWINDOW (child);
+         child_size = width_p ? XINT (c->width) : XINT (c->height);
+         total += child_size;
+         
          if (window_fixed_size_p (c, width_p, 0))
            {
-             fixed_size += (width_p
-                            ? XFASTINT (c->width) : XFASTINT (c->height));
+             fixed_size += child_size;
              ++nfixed;
            }
        }
@@ -2365,11 +2369,11 @@ size_window (window, size, width_p, nodelete_p)
       /* Compute how many lines/columns to add to each child.  The
         value of extra takes care of rounding errors.  */
       n = resize_fixed_p ? nchildren : nchildren - nfixed;
-      each = (size - old_size) / n;
-      extra = (size - old_size) - n * each;
+      each = (size - total) / n;
+      extra = (size - total) - n * each;
 
       /* Compute new children heights and edge positions.  */
-      first_pos = width_p ? XFASTINT (w->left) : XFASTINT (w->top);
+      first_pos = width_p ? XINT (w->left) : XINT (w->top);
       last_pos = first_pos;
       for (child = *forward; !NILP (child); child = c->next)
        {
@@ -2412,7 +2416,7 @@ size_window (window, size, width_p, nodelete_p)
          {
            int child_size;
            c = XWINDOW (child);
-           child_size = width_p ? XFASTINT (c->width) : XFASTINT (c->height);
+           child_size = width_p ? XINT (c->width) : XINT (c->height);
            size_window (child, child_size, width_p, 0);
          }
     }