| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2014 Google Inc. All rights reserved. | 2 * Copyright (C) 2014 Google 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 are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * 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 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 464 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 475 if (focusedFrame->inputMethodController().hasComposition()) { | 475 if (focusedFrame->inputMethodController().hasComposition()) { |
| 476 WebAutofillClient* autofillClient = WebLocalFrameImpl::fromFrame
(focusedFrame)->autofillClient(); | 476 WebAutofillClient* autofillClient = WebLocalFrameImpl::fromFrame
(focusedFrame)->autofillClient(); |
| 477 | 477 |
| 478 if (autofillClient) | 478 if (autofillClient) |
| 479 autofillClient->setIgnoreTextChanges(true); | 479 autofillClient->setIgnoreTextChanges(true); |
| 480 | 480 |
| 481 // TODO(xiaochengh): The use of updateStyleAndLayoutIgnorePendin
gStylesheets | 481 // TODO(xiaochengh): The use of updateStyleAndLayoutIgnorePendin
gStylesheets |
| 482 // needs to be audited. See http://crbug.com/590369 for more de
tails. | 482 // needs to be audited. See http://crbug.com/590369 for more de
tails. |
| 483 focusedFrame->document()->updateStyleAndLayoutIgnorePendingStyle
sheets(); | 483 focusedFrame->document()->updateStyleAndLayoutIgnorePendingStyle
sheets(); |
| 484 | 484 |
| 485 focusedFrame->inputMethodController().confirmComposition(); | 485 focusedFrame->inputMethodController().finishComposingText(InputM
ethodController::KeepSelection); |
| 486 | 486 |
| 487 if (autofillClient) | 487 if (autofillClient) |
| 488 autofillClient->setIgnoreTextChanges(false); | 488 autofillClient->setIgnoreTextChanges(false); |
| 489 } | 489 } |
| 490 m_imeAcceptEvents = false; | 490 m_imeAcceptEvents = false; |
| 491 } | 491 } |
| 492 } | 492 } |
| 493 } | 493 } |
| 494 | 494 |
| 495 bool WebFrameWidgetImpl::setComposition( | 495 bool WebFrameWidgetImpl::setComposition( |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 538 // selectionStart and selectionEnd, WebKit somehow won't paint the selection | 538 // selectionStart and selectionEnd, WebKit somehow won't paint the selection |
| 539 // at all (see InlineTextBox::paint() function in InlineTextBox.cpp). | 539 // at all (see InlineTextBox::paint() function in InlineTextBox.cpp). |
| 540 // But the selection range actually takes effect. | 540 // But the selection range actually takes effect. |
| 541 inputMethodController.setComposition(String(text), | 541 inputMethodController.setComposition(String(text), |
| 542 CompositionUnderlineVectorBuilder(underlines), | 542 CompositionUnderlineVectorBuilder(underlines), |
| 543 selectionStart, selectionEnd); | 543 selectionStart, selectionEnd); |
| 544 | 544 |
| 545 return text.isEmpty() || inputMethodController.hasComposition(); | 545 return text.isEmpty() || inputMethodController.hasComposition(); |
| 546 } | 546 } |
| 547 | 547 |
| 548 bool WebFrameWidgetImpl::confirmComposition() | 548 bool WebFrameWidgetImpl::commitText(const WebString& text, int relativeCaretPosi
tion) |
| 549 { | 549 { |
| 550 return confirmComposition(DoNotKeepSelection); | 550 UserGestureIndicator gestureIndicator(DefinitelyProcessingNewUserGesture); |
| 551 LocalFrame* focused = focusedLocalFrameAvailableForIme(); |
| 552 if (!focused) |
| 553 return false; |
| 554 |
| 555 if (WebPlugin* plugin = focusedPluginIfInputMethodSupported(focused)) |
| 556 return plugin->commitText(text, relativeCaretPosition); |
| 557 |
| 558 return focused->inputMethodController().commitText(text, relativeCaretPositi
on); |
| 551 } | 559 } |
| 552 | 560 |
| 553 bool WebFrameWidgetImpl::confirmComposition(ConfirmCompositionBehavior selection
Behavior) | 561 bool WebFrameWidgetImpl::finishComposingText(ConfirmCompositionBehavior selectio
nBehavior) |
| 554 { | |
| 555 return confirmComposition(WebString(), selectionBehavior); | |
| 556 } | |
| 557 | |
| 558 bool WebFrameWidgetImpl::confirmComposition(const WebString& text) | |
| 559 { | |
| 560 UserGestureIndicator gestureIndicator(DefinitelyProcessingNewUserGesture); | |
| 561 return confirmComposition(text, DoNotKeepSelection); | |
| 562 } | |
| 563 | |
| 564 bool WebFrameWidgetImpl::confirmComposition(const WebString& text, ConfirmCompos
itionBehavior selectionBehavior) const | |
| 565 { | 562 { |
| 566 LocalFrame* focused = focusedLocalFrameAvailableForIme(); | 563 LocalFrame* focused = focusedLocalFrameAvailableForIme(); |
| 567 if (!focused) | 564 if (!focused) |
| 568 return false; | 565 return false; |
| 569 | 566 |
| 570 if (WebPlugin* plugin = focusedPluginIfInputMethodSupported(focused)) | 567 if (WebPlugin* plugin = focusedPluginIfInputMethodSupported(focused)) |
| 571 return plugin->confirmComposition(text, selectionBehavior); | 568 return plugin->finishComposingText(selectionBehavior); |
| 572 | 569 |
| 573 // TODO(xiaochengh): The use of updateStyleAndLayoutIgnorePendingStylesheets | 570 // TODO(xiaochengh): The use of updateStyleAndLayoutIgnorePendingStylesheets |
| 574 // needs to be audited. See http://crbug.com/590369 for more details. | 571 // needs to be audited. See http://crbug.com/590369 for more details. |
| 575 focused->document()->updateStyleAndLayoutIgnorePendingStylesheets(); | 572 focused->document()->updateStyleAndLayoutIgnorePendingStylesheets(); |
| 576 | 573 |
| 577 return focused->inputMethodController().confirmCompositionOrInsertText(text,
selectionBehavior == KeepSelection ? InputMethodController::KeepSelection : Inp
utMethodController::DoNotKeepSelection); | 574 return focused->inputMethodController().finishComposingText(selectionBehavio
r == KeepSelection ? InputMethodController::KeepSelection : InputMethodControlle
r::DoNotKeepSelection); |
| 578 } | 575 } |
| 579 | 576 |
| 580 WebRange WebFrameWidgetImpl::compositionRange() | 577 WebRange WebFrameWidgetImpl::compositionRange() |
| 581 { | 578 { |
| 582 LocalFrame* focused = focusedLocalFrameAvailableForIme(); | 579 LocalFrame* focused = focusedLocalFrameAvailableForIme(); |
| 583 if (!focused) | 580 if (!focused) |
| 584 return WebRange(); | 581 return WebRange(); |
| 585 | 582 |
| 586 const EphemeralRange range = focused->inputMethodController().compositionEph
emeralRange(); | 583 const EphemeralRange range = focused->inputMethodController().compositionEph
emeralRange(); |
| 587 if (range.isNull()) | 584 if (range.isNull()) |
| (...skipping 861 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1449 } | 1446 } |
| 1450 | 1447 |
| 1451 LocalFrame* WebFrameWidgetImpl::focusedLocalFrameAvailableForIme() const | 1448 LocalFrame* WebFrameWidgetImpl::focusedLocalFrameAvailableForIme() const |
| 1452 { | 1449 { |
| 1453 if (!m_imeAcceptEvents) | 1450 if (!m_imeAcceptEvents) |
| 1454 return nullptr; | 1451 return nullptr; |
| 1455 return focusedLocalFrameInWidget(); | 1452 return focusedLocalFrameInWidget(); |
| 1456 } | 1453 } |
| 1457 | 1454 |
| 1458 } // namespace blink | 1455 } // namespace blink |
| OLD | NEW |