| Index: ui/keyboard/keyboard_controller.cc
|
| diff --git a/ui/keyboard/keyboard_controller.cc b/ui/keyboard/keyboard_controller.cc
|
| index c948ca04beee84730d823e4ac4c436f2de71a76a..e9e63da2def30cca0f75eb5024ee8597df8a35cf 100644
|
| --- a/ui/keyboard/keyboard_controller.cc
|
| +++ b/ui/keyboard/keyboard_controller.cc
|
| @@ -141,6 +141,14 @@ aura::Window* KeyboardController::GetContainerWindow() {
|
| return container_;
|
| }
|
|
|
| +void KeyboardController::AddObserver(Observer* observer) {
|
| + observer_list_.AddObserver(observer);
|
| +}
|
| +
|
| +void KeyboardController::RemoveObserver(Observer* observer) {
|
| + observer_list_.RemoveObserver(observer);
|
| +}
|
| +
|
| void KeyboardController::OnWindowParentChanged(aura::Window* window,
|
| aura::Window* parent) {
|
| OnTextInputStateChanged(proxy_->GetInputMethod()->GetTextInputClient());
|
| @@ -156,8 +164,10 @@ void KeyboardController::OnTextInputStateChanged(
|
| if (!container_)
|
| return;
|
|
|
| + bool was_showing = container_->IsVisible();
|
| + bool should_show = was_showing;
|
| if (!client || client->GetTextInputType() == ui::TEXT_INPUT_TYPE_NONE) {
|
| - container_->Hide();
|
| + should_show = false;
|
| } else {
|
| if (container_->children().empty()) {
|
| aura::Window* keyboard = proxy_->GetKeyboardWindow();
|
| @@ -166,8 +176,22 @@ void KeyboardController::OnTextInputStateChanged(
|
| container_->layout_manager()->OnWindowResized();
|
| }
|
| container_->parent()->StackChildAtTop(container_);
|
| - container_->Show();
|
| + should_show = true;
|
| }
|
| +
|
| + if (was_showing != should_show) {
|
| + gfx::Rect new_bounds(
|
| + should_show ? container_->children()[0]->bounds() : gfx::Rect());
|
| +
|
| + FOR_EACH_OBSERVER(
|
| + Observer, observer_list_, OnKeyboardBoundsChanging(new_bounds));
|
| +
|
| + if (should_show)
|
| + container_->Show();
|
| + else
|
| + container_->Hide();
|
| + }
|
| +
|
| // TODO(bryeung): whenever the TextInputClient changes we need to notify the
|
| // keyboard (with the TextInputType) so that it can reset it's state (e.g.
|
| // abandon compositions in progress)
|
|
|