From f439c3f2b48eeb448d6482045cde995d4ab91c6f Mon Sep 17 00:00:00 2001 From: "troy%netscape.com" Date: Fri, 24 Sep 1999 17:14:19 +0000 Subject: [PATCH] Fix for bug #14814. Changed GetFloaterContainingBlock() to also check for floated or absolutely positioned inline elements git-svn-id: svn://10.0.0.236/trunk@48981 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/layout/base/nsCSSFrameConstructor.cpp | 13 ++++++++++++- .../layout/html/style/src/nsCSSFrameConstructor.cpp | 13 ++++++++++++- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/mozilla/layout/base/nsCSSFrameConstructor.cpp b/mozilla/layout/base/nsCSSFrameConstructor.cpp index 8c93d5e4e62..0a69715e8a2 100644 --- a/mozilla/layout/base/nsCSSFrameConstructor.cpp +++ b/mozilla/layout/base/nsCSSFrameConstructor.cpp @@ -5076,7 +5076,8 @@ nsCSSFrameConstructor::GetFloaterContainingBlock(nsIPresContext* aPresContext, { NS_PRECONDITION(mInitialContainingBlock, "no initial containing block"); - // Starting with aFrame, look for a frame that is a real block frame + // Starting with aFrame, look for a frame that is a real block frame, + // or a floated inline or absolutely positioned inline frame nsIFrame* containingBlock = aFrame; while (nsnull != containingBlock) { const nsStyleDisplay* display; @@ -5086,6 +5087,16 @@ nsCSSFrameConstructor::GetFloaterContainingBlock(nsIPresContext* aPresContext, (NS_STYLE_DISPLAY_LIST_ITEM == display->mDisplay)) { break; } + else if (NS_STYLE_DISPLAY_INLINE == display->mDisplay) { + const nsStylePosition* position; + containingBlock->GetStyleData(eStyleStruct_Position, + (const nsStyleStruct*&)position); + + if ((NS_STYLE_FLOAT_NONE != display->mDisplay) || + (position->IsAbsolutelyPositioned())) { + break; + } + } // Continue walking up the hierarchy containingBlock->GetParent(&containingBlock); diff --git a/mozilla/layout/html/style/src/nsCSSFrameConstructor.cpp b/mozilla/layout/html/style/src/nsCSSFrameConstructor.cpp index 8c93d5e4e62..0a69715e8a2 100644 --- a/mozilla/layout/html/style/src/nsCSSFrameConstructor.cpp +++ b/mozilla/layout/html/style/src/nsCSSFrameConstructor.cpp @@ -5076,7 +5076,8 @@ nsCSSFrameConstructor::GetFloaterContainingBlock(nsIPresContext* aPresContext, { NS_PRECONDITION(mInitialContainingBlock, "no initial containing block"); - // Starting with aFrame, look for a frame that is a real block frame + // Starting with aFrame, look for a frame that is a real block frame, + // or a floated inline or absolutely positioned inline frame nsIFrame* containingBlock = aFrame; while (nsnull != containingBlock) { const nsStyleDisplay* display; @@ -5086,6 +5087,16 @@ nsCSSFrameConstructor::GetFloaterContainingBlock(nsIPresContext* aPresContext, (NS_STYLE_DISPLAY_LIST_ITEM == display->mDisplay)) { break; } + else if (NS_STYLE_DISPLAY_INLINE == display->mDisplay) { + const nsStylePosition* position; + containingBlock->GetStyleData(eStyleStruct_Position, + (const nsStyleStruct*&)position); + + if ((NS_STYLE_FLOAT_NONE != display->mDisplay) || + (position->IsAbsolutelyPositioned())) { + break; + } + } // Continue walking up the hierarchy containingBlock->GetParent(&containingBlock);