changeset 42816:3ba600a336b4

(enlarge_window): When exceeding size of parent, directly delete all the siblings instead of trying to resize it.
author Richard M. Stallman <rms@gnu.org>
date Fri, 18 Jan 2002 03:50:15 +0000
parents b672e0acf1a3
children 83e878c5c0cb
files src/window.c
diffstat 1 files changed, 30 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/src/window.c	Thu Jan 17 22:22:38 2002 +0000
+++ b/src/window.c	Fri Jan 18 03:50:15 2002 +0000
@@ -3543,11 +3543,24 @@
       register int delta1;
       register int opht = (*sizefun) (parent);
 
-      /* If trying to grow this window to or beyond size of the parent,
-	 make delta1 so big that, on shrinking back down,
-	 all the siblings end up with less than one line and are deleted.  */
       if (opht <= XINT (*sizep) + delta)
-	delta1 = opht * opht * 2;
+	{
+	  /* If trying to grow this window to or beyond size of the parent,
+	     just delete all the sibling windows.  */
+	  Lisp_Object tem, next;
+
+	  tem = XWINDOW (parent)->vchild;
+	  if (NILP (tem))
+	    tem = XWINDOW (parent)->hchild;
+
+	  while (! NILP (tem))
+	    {
+	      next = XWINDOW (tem)->next;
+	      if (!EQ (tem, window))
+		delete_window (tem);
+	      tem = next;
+	    }
+	}
       else
 	{
 	  /* Otherwise, make delta1 just right so that if we add
@@ -3590,19 +3603,20 @@
 	      ++n;
 
 	  delta1 = n * delta;
+
+	  /* Add delta1 lines or columns to this window, and to the parent,
+	     keeping things consistent while not affecting siblings.  */
+	  XSETINT (CURSIZE (parent), opht + delta1);
+	  (*setsizefun) (window, XINT (*sizep) + delta1, 0);
+
+	  /* Squeeze out delta1 lines or columns from our parent,
+	     shriking this window and siblings proportionately.
+	     This brings parent back to correct size.
+	     Delta1 was calculated so this makes this window the desired size,
+	     taking it all out of the siblings.  */
+	  (*setsizefun) (parent, opht, 0);
+
 	}
-
-      /* Add delta1 lines or columns to this window, and to the parent,
-	 keeping things consistent while not affecting siblings.  */
-      XSETINT (CURSIZE (parent), opht + delta1);
-      (*setsizefun) (window, XINT (*sizep) + delta1, 0);
-
-      /* Squeeze out delta1 lines or columns from our parent,
-	 shriking this window and siblings proportionately.
-	 This brings parent back to correct size.
-	 Delta1 was calculated so this makes this window the desired size,
-	 taking it all out of the siblings.  */
-      (*setsizefun) (parent, opht, 0);
     }
 
   XSETFASTINT (p->last_modified, 0);