changeset 32928:859adc7ac97d

(size_window): Compute size difference from sum of old child window sizes instead of from parent's size.
author Gerd Moellmann <gerd@gnu.org>
date Thu, 26 Oct 2000 20:37:37 +0000
parents c0b62376988c
children 99c5d7acc0f8
files src/window.c
diffstat 1 files changed, 14 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/src/window.c	Thu Oct 26 19:44:12 2000 +0000
+++ b/src/window.c	Thu Oct 26 20:37:37 2000 +0000
@@ -2277,12 +2277,12 @@
      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 @@
     {
       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 @@
       /* 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 @@
 	  {
 	    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);
 	  }
     }