OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. | 2 * Copyright (C) 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
103 lastTypingCommand->deleteSelection(options & SmartDelete); | 103 lastTypingCommand->deleteSelection(options & SmartDelete); |
104 return; | 104 return; |
105 } | 105 } |
106 | 106 |
107 TypingCommand::create(document, DeleteSelection, "", options)->apply(); | 107 TypingCommand::create(document, DeleteSelection, "", options)->apply(); |
108 } | 108 } |
109 | 109 |
110 void TypingCommand::deleteKeyPressed(Document& document, Options options, TextGr
anularity granularity) | 110 void TypingCommand::deleteKeyPressed(Document& document, Options options, TextGr
anularity granularity) |
111 { | 111 { |
112 if (granularity == CharacterGranularity) { | 112 if (granularity == CharacterGranularity) { |
113 if (RefPtr<TypingCommand> lastTypingCommand = lastTypingCommandIfStillOp
enForTyping(document.frame())) { | 113 Frame* frame = document.frame(); |
114 updateSelectionIfDifferentFromCurrentSelection(lastTypingCommand.get
(), document.frame()); | 114 if (RefPtr<TypingCommand> lastTypingCommand = lastTypingCommandIfStillOp
enForTyping(frame)) { |
115 lastTypingCommand->setShouldPreventSpellChecking(options & PreventSp
ellChecking); | 115 // If the last typing command is not Delete, open a new typing comma
nd. |
116 lastTypingCommand->deleteKeyPressed(granularity, options & KillRing)
; | 116 // We need to group continuous delete commands alone in a single typ
ing command. |
117 return; | 117 if (lastTypingCommand->commandTypeOfOpenCommand() == DeleteKey) { |
| 118 updateSelectionIfDifferentFromCurrentSelection(lastTypingCommand
.get(), frame); |
| 119 lastTypingCommand->setShouldPreventSpellChecking(options & Preve
ntSpellChecking); |
| 120 lastTypingCommand->deleteKeyPressed(granularity, options & KillR
ing); |
| 121 return; |
| 122 } |
118 } | 123 } |
119 } | 124 } |
120 | 125 |
121 TypingCommand::create(document, DeleteKey, "", options, granularity)->apply(
); | 126 TypingCommand::create(document, DeleteKey, "", options, granularity)->apply(
); |
122 } | 127 } |
123 | 128 |
124 void TypingCommand::forwardDeleteKeyPressed(Document& document, Options options,
TextGranularity granularity) | 129 void TypingCommand::forwardDeleteKeyPressed(Document& document, Options options,
TextGranularity granularity) |
125 { | 130 { |
126 // FIXME: Forward delete in TextEdit appears to open and close a new typing
command. | 131 // FIXME: Forward delete in TextEdit appears to open and close a new typing
command. |
127 Frame* frame = document.frame(); | |
128 if (granularity == CharacterGranularity) { | 132 if (granularity == CharacterGranularity) { |
| 133 Frame* frame = document.frame(); |
129 if (RefPtr<TypingCommand> lastTypingCommand = lastTypingCommandIfStillOp
enForTyping(frame)) { | 134 if (RefPtr<TypingCommand> lastTypingCommand = lastTypingCommandIfStillOp
enForTyping(frame)) { |
130 updateSelectionIfDifferentFromCurrentSelection(lastTypingCommand.get
(), frame); | 135 updateSelectionIfDifferentFromCurrentSelection(lastTypingCommand.get
(), frame); |
131 lastTypingCommand->setShouldPreventSpellChecking(options & PreventSp
ellChecking); | 136 lastTypingCommand->setShouldPreventSpellChecking(options & PreventSp
ellChecking); |
132 lastTypingCommand->forwardDeleteKeyPressed(granularity, options & Ki
llRing); | 137 lastTypingCommand->forwardDeleteKeyPressed(granularity, options & Ki
llRing); |
133 return; | 138 return; |
134 } | 139 } |
135 } | 140 } |
136 | 141 |
137 TypingCommand::create(document, ForwardDeleteKey, "", options, granularity)-
>apply(); | 142 TypingCommand::create(document, ForwardDeleteKey, "", options, granularity)-
>apply(); |
138 } | 143 } |
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
304 } | 309 } |
305 } | 310 } |
306 | 311 |
307 void TypingCommand::typingAddedToOpenCommand(ETypingCommand commandTypeForAddedT
yping) | 312 void TypingCommand::typingAddedToOpenCommand(ETypingCommand commandTypeForAddedT
yping) |
308 { | 313 { |
309 Frame* frame = document().frame(); | 314 Frame* frame = document().frame(); |
310 if (!frame) | 315 if (!frame) |
311 return; | 316 return; |
312 | 317 |
313 updatePreservesTypingStyle(commandTypeForAddedTyping); | 318 updatePreservesTypingStyle(commandTypeForAddedTyping); |
| 319 updateCommandTypeOfOpenCommand(commandTypeForAddedTyping); |
314 | 320 |
315 // The old spellchecking code requires that checking be done first, to preve
nt issues like that in 6864072, where <doesn't> is marked as misspelled. | 321 // The old spellchecking code requires that checking be done first, to preve
nt issues like that in 6864072, where <doesn't> is marked as misspelled. |
316 markMisspellingsAfterTyping(commandTypeForAddedTyping); | 322 markMisspellingsAfterTyping(commandTypeForAddedTyping); |
317 frame->editor().appliedEditing(this); | 323 frame->editor().appliedEditing(this); |
318 } | 324 } |
319 | 325 |
320 void TypingCommand::insertText(const String &text, bool selectInsertedText) | 326 void TypingCommand::insertText(const String &text, bool selectInsertedText) |
321 { | 327 { |
322 // FIXME: Need to implement selectInsertedText for cases where more than one
insert is involved. | 328 // FIXME: Need to implement selectInsertedText for cases where more than one
insert is involved. |
323 // This requires support from insertTextRunWithoutNewlines and insertParagra
phSeparator for extending | 329 // This requires support from insertTextRunWithoutNewlines and insertParagra
phSeparator for extending |
(...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
609 ASSERT_NOT_REACHED(); | 615 ASSERT_NOT_REACHED(); |
610 m_preservesTypingStyle = false; | 616 m_preservesTypingStyle = false; |
611 } | 617 } |
612 | 618 |
613 bool TypingCommand::isTypingCommand() const | 619 bool TypingCommand::isTypingCommand() const |
614 { | 620 { |
615 return true; | 621 return true; |
616 } | 622 } |
617 | 623 |
618 } // namespace WebCore | 624 } // namespace WebCore |
OLD | NEW |