From: L. David Baron Bug 1110277 patch 2 - Add nsLayoutUtils::LastContinuationOrIBSplitSibling(). diff --git a/layout/base/nsLayoutUtils.cpp b/layout/base/nsLayoutUtils.cpp --- a/layout/base/nsLayoutUtils.cpp +++ b/layout/base/nsLayoutUtils.cpp @@ -3844,16 +3844,35 @@ nsLayoutUtils::FirstContinuationOrIBSpli break; result = f; } } return result; } +nsIFrame* +nsLayoutUtils::LastContinuationOrIBSplitSibling(nsIFrame *aFrame) +{ + nsIFrame *result = aFrame->FirstContinuation(); + if (result->GetStateBits() & NS_FRAME_PART_OF_IBSPLIT) { + while (true) { + nsIFrame *f = static_cast + (result->Properties().Get(nsIFrame::IBSplitSibling())); + if (!f) + break; + result = f; + } + } + + result = result->LastContinuation(); + + return result; +} + bool nsLayoutUtils::IsFirstContinuationOrIBSplitSibling(nsIFrame *aFrame) { if (aFrame->GetPrevContinuation()) { return false; } if ((aFrame->GetStateBits() & NS_FRAME_PART_OF_IBSPLIT) && aFrame->Properties().Get(nsIFrame::IBSplitPrevSibling())) { diff --git a/layout/base/nsLayoutUtils.h b/layout/base/nsLayoutUtils.h --- a/layout/base/nsLayoutUtils.h +++ b/layout/base/nsLayoutUtils.h @@ -1235,16 +1235,23 @@ public: /** * Get the first frame in the continuation-plus-ib-split-sibling chain * containing aFrame. */ static nsIFrame* FirstContinuationOrIBSplitSibling(nsIFrame *aFrame); /** + * Get the last frame in the continuation-plus-ib-split-sibling chain + * containing aFrame. + */ + static nsIFrame* + LastContinuationOrIBSplitSibling(nsIFrame *aFrame); + + /** * Is FirstContinuationOrIBSplitSibling(aFrame) going to return * aFrame? */ static bool IsFirstContinuationOrIBSplitSibling(nsIFrame *aFrame); /** * Check whether aFrame is a part of the scrollbar or scrollcorner of