diff options
author | Steve Block <steveblock@google.com> | 2011-05-18 13:36:51 +0100 |
---|---|---|
committer | Steve Block <steveblock@google.com> | 2011-05-24 15:38:28 +0100 |
commit | 2fc2651226baac27029e38c9d6ef883fa32084db (patch) | |
tree | e396d4bf89dcce6ed02071be66212495b1df1dec /Source/WebCore/editing/TypingCommand.cpp | |
parent | b3725cedeb43722b3b175aaeff70552e562d2c94 (diff) | |
download | external_webkit-2fc2651226baac27029e38c9d6ef883fa32084db.zip external_webkit-2fc2651226baac27029e38c9d6ef883fa32084db.tar.gz external_webkit-2fc2651226baac27029e38c9d6ef883fa32084db.tar.bz2 |
Merge WebKit at r78450: Initial merge by git.
Change-Id: I6d3e5f1f868ec266a0aafdef66182ddc3f265dc1
Diffstat (limited to 'Source/WebCore/editing/TypingCommand.cpp')
-rw-r--r-- | Source/WebCore/editing/TypingCommand.cpp | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/Source/WebCore/editing/TypingCommand.cpp b/Source/WebCore/editing/TypingCommand.cpp index d54b388..9723c2d 100644 --- a/Source/WebCore/editing/TypingCommand.cpp +++ b/Source/WebCore/editing/TypingCommand.cpp @@ -47,7 +47,8 @@ namespace WebCore { using namespace HTMLNames; -TypingCommand::TypingCommand(Document *document, ETypingCommand commandType, const String &textToInsert, bool selectInsertedText, TextGranularity granularity, bool killRing) +TypingCommand::TypingCommand(Document *document, ETypingCommand commandType, const String &textToInsert, bool selectInsertedText, TextGranularity granularity, TextCompositionType compositionType, + bool killRing) : CompositeEditCommand(document), m_commandType(commandType), m_textToInsert(textToInsert), @@ -55,6 +56,7 @@ TypingCommand::TypingCommand(Document *document, ETypingCommand commandType, con m_selectInsertedText(selectInsertedText), m_smartDelete(false), m_granularity(granularity), + m_compositionType(compositionType), m_killRing(killRing), m_openedByBackwardDelete(false) { @@ -133,18 +135,18 @@ void TypingCommand::updateSelectionIfDifferentFromCurrentSelection(TypingCommand } -void TypingCommand::insertText(Document* document, const String& text, bool selectInsertedText, bool insertedTextIsComposition) +void TypingCommand::insertText(Document* document, const String& text, bool selectInsertedText, TextCompositionType composition) { ASSERT(document); Frame* frame = document->frame(); ASSERT(frame); - insertText(document, text, frame->selection()->selection(), selectInsertedText, insertedTextIsComposition); + insertText(document, text, frame->selection()->selection(), selectInsertedText, composition); } // FIXME: We shouldn't need to take selectionForInsertion. It should be identical to SelectionController's current selection. -void TypingCommand::insertText(Document* document, const String& text, const VisibleSelection& selectionForInsertion, bool selectInsertedText, bool insertedTextIsComposition) +void TypingCommand::insertText(Document* document, const String& text, const VisibleSelection& selectionForInsertion, bool selectInsertedText, TextCompositionType compositionType) { #if REMOVE_MARKERS_UPON_EDITING if (!text.isEmpty()) @@ -161,7 +163,7 @@ void TypingCommand::insertText(Document* document, const String& text, const Vis String newText = text; Node* startNode = selectionForInsertion.start().node(); - if (startNode && startNode->rootEditableElement() && !insertedTextIsComposition) { + if (startNode && startNode->rootEditableElement() && compositionType != TextCompositionUpdate) { // Send BeforeTextInsertedEvent. The event handler will update text if necessary. ExceptionCode ec = 0; RefPtr<BeforeTextInsertedEvent> evt = BeforeTextInsertedEvent::create(text); @@ -182,11 +184,13 @@ void TypingCommand::insertText(Document* document, const String& text, const Vis lastTypingCommand->setStartingSelection(selectionForInsertion); lastTypingCommand->setEndingSelection(selectionForInsertion); } + + lastTypingCommand->setCompositionType(compositionType); lastTypingCommand->insertText(newText, selectInsertedText); return; } - RefPtr<TypingCommand> cmd = TypingCommand::create(document, InsertText, newText, selectInsertedText); + RefPtr<TypingCommand> cmd = TypingCommand::create(document, InsertText, newText, selectInsertedText, compositionType); if (changeSelection) { cmd->setStartingSelection(selectionForInsertion); cmd->setEndingSelection(selectionForInsertion); @@ -386,7 +390,8 @@ void TypingCommand::insertTextRunWithoutNewlines(const String &text, bool select command->setStartingSelection(endingSelection()); command->setEndingSelection(endingSelection()); } - command->input(text, selectInsertedText); + command->input(text, selectInsertedText, + m_compositionType == TextCompositionNone ? InsertTextCommand::RebalanceLeadingAndTrailingWhitespaces : InsertTextCommand::RebalanceAllWhitespaces); typingAddedToOpenCommand(InsertText); } @@ -431,7 +436,7 @@ bool TypingCommand::makeEditableRootEmpty() removeNode(child); addBlockPlaceholderIfNeeded(root); - setEndingSelection(VisibleSelection(Position(root, 0), DOWNSTREAM)); + setEndingSelection(VisibleSelection(firstPositionInNode(root), DOWNSTREAM)); return true; } @@ -490,7 +495,7 @@ void TypingCommand::deleteKeyPressed(TextGranularity granularity, bool killRing) selection.modify(SelectionController::AlterationExtend, DirectionBackward, granularity); // If the caret is just after a table, select the table and don't delete anything. } else if (Node* table = isFirstPositionAfterTable(visibleStart)) { - setEndingSelection(VisibleSelection(Position(table, 0), endingSelection().start(), DOWNSTREAM)); + setEndingSelection(VisibleSelection(positionAfterNode(table), endingSelection().start(), DOWNSTREAM)); typingAddedToOpenCommand(DeleteKey); return; } @@ -591,7 +596,7 @@ void TypingCommand::forwardDeleteKeyPressed(TextGranularity granularity, bool ki extraCharacters = selectionToDelete.end().deprecatedEditingOffset() - selectionToDelete.start().deprecatedEditingOffset(); else extraCharacters = selectionToDelete.end().deprecatedEditingOffset(); - extent = Position(extent.node(), extent.deprecatedEditingOffset() + extraCharacters); + extent = Position(extent.node(), extent.deprecatedEditingOffset() + extraCharacters, Position::PositionIsOffsetInAnchor); } selectionAfterUndo.setWithoutValidation(startingSelection().start(), extent); } |