| Index: sky/engine/core/editing/VisibleUnits.cpp
|
| diff --git a/sky/engine/core/editing/VisibleUnits.cpp b/sky/engine/core/editing/VisibleUnits.cpp
|
| index c6917bd66acd5994b3b0517ef455b75b5ab1b160..847de7382976eed60c1409c21971db5bc02440c4 100644
|
| --- a/sky/engine/core/editing/VisibleUnits.cpp
|
| +++ b/sky/engine/core/editing/VisibleUnits.cpp
|
| @@ -935,10 +935,12 @@ VisiblePosition previousLinePosition(const VisiblePosition &visiblePosition, int
|
| // Could not find a previous line. This means we must already be on the first line.
|
| // Move to the start of the content in this block, which effectively moves us
|
| // to the start of the line we're on.
|
| - Element* rootElement = node->hasEditableStyle(editableType) ? node->rootEditableElement(editableType) : node->document().documentElement();
|
| - if (!rootElement)
|
| + ContainerNode* rootContainer = &node->document();
|
| + if (node->hasEditableStyle(editableType))
|
| + rootContainer = node->rootEditableElement(editableType);
|
| + if (!rootContainer)
|
| return VisiblePosition();
|
| - return VisiblePosition(firstPositionInNode(rootElement), DOWNSTREAM);
|
| + return VisiblePosition(firstPositionInNode(rootContainer), DOWNSTREAM);
|
| }
|
|
|
| VisiblePosition nextLinePosition(const VisiblePosition &visiblePosition, int lineDirectionPoint, EditableType editableType)
|
| @@ -993,10 +995,12 @@ VisiblePosition nextLinePosition(const VisiblePosition &visiblePosition, int lin
|
| // Could not find a next line. This means we must already be on the last line.
|
| // Move to the end of the content in this block, which effectively moves us
|
| // to the end of the line we're on.
|
| - Element* rootElement = node->hasEditableStyle(editableType) ? node->rootEditableElement(editableType) : node->document().documentElement();
|
| - if (!rootElement)
|
| + ContainerNode* rootContainer = &node->document();
|
| + if (node->hasEditableStyle(editableType))
|
| + rootContainer = node->rootEditableElement(editableType);
|
| + if (!rootContainer)
|
| return VisiblePosition();
|
| - return VisiblePosition(lastPositionInNode(rootElement), DOWNSTREAM);
|
| + return VisiblePosition(lastPositionInNode(rootContainer), DOWNSTREAM);
|
| }
|
|
|
| // ---------
|
| @@ -1284,10 +1288,10 @@ bool isEndOfBlock(const VisiblePosition &pos)
|
|
|
| VisiblePosition startOfDocument(const Node* node)
|
| {
|
| - if (!node || !node->document().documentElement())
|
| + if (!node)
|
| return VisiblePosition();
|
|
|
| - return VisiblePosition(firstPositionInNode(node->document().documentElement()), DOWNSTREAM);
|
| + return VisiblePosition(firstPositionInNode(&node->document()), DOWNSTREAM);
|
| }
|
|
|
| VisiblePosition startOfDocument(const VisiblePosition &c)
|
| @@ -1297,11 +1301,10 @@ VisiblePosition startOfDocument(const VisiblePosition &c)
|
|
|
| VisiblePosition endOfDocument(const Node* node)
|
| {
|
| - if (!node || !node->document().documentElement())
|
| + if (!node)
|
| return VisiblePosition();
|
|
|
| - Element* doc = node->document().documentElement();
|
| - return VisiblePosition(lastPositionInNode(doc), DOWNSTREAM);
|
| + return VisiblePosition(lastPositionInNode(&node->document()), DOWNSTREAM);
|
| }
|
|
|
| VisiblePosition endOfDocument(const VisiblePosition &c)
|
|
|