| Index: Source/core/editing/TypingCommand.cpp
|
| diff --git a/Source/core/editing/TypingCommand.cpp b/Source/core/editing/TypingCommand.cpp
|
| index 042d0a84c85b449a456b70578e4d3690aceb92fc..ec9d0b2bfffa78449a6347343f033e9924af4cb1 100644
|
| --- a/Source/core/editing/TypingCommand.cpp
|
| +++ b/Source/core/editing/TypingCommand.cpp
|
| @@ -110,11 +110,16 @@ void TypingCommand::deleteSelection(Document& document, Options options)
|
| void TypingCommand::deleteKeyPressed(Document& document, Options options, TextGranularity granularity)
|
| {
|
| if (granularity == CharacterGranularity) {
|
| - if (RefPtr<TypingCommand> lastTypingCommand = lastTypingCommandIfStillOpenForTyping(document.frame())) {
|
| - updateSelectionIfDifferentFromCurrentSelection(lastTypingCommand.get(), document.frame());
|
| - lastTypingCommand->setShouldPreventSpellChecking(options & PreventSpellChecking);
|
| - lastTypingCommand->deleteKeyPressed(granularity, options & KillRing);
|
| - return;
|
| + Frame* frame = document.frame();
|
| + if (RefPtr<TypingCommand> lastTypingCommand = lastTypingCommandIfStillOpenForTyping(frame)) {
|
| + // If the last typing command is not Delete, open a new typing command.
|
| + // We need to group continuous delete commands alone in a single typing command.
|
| + if (lastTypingCommand->commandTypeOfOpenCommand() == DeleteKey) {
|
| + updateSelectionIfDifferentFromCurrentSelection(lastTypingCommand.get(), frame);
|
| + lastTypingCommand->setShouldPreventSpellChecking(options & PreventSpellChecking);
|
| + lastTypingCommand->deleteKeyPressed(granularity, options & KillRing);
|
| + return;
|
| + }
|
| }
|
| }
|
|
|
| @@ -124,8 +129,8 @@ void TypingCommand::deleteKeyPressed(Document& document, Options options, TextGr
|
| void TypingCommand::forwardDeleteKeyPressed(Document& document, Options options, TextGranularity granularity)
|
| {
|
| // FIXME: Forward delete in TextEdit appears to open and close a new typing command.
|
| - Frame* frame = document.frame();
|
| if (granularity == CharacterGranularity) {
|
| + Frame* frame = document.frame();
|
| if (RefPtr<TypingCommand> lastTypingCommand = lastTypingCommandIfStillOpenForTyping(frame)) {
|
| updateSelectionIfDifferentFromCurrentSelection(lastTypingCommand.get(), frame);
|
| lastTypingCommand->setShouldPreventSpellChecking(options & PreventSpellChecking);
|
| @@ -311,6 +316,7 @@ void TypingCommand::typingAddedToOpenCommand(ETypingCommand commandTypeForAddedT
|
| return;
|
|
|
| updatePreservesTypingStyle(commandTypeForAddedTyping);
|
| + updateCommandTypeOfOpenCommand(commandTypeForAddedTyping);
|
|
|
| // The old spellchecking code requires that checking be done first, to prevent issues like that in 6864072, where <doesn't> is marked as misspelled.
|
| markMisspellingsAfterTyping(commandTypeForAddedTyping);
|
|
|