Improve our handling of reframes around {ib} splits when pseudos or XUL are involved.

Bug 322678, bug 325024, bug 325218.  r=mats, sr=roc
This commit is contained in:
bzbarsky%mit.edu 2006-02-09 04:16:06 +00:00
parent 0345a6719d
commit f3a6acf9ec

View File

@ -546,7 +546,11 @@ GetIBContainingBlockFor(nsIFrame* aFrame)
return aFrame; return aFrame;
} }
if (!IsFrameSpecial(parentFrame)) // Note that we ignore non-special frames which have a pseudo on their
// style context -- they're not the frames we're looking for! In
// particular, they may be hiding a real parent that _is_ special.
if (!IsFrameSpecial(parentFrame) &&
!parentFrame->GetStyleContext()->GetPseudoType())
break; break;
aFrame = parentFrame; aFrame = parentFrame;
@ -9881,17 +9885,10 @@ DeletingFrameSubtree(nsPresContext* aPresContext,
nsAutoVoidArray destroyQueue; nsAutoVoidArray destroyQueue;
// If it's a "special" block-in-inline frame, then we need to // If it's a "special" block-in-inline frame, then we can't really deal.
// remember to delete our special siblings, too. Since every one of // That really shouldn't be happening.
// the next-in-flows has the same special sibling, just do this NS_ASSERTION(!IsFrameSpecial(aFrame),
// once, rather than in the loop below. "DeletingFrameSubtree on a special frame. Prepare to crash.");
if (IsFrameSpecial(aFrame)) {
nsIFrame* specialSibling;
GetSpecialSibling(aFrameManager, aFrame, &specialSibling);
if (specialSibling) {
DeletingFrameSubtree(aPresContext, aFrameManager, specialSibling);
}
}
do { do {
DoDeletingFrameSubtree(aPresContext, aFrameManager, destroyQueue, DoDeletingFrameSubtree(aPresContext, aFrameManager, destroyQueue,