Index: ui/keyboard/keyboard_controller.cc |
diff --git a/ui/keyboard/keyboard_controller.cc b/ui/keyboard/keyboard_controller.cc |
index 17f4fddd8c8ac95ccdf57e0a0bdd29fcf4174f80..9bb7fb44aa3dde1d9a11b1a24c589b3794a45bdf 100644 |
--- a/ui/keyboard/keyboard_controller.cc |
+++ b/ui/keyboard/keyboard_controller.cc |
@@ -142,45 +142,19 @@ aura::Window* KeyboardController::GetContainerWindow() { |
return container_; |
} |
-void KeyboardController::AddObserver(KeyboardControllerObserver* observer) { |
- observer_list_.AddObserver(observer); |
-} |
- |
-void KeyboardController::RemoveObserver(KeyboardControllerObserver* observer) { |
- observer_list_.RemoveObserver(observer); |
-} |
- |
-void KeyboardController::OnWindowParentChanged(aura::Window* window, |
- aura::Window* parent) { |
- OnTextInputStateChanged(proxy_->GetInputMethod()->GetTextInputClient()); |
-} |
- |
-void KeyboardController::OnWindowDestroying(aura::Window* window) { |
- DCHECK_EQ(container_, window); |
- container_ = NULL; |
-} |
- |
-void KeyboardController::OnTextInputStateChanged( |
- const ui::TextInputClient* client) { |
+void KeyboardController::SetKeyboardVisibility(bool should_show) { |
if (!container_) |
return; |
bool was_showing = container_->IsVisible(); |
- bool should_show = was_showing; |
- if (!client || client->GetTextInputType() == ui::TEXT_INPUT_TYPE_NONE) { |
- should_show = false; |
- } else { |
- if (container_->children().empty()) { |
+ if (was_showing != should_show) { |
+ if (should_show && container_->children().empty()) { |
aura::Window* keyboard = proxy_->GetKeyboardWindow(); |
keyboard->Show(); |
container_->AddChild(keyboard); |
container_->layout_manager()->OnWindowResized(); |
} |
- container_->parent()->StackChildAtTop(container_); |
- should_show = true; |
- } |
- if (was_showing != should_show) { |
gfx::Rect new_bounds( |
should_show ? container_->children()[0]->bounds() : gfx::Rect()); |
@@ -189,13 +163,39 @@ void KeyboardController::OnTextInputStateChanged( |
observer_list_, |
OnKeyboardBoundsChanging(new_bounds)); |
- if (should_show) |
+ if (should_show) { |
+ container_->parent()->StackChildAtTop(container_); |
container_->Show(); |
- else |
+ } else { |
container_->Hide(); |
bryeung
2013/04/30 20:21:03
directly hiding the keyboard from JS seems to caus
sadrul
2013/05/14 06:23:19
Animation in the page itself should not be causing
|
+ } |
proxy_->OnKeyboardBoundsChanged(new_bounds); |
} |
+} |
+ |
+void KeyboardController::AddObserver(KeyboardControllerObserver* observer) { |
+ observer_list_.AddObserver(observer); |
+} |
+ |
+void KeyboardController::RemoveObserver(KeyboardControllerObserver* observer) { |
+ observer_list_.RemoveObserver(observer); |
+} |
+ |
+void KeyboardController::OnWindowParentChanged(aura::Window* window, |
+ aura::Window* parent) { |
+ OnTextInputStateChanged(proxy_->GetInputMethod()->GetTextInputClient()); |
+} |
+ |
+void KeyboardController::OnWindowDestroying(aura::Window* window) { |
+ DCHECK_EQ(container_, window); |
+ container_ = NULL; |
+} |
+ |
+void KeyboardController::OnTextInputStateChanged( |
+ const ui::TextInputClient* client) { |
+ SetKeyboardVisibility( |
+ (client && client->GetTextInputType() != ui::TEXT_INPUT_TYPE_NONE)); |
// 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. |