(adjust_window_trailing_edge): Don't break out of the loop
authorRichard M. Stallman <rms@gnu.org>
Tue, 13 Jun 2006 23:07:56 +0000 (23:07 +0000)
committerRichard M. Stallman <rms@gnu.org>
Tue, 13 Jun 2006 23:07:56 +0000 (23:07 +0000)
because there's no next window, if there are parallel windows.
Do break out when WINDOW is nil.

src/window.c

index e0ea9be..6993f29 100644 (file)
@@ -4279,15 +4279,17 @@ adjust_window_trailing_edge (window, delta, horiz_flag)
     {
       Lisp_Object first_parallel = Qnil;
 
-      p = XWINDOW (window);
-      parent = p->parent;
-
-      if (NILP (XWINDOW (window)->next))
+      if (NILP (window))
        {
+         /* This can happen if WINDOW on the previous iteration was
+            at top level of the tree and we did not exit.  */
          Fset_window_configuration (old_config);
-         error ("No other window following this one");
+         error ("Specified window edge is fixed");
        }
 
+      p = XWINDOW (window);
+      parent = p->parent;
+
       /* See if this level has windows in parallel in the specified
         direction.  If so, set FIRST_PARALLEL to the first one.  */
       if (horiz_flag)
@@ -4301,6 +4303,14 @@ adjust_window_trailing_edge (window, delta, horiz_flag)
            first_parallel = XWINDOW (parent)->hchild;
        }
 
+      /* If this level's succession is in the desired dimension,
+        and this window is the last one, its trailing edge is fixed.  */
+      if (NILP (XWINDOW (window)->next) && NILP (first_parallel))
+       {
+         Fset_window_configuration (old_config);
+         error ("Specified window edge is fixed");
+       }
+
       /* Don't make this window too small.  */
       if (XINT (CURSIZE (window)) + delta
          < (horiz_flag ? window_min_width : window_min_height))
@@ -4324,7 +4334,7 @@ adjust_window_trailing_edge (window, delta, horiz_flag)
         we will fail and report an error, above.)  */
       if (NILP (first_parallel))
        {
-         if (!NILP (XWINDOW (window)->next))
+         if (!NILP (p->next))
            {
               /* This may happen for the minibuffer.  In that case
                  the window_deletion_count check below does not work.  */