Bug 1412110 - Make sure we build a wrap list for the caret frame, since it will have multiple display items. r=miko

--HG--
extra : rebase_source : b59ff089835023c96daa1e1bf1c7f5bde6c75f15
This commit is contained in:
Matt Woodrow 2017-11-08 15:32:27 +13:00
Родитель 0cd1c74fe2
Коммит fca4960b0f
2 изменённых файлов: 10 добавлений и 3 удалений

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

@ -3644,7 +3644,9 @@ nsIFrame::BuildDisplayListForChild(nsDisplayListBuilder* aBuilder,
nsDisplayListBuilder::AutoContainerASRTracker contASRTracker(aBuilder); nsDisplayListBuilder::AutoContainerASRTracker contASRTracker(aBuilder);
child->BuildDisplayListForStackingContext(aBuilder, &list, &canSkipWrapList); child->BuildDisplayListForStackingContext(aBuilder, &list, &canSkipWrapList);
wrapListASR = contASRTracker.GetContainerASR(); wrapListASR = contASRTracker.GetContainerASR();
aBuilder->DisplayCaret(child, &list); if (aBuilder->DisplayCaret(child, &list)) {
canSkipWrapList = false;
}
} else { } else {
Maybe<nsRect> clipPropClip = Maybe<nsRect> clipPropClip =
child->GetClipPropClipRect(disp, effects, child->GetSize()); child->GetClipPropClipRect(disp, effects, child->GetSize());
@ -3710,7 +3712,9 @@ nsIFrame::BuildDisplayListForChild(nsDisplayListBuilder* aBuilder,
aBuilder->AdjustWindowDraggingRegion(child); aBuilder->AdjustWindowDraggingRegion(child);
nsDisplayListBuilder::AutoContainerASRTracker contASRTracker(aBuilder); nsDisplayListBuilder::AutoContainerASRTracker contASRTracker(aBuilder);
child->BuildDisplayList(aBuilder, pseudoStack); child->BuildDisplayList(aBuilder, pseudoStack);
aBuilder->DisplayCaret(child, pseudoStack.Content()); if (aBuilder->DisplayCaret(child, pseudoStack.Content())) {
canSkipWrapList = false;
}
wrapListASR = contASRTracker.GetContainerASR(); wrapListASR = contASRTracker.GetContainerASR();
list.AppendToTop(pseudoStack.BorderBackground()); list.AppendToTop(pseudoStack.BorderBackground());

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

@ -720,11 +720,14 @@ public:
/** /**
* Display the caret if needed. * Display the caret if needed.
*/ */
void DisplayCaret(nsIFrame* aFrame, nsDisplayList* aList) { bool DisplayCaret(nsIFrame* aFrame, nsDisplayList* aList)
{
nsIFrame* frame = GetCaretFrame(); nsIFrame* frame = GetCaretFrame();
if (aFrame == frame) { if (aFrame == frame) {
frame->DisplayCaret(this, aList); frame->DisplayCaret(this, aList);
return true;
} }
return false;
} }
/** /**
* Get the frame that the caret is supposed to draw in. * Get the frame that the caret is supposed to draw in.