Chromium Code Reviews| 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 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 241 frame().selection().setSelection( | 241 frame().selection().setSelection( |
| 242 SelectionInDOMTree::Builder().setBaseAndExtent(range).build(), 0); | 242 SelectionInDOMTree::Builder().setBaseAndExtent(range).build(), 0); |
| 243 } | 243 } |
| 244 | 244 |
| 245 bool InputMethodController::finishComposingText( | 245 bool InputMethodController::finishComposingText( |
| 246 ConfirmCompositionBehavior confirmBehavior) { | 246 ConfirmCompositionBehavior confirmBehavior) { |
| 247 if (!hasComposition()) | 247 if (!hasComposition()) |
| 248 return false; | 248 return false; |
| 249 | 249 |
| 250 if (confirmBehavior == KeepSelection) { | 250 if (confirmBehavior == KeepSelection) { |
| 251 // Do not dismiss handles if we are not moving selection. | |
| 252 int selectionOptions = frame().selection().isHandleVisible() | |
| 253 ? FrameSelection::HandleVisible | |
| 254 : 0; | |
|
Changwan Ryu
2017/01/19 09:13:39
yosin@, could you take another look at this part?
yosin_UTC9
2017/01/19 09:29:51
This is yet another case |FrameSeleciton.isHandleV
Changwan Ryu
2017/01/19 11:42:59
Thanks for the pointer.
I considered fixing FrameS
| |
| 251 PlainTextRange oldOffsets = getSelectionOffsets(); | 255 PlainTextRange oldOffsets = getSelectionOffsets(); |
| 252 Editor::RevealSelectionScope revealSelectionScope(&editor()); | 256 Editor::RevealSelectionScope revealSelectionScope(&editor()); |
| 253 | 257 |
| 254 const String& composing = composingText(); | 258 const String& composing = composingText(); |
| 255 const bool result = replaceComposition(composing); | 259 const bool result = replaceComposition(composing); |
| 256 | 260 |
| 257 // TODO(xiaochengh): The use of updateStyleAndLayoutIgnorePendingStylesheets | 261 // TODO(xiaochengh): The use of updateStyleAndLayoutIgnorePendingStylesheets |
| 258 // needs to be audited. see http://crbug.com/590369 for more details. | 262 // needs to be audited. see http://crbug.com/590369 for more details. |
| 259 document().updateStyleAndLayoutIgnorePendingStylesheets(); | 263 document().updateStyleAndLayoutIgnorePendingStylesheets(); |
| 260 | 264 |
| 261 setSelectionOffsets(oldOffsets); | 265 setSelectionOffsets(oldOffsets, selectionOptions); |
| 262 | 266 |
| 263 // No DOM update after 'compositionend'. | 267 // No DOM update after 'compositionend'. |
| 264 dispatchCompositionEndEvent(frame(), composing); | 268 dispatchCompositionEndEvent(frame(), composing); |
| 265 | 269 |
| 266 return result; | 270 return result; |
| 267 } | 271 } |
| 268 | 272 |
| 269 return replaceCompositionAndMoveCaret(composingText(), 0, | 273 return replaceCompositionAndMoveCaret(composingText(), 0, |
| 270 Vector<CompositionUnderline>()); | 274 Vector<CompositionUnderline>()); |
| 271 } | 275 } |
| (...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 434 return; | 438 return; |
| 435 | 439 |
| 436 // An open typing command that disagrees about current selection would cause | 440 // An open typing command that disagrees about current selection would cause |
| 437 // issues with typing later on. | 441 // issues with typing later on. |
| 438 TypingCommand::closeTyping(m_frame); | 442 TypingCommand::closeTyping(m_frame); |
| 439 | 443 |
| 440 // No DOM update after 'compositionend'. | 444 // No DOM update after 'compositionend'. |
| 441 dispatchCompositionEndEvent(frame(), emptyString()); | 445 dispatchCompositionEndEvent(frame(), emptyString()); |
| 442 } | 446 } |
| 443 | 447 |
| 444 void InputMethodController::cancelCompositionIfSelectionIsInvalid() { | |
| 445 if (!hasComposition() || editor().preventRevealSelection()) | |
| 446 return; | |
| 447 | |
| 448 // Check if selection start and selection end are valid. | |
| 449 FrameSelection& selection = frame().selection(); | |
| 450 if (!selection.isNone() && !m_compositionRange->collapsed()) { | |
| 451 if (selection.start().compareTo(m_compositionRange->startPosition()) >= 0 && | |
| 452 selection.end().compareTo(m_compositionRange->endPosition()) <= 0) | |
| 453 return; | |
| 454 } | |
| 455 | |
| 456 cancelComposition(); | |
| 457 frame().chromeClient().didCancelCompositionOnSelectionChange(); | |
| 458 } | |
| 459 | |
| 460 // If current position is at grapheme boundary, return 0; otherwise, return the | 448 // If current position is at grapheme boundary, return 0; otherwise, return the |
| 461 // distance to its nearest left grapheme boundary. | 449 // distance to its nearest left grapheme boundary. |
| 462 static size_t computeDistanceToLeftGraphemeBoundary(const Position& position) { | 450 static size_t computeDistanceToLeftGraphemeBoundary(const Position& position) { |
| 463 const Position& adjustedPosition = previousPositionOf( | 451 const Position& adjustedPosition = previousPositionOf( |
| 464 nextPositionOf(position, PositionMoveType::GraphemeCluster), | 452 nextPositionOf(position, PositionMoveType::GraphemeCluster), |
| 465 PositionMoveType::GraphemeCluster); | 453 PositionMoveType::GraphemeCluster); |
| 466 DCHECK_EQ(position.anchorNode(), adjustedPosition.anchorNode()); | 454 DCHECK_EQ(position.anchorNode(), adjustedPosition.anchorNode()); |
| 467 DCHECK_GE(position.computeOffsetInContainerNode(), | 455 DCHECK_GE(position.computeOffsetInContainerNode(), |
| 468 adjustedPosition.computeOffsetInContainerNode()); | 456 adjustedPosition.computeOffsetInContainerNode()); |
| 469 return static_cast<size_t>(position.computeOffsetInContainerNode() - | 457 return static_cast<size_t>(position.computeOffsetInContainerNode() - |
| (...skipping 603 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1073 frame().chromeClient().resetInputMethod(); | 1061 frame().chromeClient().resetInputMethod(); |
| 1074 } | 1062 } |
| 1075 | 1063 |
| 1076 DEFINE_TRACE(InputMethodController) { | 1064 DEFINE_TRACE(InputMethodController) { |
| 1077 visitor->trace(m_frame); | 1065 visitor->trace(m_frame); |
| 1078 visitor->trace(m_compositionRange); | 1066 visitor->trace(m_compositionRange); |
| 1079 SynchronousMutationObserver::trace(visitor); | 1067 SynchronousMutationObserver::trace(visitor); |
| 1080 } | 1068 } |
| 1081 | 1069 |
| 1082 } // namespace blink | 1070 } // namespace blink |
| OLD | NEW |