Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(717)

Side by Side Diff: third_party/WebKit/Source/core/editing/InputMethodController.cpp

Issue 2143883002: Fix the bug that matras are input twice for Indian languages. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
67 } 67 }
68 68
69 // Used to insert/replace text during composition update and confirm composition . 69 // Used to insert/replace text during composition update and confirm composition .
70 // Procedure: 70 // Procedure:
71 // 1. Fire 'beforeinput' event for (TODO(chongz): deleted composed text) and i nserted text 71 // 1. Fire 'beforeinput' event for (TODO(chongz): deleted composed text) and i nserted text
72 // 2. Fire 'compositionupdate' event 72 // 2. Fire 'compositionupdate' event
73 // 3. Fire TextEvent and modify DOM 73 // 3. Fire TextEvent and modify DOM
74 // TODO(chongz): 4. Fire 'input' event 74 // TODO(chongz): 4. Fire 'input' event
75 void insertTextDuringCompositionWithEvents(LocalFrame& frame, const String& text , TypingCommand::Options options, TypingCommand::TextCompositionType composition Type) 75 void insertTextDuringCompositionWithEvents(LocalFrame& frame, const String& text , TypingCommand::Options options, TypingCommand::TextCompositionType composition Type)
76 { 76 {
77 DCHECK(compositionType == TypingCommand::TextCompositionType::TextCompositio nUpdate || compositionType == TypingCommand::TextCompositionType::TextCompositio nConfirm) 77 DCHECK(compositionType == TypingCommand::TextCompositionType::TextCompositio nUpdate || compositionType == TypingCommand::TextCompositionType::TextCompositio nConfirm || compositionType == TypingCommand::TextCompositionType::TextCompositi onCancel)
78 << "compositionType should be TextCompositionUpdate or TextCompositionCo nfirm, but got " << static_cast<int>(compositionType); 78 << "compositionType should be TextCompositionUpdate or TextCompositionCo nfirm or TextCompositionCancel, but got " << static_cast<int>(compositionType);
79 if (!frame.document()) 79 if (!frame.document())
80 return; 80 return;
81 81
82 Element* target = frame.document()->focusedElement(); 82 Element* target = frame.document()->focusedElement();
83 if (!target) 83 if (!target)
84 return; 84 return;
85 85
86 // TODO(chongz): Fire 'beforeinput' for the composed text being replaced/del eted. 86 // TODO(chongz): Fire 'beforeinput' for the composed text being replaced/del eted.
87 87
88 // Only the last confirmed text is cancelable. 88 // Only the last confirmed text is cancelable.
89 InputEvent::EventCancelable beforeInputCancelable = (compositionType == Typi ngCommand::TextCompositionType::TextCompositionUpdate) ? InputEvent::EventCancel able::NotCancelable : InputEvent::EventCancelable::IsCancelable; 89 InputEvent::EventCancelable beforeInputCancelable = (compositionType == Typi ngCommand::TextCompositionType::TextCompositionUpdate) ? InputEvent::EventCancel able::NotCancelable : InputEvent::EventCancelable::IsCancelable;
90 DispatchEventResult result = dispatchBeforeInputFromComposition(target, Inpu tEvent::InputType::InsertText, text, beforeInputCancelable); 90 DispatchEventResult result = dispatchBeforeInputFromComposition(target, Inpu tEvent::InputType::InsertText, text, beforeInputCancelable);
91 91
92 if (beforeInputCancelable == InputEvent::EventCancelable::IsCancelable && re sult != DispatchEventResult::NotCanceled) 92 if (beforeInputCancelable == InputEvent::EventCancelable::IsCancelable && re sult != DispatchEventResult::NotCanceled)
93 return; 93 return;
94 94
95 // 'beforeinput' event handler may destroy document. 95 // 'beforeinput' event handler may destroy document.
96 if (!frame.document()) 96 if (!frame.document())
97 return; 97 return;
98 98
99 dispatchCompositionUpdateEvent(frame, text); 99 dispatchCompositionUpdateEvent(frame, text);
100 // 'compositionupdate' event handler may destroy document. 100 // 'compositionupdate' event handler may destroy document.
101 if (!frame.document()) 101 if (!frame.document())
102 return; 102 return;
103 103
104 switch (compositionType) { 104 switch (compositionType) {
105 case TypingCommand::TextCompositionType::TextCompositionUpdate: 105 case TypingCommand::TextCompositionType::TextCompositionUpdate:
106 case TypingCommand::TextCompositionType::TextCompositionConfirm:
106 TypingCommand::insertText(*frame.document(), text, options, compositionT ype); 107 TypingCommand::insertText(*frame.document(), text, options, compositionT ype);
107 break; 108 break;
108 case TypingCommand::TextCompositionType::TextCompositionConfirm: 109 case TypingCommand::TextCompositionType::TextCompositionCancel:
109 // TODO(chongz): Use TypingCommand::insertText after TextEvent was remov ed. (Removed from spec since 2012) 110 // TODO(chongz): Use TypingCommand::insertText after TextEvent was remov ed. (Removed from spec since 2012)
110 // See TextEvent.idl. 111 // See TextEvent.idl.
111 frame.eventHandler().handleTextInputEvent(text, 0, TextEventInputComposi tion); 112 frame.eventHandler().handleTextInputEvent(text, 0, TextEventInputComposi tion);
112 break; 113 break;
113 default: 114 default:
114 NOTREACHED(); 115 NOTREACHED();
115 } 116 }
116 // TODO(chongz): Fire 'input' event. 117 // TODO(chongz): Fire 'input' event.
117 } 118 }
118 119
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
266 Editor::RevealSelectionScope revealSelectionScope(&editor()); 267 Editor::RevealSelectionScope revealSelectionScope(&editor());
267 268
268 if (frame().selection().isNone()) 269 if (frame().selection().isNone())
269 return; 270 return;
270 271
271 clear(); 272 clear();
272 273
273 // TODO(chongz): Update InputType::DeleteComposedCharacter with latest discu ssion. 274 // TODO(chongz): Update InputType::DeleteComposedCharacter with latest discu ssion.
274 dispatchBeforeInputFromComposition(frame().document()->focusedElement(), Inp utEvent::InputType::DeleteComposedCharacter, emptyString(), InputEvent::EventCan celable::NotCancelable); 275 dispatchBeforeInputFromComposition(frame().document()->focusedElement(), Inp utEvent::InputType::DeleteComposedCharacter, emptyString(), InputEvent::EventCan celable::NotCancelable);
275 dispatchCompositionUpdateEvent(frame(), emptyString()); 276 dispatchCompositionUpdateEvent(frame(), emptyString());
276 insertTextDuringCompositionWithEvents(frame(), emptyString(), 0, TypingComma nd::TextCompositionType::TextCompositionConfirm); 277 insertTextDuringCompositionWithEvents(frame(), emptyString(), 0, TypingComma nd::TextCompositionType::TextCompositionCancel);
Changwan Ryu 2016/07/14 02:11:08 any chance that we incorrectly adjust selection fo
277 // Event handler might destroy document. 278 // Event handler might destroy document.
278 if (!frame().document()) 279 if (!frame().document())
279 return; 280 return;
280 281
281 // An open typing command that disagrees about current selection would cause 282 // An open typing command that disagrees about current selection would cause
282 // issues with typing later on. 283 // issues with typing later on.
283 TypingCommand::closeTyping(m_frame); 284 TypingCommand::closeTyping(m_frame);
284 285
285 // No DOM update after 'compositionend'. 286 // No DOM update after 'compositionend'.
286 dispatchCompositionEndEvent(frame(), emptyString()); 287 dispatchCompositionEndEvent(frame(), emptyString());
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after
560 TypingCommand::deleteSelection(*frame().document()); 561 TypingCommand::deleteSelection(*frame().document());
561 } 562 }
562 563
563 DEFINE_TRACE(InputMethodController) 564 DEFINE_TRACE(InputMethodController)
564 { 565 {
565 visitor->trace(m_frame); 566 visitor->trace(m_frame);
566 visitor->trace(m_compositionRange); 567 visitor->trace(m_compositionRange);
567 } 568 }
568 569
569 } // namespace blink 570 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698