| Index: ash/root_window_controller.cc
|
| diff --git a/ash/root_window_controller.cc b/ash/root_window_controller.cc
|
| index 7f8d41c1ca3f0583471d57ab6b22b76e98e107e9..066f06cd5d8c4057ba3ecca4eb8def828649c16a 100644
|
| --- a/ash/root_window_controller.cc
|
| +++ b/ash/root_window_controller.cc
|
| @@ -331,7 +331,6 @@ void RootWindowController::Init(bool first_run_after_boot) {
|
| CreateSystemBackground(first_run_after_boot);
|
|
|
| InitLayoutManagers();
|
| - InitKeyboard();
|
| InitTouchHuds();
|
|
|
| if (Shell::GetPrimaryRootWindowController()->
|
| @@ -407,6 +406,10 @@ void RootWindowController::OnWallpaperAnimationFinished(views::Widget* widget) {
|
| void RootWindowController::CloseChildWindows() {
|
| mouse_event_target_.reset();
|
|
|
| + // Deactivate keyboard container before closing child windows and shutting
|
| + // down associated layout managers.
|
| + DeactivateKeyboard(Shell::GetInstance()->keyboard_controller());
|
| +
|
| if (!shelf_.get())
|
| return;
|
| // panel_layout_manager_ needs to be shut down before windows are destroyed.
|
| @@ -528,28 +531,39 @@ const aura::Window* RootWindowController::GetTopmostFullscreenWindow() const {
|
| return NULL;
|
| }
|
|
|
| -void RootWindowController::InitKeyboard() {
|
| - if (keyboard::IsKeyboardEnabled()) {
|
| - aura::Window* parent = root_window();
|
| -
|
| - keyboard::KeyboardControllerProxy* proxy =
|
| - Shell::GetInstance()->delegate()->CreateKeyboardControllerProxy();
|
| - keyboard_controller_.reset(
|
| - new keyboard::KeyboardController(proxy));
|
| -
|
| - keyboard_controller_->AddObserver(shelf()->shelf_layout_manager());
|
| - keyboard_controller_->AddObserver(panel_layout_manager_);
|
| - keyboard_controller_->AddObserver(docked_layout_manager_);
|
| -
|
| - // Deletes the old container since |keyboard_controller_| creates a
|
| - // new container window in GetContainerWindow().
|
| - delete GetContainer(kShellWindowId_VirtualKeyboardContainer);
|
| +void RootWindowController::ActivateKeyboard(
|
| + keyboard::KeyboardController* keyboard_controller) {
|
| + if (!keyboard::IsKeyboardEnabled() ||
|
| + GetContainer(kShellWindowId_VirtualKeyboardContainer)) {
|
| + return;
|
| + }
|
| + DCHECK(keyboard_controller);
|
| + keyboard_controller->AddObserver(shelf()->shelf_layout_manager());
|
| + keyboard_controller->AddObserver(panel_layout_manager_);
|
| + keyboard_controller->AddObserver(docked_layout_manager_);
|
| + aura::Window* parent = root_window();
|
| + aura::Window* keyboard_container =
|
| + keyboard_controller->GetContainerWindow();
|
| + keyboard_container->set_id(kShellWindowId_VirtualKeyboardContainer);
|
| + parent->AddChild(keyboard_container);
|
| + // TODO(oshima): Bounds of keyboard container should be handled by
|
| + // RootWindowLayoutManager. Remove this after fixed RootWindowLayoutManager.
|
| + keyboard_container->SetBounds(parent->bounds());
|
| +}
|
| +
|
| +void RootWindowController::DeactivateKeyboard(
|
| + keyboard::KeyboardController* keyboard_controller) {
|
| + if (!keyboard::IsKeyboardEnabled())
|
| + return;
|
|
|
| - aura::Window* keyboard_container =
|
| - keyboard_controller_->GetContainerWindow();
|
| - keyboard_container->set_id(kShellWindowId_VirtualKeyboardContainer);
|
| - parent->AddChild(keyboard_container);
|
| - keyboard_container->SetBounds(parent->bounds());
|
| + DCHECK(keyboard_controller);
|
| + aura::Window* keyboard_container =
|
| + keyboard_controller->GetContainerWindow();
|
| + if (keyboard_container->GetRootWindow() == root_window()) {
|
| + root_window()->RemoveChild(keyboard_container);
|
| + keyboard_controller->RemoveObserver(shelf()->shelf_layout_manager());
|
| + keyboard_controller->RemoveObserver(panel_layout_manager_);
|
| + keyboard_controller->RemoveObserver(docked_layout_manager_);
|
| }
|
| }
|
|
|
| @@ -827,8 +841,6 @@ void RootWindowController::DisableTouchHudProjection() {
|
| }
|
|
|
| void RootWindowController::OnLoginStateChanged(user::LoginStatus status) {
|
| - if (status != user::LOGGED_IN_NONE)
|
| - InitKeyboard();
|
| shelf_->shelf_layout_manager()->UpdateVisibilityState();
|
| }
|
|
|
|
|