OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2006, 2007, 2008, 2011 Apple Inc. All rights reserved. | 2 * Copyright (C) 2006, 2007, 2008, 2011 Apple Inc. All rights reserved. |
3 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) | 3 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
7 * are met: | 7 * are met: |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
198 // Dispatch a compositionend event to the focused node. | 198 // Dispatch a compositionend event to the focused node. |
199 // We should send this event before sending a TextEvent as written in Sectio
n 6.2.2 and 6.2.3 of | 199 // We should send this event before sending a TextEvent as written in Sectio
n 6.2.2 and 6.2.3 of |
200 // the DOM Event specification. | 200 // the DOM Event specification. |
201 if (Element* target = m_frame->document()->focusedElement()) { | 201 if (Element* target = m_frame->document()->focusedElement()) { |
202 RefPtr<CompositionEvent> event = CompositionEvent::create(eventNames().c
ompositionendEvent, m_frame->domWindow(), text); | 202 RefPtr<CompositionEvent> event = CompositionEvent::create(eventNames().c
ompositionendEvent, m_frame->domWindow(), text); |
203 target->dispatchEvent(event, IGNORE_EXCEPTION); | 203 target->dispatchEvent(event, IGNORE_EXCEPTION); |
204 } | 204 } |
205 | 205 |
206 // If text is empty, then delete the old composition here. If text is non-em
pty, InsertTextCommand::input | 206 // If text is empty, then delete the old composition here. If text is non-em
pty, InsertTextCommand::input |
207 // will delete the old composition with an optimized replace operation. | 207 // will delete the old composition with an optimized replace operation. |
208 if (text.isEmpty() && mode != CancelComposition) | 208 if (text.isEmpty() && mode != CancelComposition) { |
209 TypingCommand::deleteSelection(m_frame->document(), 0); | 209 ASSERT(m_frame->document()); |
| 210 TypingCommand::deleteSelection(*m_frame->document(), 0); |
| 211 } |
210 | 212 |
211 m_compositionNode = 0; | 213 m_compositionNode = 0; |
212 m_customCompositionUnderlines.clear(); | 214 m_customCompositionUnderlines.clear(); |
213 | 215 |
214 insertTextForConfirmedComposition(text); | 216 insertTextForConfirmedComposition(text); |
215 | 217 |
216 if (mode == CancelComposition) { | 218 if (mode == CancelComposition) { |
217 // An open typing command that disagrees about current selection would c
ause issues with typing later on. | 219 // An open typing command that disagrees about current selection would c
ause issues with typing later on. |
218 TypingCommand::closeTyping(m_frame); | 220 TypingCommand::closeTyping(m_frame); |
219 } | 221 } |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
264 event = CompositionEvent::create(eventNames().compositionupdateE
vent, m_frame->domWindow(), text); | 266 event = CompositionEvent::create(eventNames().compositionupdateE
vent, m_frame->domWindow(), text); |
265 else | 267 else |
266 event = CompositionEvent::create(eventNames().compositionendEven
t, m_frame->domWindow(), text); | 268 event = CompositionEvent::create(eventNames().compositionendEven
t, m_frame->domWindow(), text); |
267 } | 269 } |
268 if (event.get()) | 270 if (event.get()) |
269 target->dispatchEvent(event, IGNORE_EXCEPTION); | 271 target->dispatchEvent(event, IGNORE_EXCEPTION); |
270 } | 272 } |
271 | 273 |
272 // If text is empty, then delete the old composition here. If text is non-em
pty, InsertTextCommand::input | 274 // If text is empty, then delete the old composition here. If text is non-em
pty, InsertTextCommand::input |
273 // will delete the old composition with an optimized replace operation. | 275 // will delete the old composition with an optimized replace operation. |
274 if (text.isEmpty()) | 276 if (text.isEmpty()) { |
275 TypingCommand::deleteSelection(m_frame->document(), TypingCommand::Preve
ntSpellChecking); | 277 ASSERT(m_frame->document()); |
| 278 TypingCommand::deleteSelection(*m_frame->document(), TypingCommand::Prev
entSpellChecking); |
| 279 } |
276 | 280 |
277 m_compositionNode = 0; | 281 m_compositionNode = 0; |
278 m_customCompositionUnderlines.clear(); | 282 m_customCompositionUnderlines.clear(); |
279 | 283 |
280 if (!text.isEmpty()) { | 284 if (!text.isEmpty()) { |
281 TypingCommand::insertText(m_frame->document(), text, TypingCommand::Sele
ctInsertedText | TypingCommand::PreventSpellChecking, TypingCommand::TextComposi
tionUpdate); | 285 ASSERT(m_frame->document()); |
| 286 TypingCommand::insertText(*m_frame->document(), text, TypingCommand::Sel
ectInsertedText | TypingCommand::PreventSpellChecking, TypingCommand::TextCompos
itionUpdate); |
282 | 287 |
283 // Find out what node has the composition now. | 288 // Find out what node has the composition now. |
284 Position base = m_frame->selection()->base().downstream(); | 289 Position base = m_frame->selection()->base().downstream(); |
285 Position extent = m_frame->selection()->extent(); | 290 Position extent = m_frame->selection()->extent(); |
286 Node* baseNode = base.deprecatedNode(); | 291 Node* baseNode = base.deprecatedNode(); |
287 unsigned baseOffset = base.deprecatedEditingOffset(); | 292 unsigned baseOffset = base.deprecatedEditingOffset(); |
288 Node* extentNode = extent.deprecatedNode(); | 293 Node* extentNode = extent.deprecatedNode(); |
289 unsigned extentOffset = extent.deprecatedEditingOffset(); | 294 unsigned extentOffset = extent.deprecatedEditingOffset(); |
290 | 295 |
291 if (baseNode && baseNode == extentNode && baseNode->isTextNode() && base
Offset + text.length() == extentOffset) { | 296 if (baseNode && baseNode == extentNode && baseNode->isTextNode() && base
Offset + text.length() == extentOffset) { |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
370 | 375 |
371 bool InputMethodController::setSelectionOffsets(const PlainTextOffsets& selectio
nOffsets) | 376 bool InputMethodController::setSelectionOffsets(const PlainTextOffsets& selectio
nOffsets) |
372 { | 377 { |
373 if (selectionOffsets.isNull()) | 378 if (selectionOffsets.isNull()) |
374 return false; | 379 return false; |
375 // FIXME: We should move Editor::setSelectionOffsets() into InputMethodContr
oller class. | 380 // FIXME: We should move Editor::setSelectionOffsets() into InputMethodContr
oller class. |
376 return editor().setSelectionOffsets(selectionOffsets.start(), selectionOffse
ts.end()); | 381 return editor().setSelectionOffsets(selectionOffsets.start(), selectionOffse
ts.end()); |
377 } | 382 } |
378 | 383 |
379 } // namespace WebCore | 384 } // namespace WebCore |
OLD | NEW |