Mercurial > emacs
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))