* window.c (delete_window): Handle the case where a h/vchild has

a h/vchild.
This commit is contained in:
Jan Djärv 2005-06-06 10:38:40 +00:00
parent eb78dfb8dd
commit 5494d7bcdb
2 changed files with 53 additions and 1 deletions

View file

@ -1,3 +1,8 @@
2005-06-06 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
* window.c (delete_window): Handle the case where a h/vchild has
a h/vchild.
2005-06-05 Eli Zaretskii <eliz@gnu.org>
* w32.c (sys_setsockopt): Change arg 4 to `const void *'. In the

View file

@ -1452,8 +1452,10 @@ delete_window (window)
tem = par->hchild;
if (NILP (tem))
tem = par->vchild;
if (NILP (XWINDOW (tem)->next))
if (NILP (XWINDOW (tem)->next)) {
replace_window (parent, tem);
par = XWINDOW (tem);
}
/* Since we may be deleting combination windows, we must make sure that
not only p but all its children have been marked as deleted. */
@ -1465,6 +1467,51 @@ delete_window (window)
/* Mark this window as deleted. */
p->buffer = p->hchild = p->vchild = Qnil;
if (! NILP (par->parent))
par = XWINDOW (par->parent);
/* Check if we have a v/hchild with a v/hchild. In that case remove
one of them. */
if (! NILP (par->vchild) && ! NILP (XWINDOW (par->vchild)->vchild))
{
p = XWINDOW (par->vchild);
par->vchild = p->vchild;
tem = p->vchild;
}
else if (! NILP (par->hchild) && ! NILP (XWINDOW (par->hchild)->hchild))
{
p = XWINDOW (par->hchild);
par->hchild = p->hchild;
tem = p->hchild;
}
else
p = 0;
if (p)
{
while (! NILP (tem)) {
XWINDOW (tem)->parent = p->parent;
if (NILP (XWINDOW (tem)->next))
break;
tem = XWINDOW (tem)->next;
}
if (! NILP (tem)) {
/* The next of the v/hchild we are removing is now the next of the
last child for the v/hchild:
Before v/hchild -> v/hchild -> next1 -> next2
|
-> next3
After: v/hchild -> next1 -> next2 -> next3
*/
XWINDOW (tem)->next = p->next;
if (! NILP (p->next))
XWINDOW (p->next)->prev = tem;
}
p->next = p->prev = p->vchild = p->hchild = p->buffer = Qnil;
}
/* Adjust glyph matrices. */
adjust_glyphs (f);
UNBLOCK_INPUT;