Index: Source/core/rendering/RenderBlock.cpp |
diff --git a/Source/core/rendering/RenderBlock.cpp b/Source/core/rendering/RenderBlock.cpp |
index eadd43ce350a0cf81b5fbf6582321e6a29f18f12..4824d0052c9385786ffb024c6389f29ac7d107b5 100644 |
--- a/Source/core/rendering/RenderBlock.cpp |
+++ b/Source/core/rendering/RenderBlock.cpp |
@@ -28,6 +28,7 @@ |
#include "core/accessibility/AXObjectCache.h" |
#include "core/dom/Document.h" |
#include "core/dom/Element.h" |
+#include "core/dom/Text.h" |
#include "core/events/OverflowEvent.h" |
#include "core/dom/shadow/ShadowRoot.h" |
#include "core/editing/Editor.h" |
@@ -5813,8 +5814,6 @@ void RenderBlock::updateFirstLetter() |
if (style()->styleType() == FIRST_LETTER) |
return; |
- // FIXME: We need to destroy the first-letter object if it is no longer the first child. Need to find |
- // an efficient way to check for that situation though before implementing anything. |
RenderObject* firstLetterBlock = findFirstLetterBlock(this); |
if (!firstLetterBlock) |
return; |
@@ -5845,9 +5844,24 @@ void RenderBlock::updateFirstLetter() |
if (!currChild) |
return; |
- // If the child already has style, then it has already been created, so we just want |
- // to update it. |
if (currChild->parent()->style()->styleType() == FIRST_LETTER) { |
+ // Destroy the first-letter object if it is no longer the first child. |
+ RenderObject* remainingText = currChild->parent()->nextSibling(); |
+ if (remainingText && currChild->node() != remainingText->node()) { |
+ if (!remainingText->isText() || remainingText->isBR()) |
+ return; |
+ |
+ LayoutStateDisabler layoutStateDisabler(view()); |
+ |
+ if (RenderObject* oldRemainingText = toRenderBoxModelObject(currChild->parent())->firstLetterRemainingText()) |
+ toRenderText(oldRemainingText)->setText(toText(oldRemainingText->node())->data().impl()); |
+ |
+ createFirstLetterRenderer(firstLetterBlock, remainingText); |
+ return; |
+ } |
+ |
+ // If the child already has style, then it has already been created, so we just want |
+ // to update it. |
updateFirstLetterStyle(firstLetterBlock, currChild); |
return; |
} |