changeset 70081:7130f5a10a22

(adjust_window_trailing_edge): Correctly distinguish series vs parallel cases, even when window has no parent.
author Richard M. Stallman <rms@gnu.org>
date Tue, 18 Apr 2006 20:56:31 +0000
parents e7bda2fbb250
children bf366f314d5b
files src/window.c
diffstat 1 files changed, 20 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/src/window.c	Tue Apr 18 19:37:41 2006 +0000
+++ b/src/window.c	Tue Apr 18 20:56:31 2006 +0000
@@ -4275,18 +4275,30 @@
 
   while (1)
     {
+      Lisp_Object first_parallel = Qnil;
+
       p = XWINDOW (window);
       parent = p->parent;
 
-      /* Make sure there is a following window.  */
-      if (NILP (parent)
-	  && (horiz_flag ? 1
-	      : NILP (XWINDOW (window)->next)))
+      if (NILP (XWINDOW (window)->next))
 	{
 	  Fset_window_configuration (old_config);
 	  error ("No other window following this one");
 	}
 
+      /* See if this level has windows in parallel in the specified
+	 direction.  If so, set FIRST_PARALLEL to the first one.  */
+      if (horiz_flag)
+	{
+	  if (! NILP (parent) && !NILP (XWINDOW (parent)->vchild))
+	    first_parallel = XWINDOW (parent)->vchild;
+	}
+      else
+	{
+	  if (! NILP (parent) && !NILP (XWINDOW (parent)->hchild))
+	    first_parallel = XWINDOW (parent)->hchild;
+	}
+
       /* Don't make this window too small.  */
       if (XINT (CURSIZE (window)) + delta
 	  < (horiz_flag ? window_min_width : window_min_height))
@@ -4304,12 +4316,11 @@
 	       XINT (CURSIZE (window)) + delta);
 
       /* If this window has following siblings in the desired dimension,
-	 make them smaller.
+	 make them smaller, and exit the loop.
+
 	 (If we reach the top of the tree and can never do this,
 	 we will fail and report an error, above.)  */
-      if (horiz_flag
-	  ? !NILP (XWINDOW (parent)->hchild)
-	  : !NILP (XWINDOW (parent)->vchild))
+      if (NILP (first_parallel))
 	{
 	  if (!NILP (XWINDOW (window)->next))
 	    {
@@ -4331,9 +4342,7 @@
       else
 	/* Here we have a chain of parallel siblings, in the other dimension.
 	   Change the size of the other siblings.  */
-	for (child = (horiz_flag
-		      ? XWINDOW (parent)->vchild
-		      : XWINDOW (parent)->hchild);
+	for (child = first_parallel;
 	     ! NILP (child);
 	     child = XWINDOW (child)->next)
 	  if (! EQ (child, window))