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

Unified Diff: ui/views/ime/input_method_bridge.cc

Issue 1177503003: Remove the 2-level input method system & InputMethodBridge. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: nits. Created 5 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/views/ime/input_method_bridge.h ('k') | ui/views/ime/input_method_bridge_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/views/ime/input_method_bridge.cc
diff --git a/ui/views/ime/input_method_bridge.cc b/ui/views/ime/input_method_bridge.cc
deleted file mode 100644
index 88ceec7d5c90938ecc4a40d6ef8a880878370f25..0000000000000000000000000000000000000000
--- a/ui/views/ime/input_method_bridge.cc
+++ /dev/null
@@ -1,346 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "ui/views/ime/input_method_bridge.h"
-
-#include "ui/base/ime/input_method.h"
-#include "ui/base/ime/input_method_observer.h"
-#include "ui/events/event.h"
-#include "ui/gfx/geometry/rect.h"
-#include "ui/views/view.h"
-#include "ui/views/widget/widget.h"
-
-namespace views {
-
-// InputMethodBridge::HostObserver class ---------------------------------------
-
-// An observer class for observing the host input method. When the host input
-// method is destroyed, it will null out the |host_| field on the
-// InputMethodBridge object.
-class InputMethodBridge::HostObserver : public ui::InputMethodObserver {
- public:
- explicit HostObserver(InputMethodBridge* bridge);
- ~HostObserver() override;
-
- void OnTextInputTypeChanged(const ui::TextInputClient* client) override {}
- void OnFocus() override {}
- void OnBlur() override {}
- void OnCaretBoundsChanged(const ui::TextInputClient* client) override {}
- void OnTextInputStateChanged(const ui::TextInputClient* client) override {}
- void OnInputMethodDestroyed(const ui::InputMethod* input_method) override;
- void OnShowImeIfNeeded() override {}
-
- private:
- InputMethodBridge* bridge_;
-
- DISALLOW_COPY_AND_ASSIGN(HostObserver);
-};
-
-InputMethodBridge::HostObserver::HostObserver(InputMethodBridge* bridge)
- : bridge_(bridge) {
- bridge_->host_->AddObserver(this);
-}
-
-InputMethodBridge::HostObserver::~HostObserver() {
- if (bridge_->host_)
- bridge_->host_->RemoveObserver(this);
-}
-
-void InputMethodBridge::HostObserver::OnInputMethodDestroyed(
- const ui::InputMethod* input_method) {
- DCHECK_EQ(bridge_->host_, input_method);
- bridge_->host_->RemoveObserver(this);
- bridge_->host_ = NULL;
-}
-
-// InputMethodBridge class -----------------------------------------------------
-
-InputMethodBridge::InputMethodBridge(internal::InputMethodDelegate* delegate,
- ui::InputMethod* host,
- bool shared_input_method)
- : host_(host),
- shared_input_method_(shared_input_method) {
- DCHECK(host_);
- SetDelegate(delegate);
-
- host_observer_.reset(new HostObserver(this));
-}
-
-InputMethodBridge::~InputMethodBridge() {
- // By the time we get here it's very likely |widget_|'s NativeWidget has been
- // destroyed. This means any calls to |widget_| that go to the NativeWidget,
- // such as IsActive(), will crash. SetFocusedTextInputClient() may callback to
- // this and go into |widget_|. NULL out |widget_| so we don't attempt to use
- // it.
- DetachFromWidget();
-
- // Host input method might have been destroyed at this point.
- if (host_)
- host_->DetachTextInputClient(this);
-}
-
-void InputMethodBridge::OnFocus() {
- if (!host_) // |host_| could be NULL after OnInputMethodDestroyed.
- return;
-
- // Direct the shared IME to send TextInputClient messages to |this| object.
- if (shared_input_method_ || !host_->GetTextInputClient())
- host_->SetFocusedTextInputClient(this);
-
- // TODO(yusukes): We don't need to call OnTextInputTypeChanged() once we move
- // text input type tracker code to ui::InputMethodBase.
- if (GetFocusedView()) {
- OnTextInputTypeChanged(GetFocusedView());
- OnCaretBoundsChanged(GetFocusedView());
- }
-}
-
-void InputMethodBridge::OnBlur() {
- if (!host_) // |host_| could be NULL after OnInputMethodDestroyed.
- return;
-
- if (HasCompositionText()) {
- ConfirmCompositionText();
- host_->CancelComposition(this);
- }
-
- if (host_->GetTextInputClient() == this)
- host_->SetFocusedTextInputClient(NULL);
-}
-
-bool InputMethodBridge::OnUntranslatedIMEMessage(const base::NativeEvent& event,
- NativeEventResult* result) {
- DCHECK(host_);
-
- return host_->OnUntranslatedIMEMessage(event, result);
-}
-
-void InputMethodBridge::DispatchKeyEvent(const ui::KeyEvent& key) {
- DCHECK(key.type() == ui::ET_KEY_PRESSED || key.type() == ui::ET_KEY_RELEASED);
-
- // We can just dispatch the event here since the |key| is already processed by
- // the system-wide IME.
- DispatchKeyEventPostIME(key);
-}
-
-void InputMethodBridge::OnTextInputTypeChanged(View* view) {
- DCHECK(host_);
-
- if (IsViewFocused(view))
- host_->OnTextInputTypeChanged(this);
- InputMethodBase::OnTextInputTypeChanged(view);
-}
-
-void InputMethodBridge::OnCaretBoundsChanged(View* view) {
- DCHECK(host_);
-
- if (IsViewFocused(view) && !IsTextInputTypeNone())
- host_->OnCaretBoundsChanged(this);
-}
-
-void InputMethodBridge::CancelComposition(View* view) {
- DCHECK(host_);
-
- if (IsViewFocused(view))
- host_->CancelComposition(this);
-}
-
-void InputMethodBridge::OnInputLocaleChanged() {
- DCHECK(host_);
-
- host_->OnInputLocaleChanged();
-}
-
-std::string InputMethodBridge::GetInputLocale() {
- DCHECK(host_);
-
- return host_->GetInputLocale();
-}
-
-bool InputMethodBridge::IsActive() {
- DCHECK(host_);
-
- return host_->IsActive();
-}
-
-bool InputMethodBridge::IsCandidatePopupOpen() const {
- DCHECK(host_);
-
- return host_->IsCandidatePopupOpen();
-}
-
-void InputMethodBridge::ShowImeIfNeeded() {
- DCHECK(host_);
- host_->ShowImeIfNeeded();
-}
-
-// Overridden from TextInputClient. Forward an event from the system-wide IME
-// to the text input |client|, which is e.g. views::Textfield.
-void InputMethodBridge::SetCompositionText(
- const ui::CompositionText& composition) {
- TextInputClient* client = GetTextInputClient();
- if (client)
- client->SetCompositionText(composition);
-}
-
-void InputMethodBridge::ConfirmCompositionText() {
- TextInputClient* client = GetTextInputClient();
- if (client)
- client->ConfirmCompositionText();
-}
-
-void InputMethodBridge::ClearCompositionText() {
- TextInputClient* client = GetTextInputClient();
- if (client)
- client->ClearCompositionText();
-}
-
-void InputMethodBridge::InsertText(const base::string16& text) {
- TextInputClient* client = GetTextInputClient();
- if (client)
- client->InsertText(text);
-}
-
-void InputMethodBridge::InsertChar(base::char16 ch, int flags) {
- TextInputClient* client = GetTextInputClient();
- if (client)
- client->InsertChar(ch, flags);
-}
-
-gfx::NativeWindow InputMethodBridge::GetAttachedWindow() const {
- TextInputClient* client = GetTextInputClient();
- return client ?
- client->GetAttachedWindow() : static_cast<gfx::NativeWindow>(NULL);
-}
-
-ui::TextInputType InputMethodBridge::GetTextInputType() const {
- TextInputClient* client = GetTextInputClient();
- return client ? client->GetTextInputType() : ui::TEXT_INPUT_TYPE_NONE;
-}
-
-ui::TextInputMode InputMethodBridge::GetTextInputMode() const {
- TextInputClient* client = GetTextInputClient();
- return client ? client->GetTextInputMode() : ui::TEXT_INPUT_MODE_DEFAULT;
-}
-
-int InputMethodBridge::GetTextInputFlags() const {
- TextInputClient* client = GetTextInputClient();
- return client ? client->GetTextInputFlags() : 0;
-}
-
-bool InputMethodBridge::CanComposeInline() const {
- TextInputClient* client = GetTextInputClient();
- return client ? client->CanComposeInline() : true;
-}
-
-gfx::Rect InputMethodBridge::GetCaretBounds() const {
- TextInputClient* client = GetTextInputClient();
- if (!client)
- return gfx::Rect();
-
- return client->GetCaretBounds();
-}
-
-bool InputMethodBridge::GetCompositionCharacterBounds(uint32 index,
- gfx::Rect* rect) const {
- DCHECK(rect);
- TextInputClient* client = GetTextInputClient();
- if (!client)
- return false;
-
- return client->GetCompositionCharacterBounds(index, rect);
-}
-
-bool InputMethodBridge::HasCompositionText() const {
- TextInputClient* client = GetTextInputClient();
- return client ? client->HasCompositionText() : false;
-}
-
-bool InputMethodBridge::GetTextRange(gfx::Range* range) const {
- TextInputClient* client = GetTextInputClient();
- return client ? client->GetTextRange(range) : false;
-}
-
-bool InputMethodBridge::GetCompositionTextRange(gfx::Range* range) const {
- TextInputClient* client = GetTextInputClient();
- return client ? client->GetCompositionTextRange(range) : false;
-}
-
-bool InputMethodBridge::GetSelectionRange(gfx::Range* range) const {
- TextInputClient* client = GetTextInputClient();
- return client ? client->GetSelectionRange(range) : false;
-}
-
-bool InputMethodBridge::SetSelectionRange(const gfx::Range& range) {
- TextInputClient* client = GetTextInputClient();
- return client ? client->SetSelectionRange(range) : false;
-}
-
-bool InputMethodBridge::DeleteRange(const gfx::Range& range) {
- TextInputClient* client = GetTextInputClient();
- return client ? client->DeleteRange(range) : false;
-}
-
-bool InputMethodBridge::GetTextFromRange(const gfx::Range& range,
- base::string16* text) const {
- TextInputClient* client = GetTextInputClient();
- return client ? client->GetTextFromRange(range, text) : false;
-}
-
-void InputMethodBridge::OnInputMethodChanged() {
- TextInputClient* client = GetTextInputClient();
- if (client)
- client->OnInputMethodChanged();
-}
-
-bool InputMethodBridge::ChangeTextDirectionAndLayoutAlignment(
- base::i18n::TextDirection direction) {
- TextInputClient* client = GetTextInputClient();
- return client ?
- client->ChangeTextDirectionAndLayoutAlignment(direction) : false;
-}
-
-void InputMethodBridge::ExtendSelectionAndDelete(size_t before, size_t after) {
- TextInputClient* client = GetTextInputClient();
- if (client)
- client->ExtendSelectionAndDelete(before, after);
-}
-
-void InputMethodBridge::EnsureCaretInRect(const gfx::Rect& rect) {
- TextInputClient* client = GetTextInputClient();
- if (client)
- client->EnsureCaretInRect(rect);
-}
-
-bool InputMethodBridge::IsEditCommandEnabled(int command_id) {
- TextInputClient* client = GetTextInputClient();
- return client ? client->IsEditCommandEnabled(command_id) : false;
-}
-
-void InputMethodBridge::SetEditCommandForNextKeyEvent(int command_id) {
- TextInputClient* client = GetTextInputClient();
- if (client)
- client->SetEditCommandForNextKeyEvent(command_id);
-}
-
-// Overridden from FocusChangeListener.
-void InputMethodBridge::OnWillChangeFocus(View* focused_before, View* focused) {
- if (HasCompositionText()) {
- ConfirmCompositionText();
- CancelComposition(focused_before);
- }
-}
-
-void InputMethodBridge::OnDidChangeFocus(View* focused_before, View* focused) {
- DCHECK_EQ(GetFocusedView(), focused);
- OnTextInputTypeChanged(focused);
- OnCaretBoundsChanged(focused);
-}
-
-ui::InputMethod* InputMethodBridge::GetHostInputMethod() const {
- return host_;
-}
-
-
-} // namespace views
« no previous file with comments | « ui/views/ime/input_method_bridge.h ('k') | ui/views/ime/input_method_bridge_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698