Make sure to not propagate special height reflows too far. Bug 391901, r+sr+a=dbaron

This commit is contained in:
bzbarsky@mit.edu 2007-10-08 19:39:06 -07:00
parent 4aad5f643f
commit 4f5bba9acb
2 changed files with 10 additions and 7 deletions

View File

@ -839,6 +839,9 @@ NS_METHOD nsTableCellFrame::Reflow(nsPresContext* aPresContext,
// but only those than are tables in standards mode. NeedsToObserve
// will determine how far this is propagated to descendants.
kidReflowState.mPercentHeightObserver = this;
// Don't propagate special height reflow state to our kids
kidReflowState.mFlags.mSpecialHeightReflow = PR_FALSE;
if (aReflowState.mFlags.mSpecialHeightReflow ||
(GetFirstInFlow()->GetStateBits() & NS_TABLE_CELL_HAD_SPECIAL_REFLOW)) {
// We need to force the kid to have mVResize set if we've had a

View File

@ -1883,10 +1883,8 @@ NS_METHOD nsTableFrame::Reflow(nsPresContext* aPresContext,
}
nsIFrame* lastChildReflowed = nsnull;
nsHTMLReflowState &mutable_rs =
const_cast<nsHTMLReflowState&>(aReflowState);
PRBool oldSpecialHeightReflow = mutable_rs.mFlags.mSpecialHeightReflow;
mutable_rs.mFlags.mSpecialHeightReflow = PR_FALSE;
NS_ASSERTION(!aReflowState.mFlags.mSpecialHeightReflow,
"Shouldn't be in special height reflow here!");
// do the pass 2 reflow unless this is a special height reflow and we will be
// initiating a special height reflow
@ -1909,6 +1907,9 @@ NS_METHOD nsTableFrame::Reflow(nsPresContext* aPresContext,
if (needToInitiateSpecialReflow && NS_FRAME_IS_COMPLETE(aStatus)) {
// XXXldb Do we need to set the mVResize flag on any reflow states?
nsHTMLReflowState &mutable_rs =
const_cast<nsHTMLReflowState&>(aReflowState);
// distribute extra vertical space to rows
CalcDesiredHeight(aReflowState, aDesiredSize);
mutable_rs.mFlags.mSpecialHeightReflow = PR_TRUE;
@ -1929,9 +1930,9 @@ NS_METHOD nsTableFrame::Reflow(nsPresContext* aPresContext,
}
haveDesiredHeight = PR_TRUE;
reflowedChildren = PR_TRUE;
}
mutable_rs.mFlags.mSpecialHeightReflow = oldSpecialHeightReflow;
mutable_rs.mFlags.mSpecialHeightReflow = PR_FALSE;
}
}
aDesiredSize.width = aReflowState.ComputedWidth() +
@ -6130,7 +6131,6 @@ nsTableFrame::PaintBCBorders(nsIRenderingContext& aRenderingContext,
nsTableRowGroupFrame* inFlowRG = nsnull;
nsTableRowFrame* inFlowRow = nsnull;
// find startRowIndex, endRowIndex, startRowY
nscoord onePixel = nsPresContext::CSSPixelsToAppUnits(1);
PRInt32 rowY = startRowY;
for (PRUint32 rgX = 0; rgX < rowGroups.Length() && !done; rgX++) {
nsTableRowGroupFrame* rgFrame = rowGroups[rgX];