* window.c (delete_window): Handle the case where a h/vchild has
a h/vchild.
This commit is contained in:
parent
eb78dfb8dd
commit
5494d7bcdb
2 changed files with 53 additions and 1 deletions
|
@ -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
|
||||
|
|
49
src/window.c
49
src/window.c
|
@ -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;
|
||||
|
|
Loading…
Add table
Reference in a new issue