Fix assertion about float manager state by restoring old float manager state when we place a float and then cancel that placement. (Bug 563584, patch 1) r=roc

This commit is contained in:
L. David Baron 2010-08-05 21:59:18 -07:00
Родитель 2f98d4b94d
Коммит 367e34d52e
1 изменённых файлов: 8 добавлений и 0 удалений

Просмотреть файл

@ -574,6 +574,9 @@ nsBlockReflowState::AddFloat(nsLineLayout* aLineLayout,
(aLineLayout->LineIsEmpty() ||
mBlock->ComputeFloatWidth(*this, floatAvailableSpace, aFloat)
<= aAvailableWidth))) {
nsFloatManager::SavedState floatManagerState;
mFloatManager->PushState(&floatManagerState);
// And then place it
// force it to fit if we're at the top of the block and we can't
// break before this
@ -599,6 +602,11 @@ nsBlockReflowState::AddFloat(nsLineLayout* aLineLayout,
aReflowStatus &= ~NS_FRAME_TRUNCATED;
}
else {
if (placed) {
mFloatManager->PopState(&floatManagerState);
} else {
mFloatManager->AssertStateMatches(&floatManagerState);
}
if (IsAdjacentWithTop()) {
// Pushing the line to the next page won't give us any more space;
// therefore, we break.