| Index: chrome/browser/chromeos/input_method/mode_indicator_controller.cc
|
| diff --git a/chrome/browser/chromeos/input_method/mode_indicator_controller.cc b/chrome/browser/chromeos/input_method/mode_indicator_controller.cc
|
| index aabb5ab0386ca5c49cffd30c9f2f892b0483526f..820212fddca41d75d7ccf666d4bbb195643841c0 100644
|
| --- a/chrome/browser/chromeos/input_method/mode_indicator_controller.cc
|
| +++ b/chrome/browser/chromeos/input_method/mode_indicator_controller.cc
|
| @@ -2,36 +2,60 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| +#include "chrome/browser/chromeos/input_method/mode_indicator_controller.h"
|
| +
|
| #include "base/command_line.h"
|
| #include "base/logging.h"
|
| #include "base/strings/utf_string_conversions.h"
|
| #include "chrome/browser/chromeos/input_method/input_method_util.h"
|
| -#include "chrome/browser/chromeos/input_method/mode_indicator_controller.h"
|
| -#include "chrome/browser/chromeos/input_method/mode_indicator_widget.h"
|
| +#include "chrome/browser/chromeos/input_method/mode_indicator_delegate_view.h"
|
| #include "chromeos/chromeos_switches.h"
|
|
|
| namespace chromeos {
|
| namespace input_method {
|
|
|
| -ModeIndicatorController::ModeIndicatorController(
|
| - ModeIndicatorWidget* mi_widget)
|
| - : is_focused_(false) {
|
| - mi_widget_.reset(mi_widget);
|
| -
|
| - InputMethodManager* imm = InputMethodManager::Get();
|
| - DCHECK(imm);
|
| - imm->AddObserver(this);
|
| +class ModeIndicatorObserver : public views::WidgetObserver {
|
| + public:
|
| + ModeIndicatorObserver()
|
| + : active_widget_(NULL) {}
|
| +
|
| + virtual ~ModeIndicatorObserver() {}
|
| +
|
| + // If other active mode indicator widget is shown, close it immedicately
|
| + // without fading animation. Then store this widget as the active widget.
|
| + void UpdateActiveModeIndicator(views::Widget* widget) {
|
| + if (active_widget_)
|
| + active_widget_->Close();
|
| + active_widget_ = widget;
|
| + widget->AddObserver(this);
|
| + }
|
| +
|
| + // views::WidgetObserver override:
|
| + virtual void OnWidgetDestroying(views::Widget* widget) OVERRIDE {
|
| + if (widget == active_widget_)
|
| + active_widget_ = NULL;
|
| + }
|
| +
|
| + private:
|
| + views::Widget* active_widget_;
|
| +};
|
| +
|
| +
|
| +ModeIndicatorController::ModeIndicatorController(InputMethodManager* imm)
|
| + : imm_(imm),
|
| + is_focused_(false),
|
| + mi_observer_(new ModeIndicatorObserver) {
|
| + DCHECK(imm_);
|
| + imm_->AddObserver(this);
|
| }
|
|
|
| ModeIndicatorController::~ModeIndicatorController() {
|
| - InputMethodManager* imm = InputMethodManager::Get();
|
| - DCHECK(imm);
|
| - imm->RemoveObserver(this);
|
| + imm_->RemoveObserver(this);
|
| }
|
|
|
| void ModeIndicatorController::SetCursorBounds(
|
| const gfx::Rect& cursor_bounds) {
|
| - mi_widget_->SetCursorBounds(cursor_bounds);
|
| + cursor_bounds_ = cursor_bounds;
|
| }
|
|
|
| void ModeIndicatorController::FocusStateChanged(bool is_focused) {
|
| @@ -43,7 +67,7 @@ void ModeIndicatorController::InputMethodChanged(InputMethodManager* manager,
|
| if (!show_message)
|
| return;
|
|
|
| - ShowModeIndicator(manager);
|
| + ShowModeIndicator();
|
| }
|
|
|
| void ModeIndicatorController::InputMethodPropertyChanged(
|
| @@ -51,7 +75,7 @@ void ModeIndicatorController::InputMethodPropertyChanged(
|
| // Do nothing.
|
| }
|
|
|
| -void ModeIndicatorController::ShowModeIndicator(InputMethodManager* manager) {
|
| +void ModeIndicatorController::ShowModeIndicator() {
|
| // TODO(komatsu): When this is permanently enabled by defalut,
|
| // delete command_line.h and chromeos_switches.h from the header
|
| // files.
|
| @@ -67,19 +91,16 @@ void ModeIndicatorController::ShowModeIndicator(InputMethodManager* manager) {
|
| if (!is_focused_)
|
| return;
|
|
|
| - DCHECK(manager);
|
| - DCHECK(mi_widget_.get());
|
| -
|
| // Get the short name of the changed input method (e.g. US, JA, etc.)
|
| - const InputMethodDescriptor descriptor = manager->GetCurrentInputMethod();
|
| - const std::string short_name = UTF16ToUTF8(
|
| - manager->GetInputMethodUtil()->GetInputMethodShortName(descriptor));
|
| - mi_widget_->SetLabelTextUtf8(short_name);
|
| -
|
| - // Show the widget and hide it after 750msec.
|
| - mi_widget_->Show();
|
| - const int kDelayMSec = 750;
|
| - mi_widget_->DelayHide(kDelayMSec);
|
| + const InputMethodDescriptor descriptor = imm_->GetCurrentInputMethod();
|
| + const string16 short_name =
|
| + imm_->GetInputMethodUtil()->GetInputMethodShortName(descriptor);
|
| +
|
| + ModeIndicatorDelegateView* mi_delegate_view =
|
| + new ModeIndicatorDelegateView(cursor_bounds_, short_name);
|
| + views::BubbleDelegateView::CreateBubble(mi_delegate_view);
|
| + mi_observer_->UpdateActiveModeIndicator(mi_delegate_view->GetWidget());
|
| + mi_delegate_view->ShowAndFadeOut();
|
| }
|
|
|
| } // namespace input_method
|
|
|