comparison src/window.c @ 90192:173dee4e2611

Revision: miles@gnu.org--gnu-2005/emacs--unicode--0--patch-61 Merge from emacs--cvs-trunk--0 Patches applied: * emacs--cvs-trunk--0 (patch 353-357) - Update from CVS
author Miles Bader <miles@gnu.org>
date Thu, 09 Jun 2005 07:13:03 +0000
parents 5b029ff3b08d 872de430453e
children a1b34dec1104
comparison
equal deleted inserted replaced
90191:c766b49f5bbd 90192:173dee4e2611
1450 /* If parent now has only one child, 1450 /* If parent now has only one child,
1451 put the child into the parent's place. */ 1451 put the child into the parent's place. */
1452 tem = par->hchild; 1452 tem = par->hchild;
1453 if (NILP (tem)) 1453 if (NILP (tem))
1454 tem = par->vchild; 1454 tem = par->vchild;
1455 if (NILP (XWINDOW (tem)->next)) 1455 if (NILP (XWINDOW (tem)->next)) {
1456 replace_window (parent, tem); 1456 replace_window (parent, tem);
1457 par = XWINDOW (tem);
1458 }
1457 1459
1458 /* Since we may be deleting combination windows, we must make sure that 1460 /* Since we may be deleting combination windows, we must make sure that
1459 not only p but all its children have been marked as deleted. */ 1461 not only p but all its children have been marked as deleted. */
1460 if (! NILP (p->hchild)) 1462 if (! NILP (p->hchild))
1461 delete_all_subwindows (XWINDOW (p->hchild)); 1463 delete_all_subwindows (XWINDOW (p->hchild));
1462 else if (! NILP (p->vchild)) 1464 else if (! NILP (p->vchild))
1463 delete_all_subwindows (XWINDOW (p->vchild)); 1465 delete_all_subwindows (XWINDOW (p->vchild));
1464 1466
1465 /* Mark this window as deleted. */ 1467 /* Mark this window as deleted. */
1466 p->buffer = p->hchild = p->vchild = Qnil; 1468 p->buffer = p->hchild = p->vchild = Qnil;
1469
1470 if (! NILP (par->parent))
1471 par = XWINDOW (par->parent);
1472
1473 /* Check if we have a v/hchild with a v/hchild. In that case remove
1474 one of them. */
1475
1476 if (! NILP (par->vchild) && ! NILP (XWINDOW (par->vchild)->vchild))
1477 {
1478 p = XWINDOW (par->vchild);
1479 par->vchild = p->vchild;
1480 tem = p->vchild;
1481 }
1482 else if (! NILP (par->hchild) && ! NILP (XWINDOW (par->hchild)->hchild))
1483 {
1484 p = XWINDOW (par->hchild);
1485 par->hchild = p->hchild;
1486 tem = p->hchild;
1487 }
1488 else
1489 p = 0;
1490
1491 if (p)
1492 {
1493 while (! NILP (tem)) {
1494 XWINDOW (tem)->parent = p->parent;
1495 if (NILP (XWINDOW (tem)->next))
1496 break;
1497 tem = XWINDOW (tem)->next;
1498 }
1499 if (! NILP (tem)) {
1500 /* The next of the v/hchild we are removing is now the next of the
1501 last child for the v/hchild:
1502 Before v/hchild -> v/hchild -> next1 -> next2
1503 |
1504 -> next3
1505 After: v/hchild -> next1 -> next2 -> next3
1506 */
1507 XWINDOW (tem)->next = p->next;
1508 if (! NILP (p->next))
1509 XWINDOW (p->next)->prev = tem;
1510 }
1511 p->next = p->prev = p->vchild = p->hchild = p->buffer = Qnil;
1512 }
1513
1467 1514
1468 /* Adjust glyph matrices. */ 1515 /* Adjust glyph matrices. */
1469 adjust_glyphs (f); 1516 adjust_glyphs (f);
1470 UNBLOCK_INPUT; 1517 UNBLOCK_INPUT;
1471 } 1518 }