Index: ash/shell.cc |
diff --git a/ash/shell.cc b/ash/shell.cc |
index 7e2b62308c78289a09b310101d201fc18f94eeee..67340198fe8d62ee785108eb5da56999d832902a 100644 |
--- a/ash/shell.cc |
+++ b/ash/shell.cc |
@@ -23,6 +23,7 @@ |
#include "ash/display/mouse_cursor_event_filter.h" |
#include "ash/display/resolution_notification_controller.h" |
#include "ash/display/screen_position_controller.h" |
+#include "ash/display/virtual_keyboard_window_controller.h" |
#include "ash/drag_drop/drag_drop_controller.h" |
#include "ash/first_run/first_run_helper_impl.h" |
#include "ash/focus_cycler.h" |
@@ -336,16 +337,14 @@ void Shell::SetDisplayWorkAreaInsets(Window* contains, |
} |
void Shell::OnLoginStateChanged(user::LoginStatus status) { |
- if (status != user::LOGGED_IN_NONE) { |
- // TODO(bshe): Primary root window controller may not be the controller to |
- // attach virtual keyboard. See http://crbug.com/303429 |
- InitKeyboard(GetPrimaryRootWindowController()); |
- GetPrimaryRootWindowController()->ActivateKeyboard( |
- keyboard_controller_.get()); |
- } |
FOR_EACH_OBSERVER(ShellObserver, observers_, OnLoginStateChanged(status)); |
} |
+void Shell::OnLoginUserProfilePrepared() { |
+ CreateLauncher(); |
+ CreateKeyboard(); |
+} |
+ |
void Shell::UpdateAfterLoginStatusChange(user::LoginStatus status) { |
RootWindowControllerList controllers = GetAllRootWindowControllers(); |
for (RootWindowControllerList::iterator iter = controllers.begin(); |
@@ -380,6 +379,19 @@ void Shell::CreateLauncher() { |
(*iter)->shelf()->CreateLauncher(); |
} |
+void Shell::CreateKeyboard() { |
+ // TODO(bshe): Primary root window controller may not be the controller to |
+ // attach virtual keyboard. See http://crbug.com/303429 |
+ InitKeyboard(); |
+ if (keyboard::IsKeyboardUsabilityExperimentEnabled()) { |
+ display_controller()->virtual_keyboard_window_controller()-> |
+ ActivateKeyboard(keyboard_controller_.get()); |
+ } else { |
+ GetPrimaryRootWindowController()-> |
+ ActivateKeyboard(keyboard_controller_.get()); |
+ } |
+} |
+ |
void Shell::ShowLauncher() { |
RootWindowControllerList controllers = GetAllRootWindowControllers(); |
for (RootWindowControllerList::iterator iter = controllers.begin(); |
@@ -618,6 +630,7 @@ Shell::~Shell() { |
// Destroy all child windows including widgets. |
display_controller_->CloseChildWindows(); |
+ display_controller_->CloseNonDesktopDisplay(); |
// Destroy SystemTrayNotifier after destroying SystemTray as TrayItems |
// needs to remove observers from it. |
@@ -692,7 +705,7 @@ void Shell::Init() { |
CommandLine* command_line = CommandLine::ForCurrentProcess(); |
delegate_->PreInit(); |
- if (command_line->HasSwitch(keyboard::switches::kKeyboardUsabilityTest)) { |
+ if (keyboard::IsKeyboardUsabilityExperimentEnabled()) { |
display_manager_->SetSecondDisplayMode( |
internal::DisplayManager::VIRTUAL_KEYBOARD); |
} |
@@ -915,7 +928,7 @@ void Shell::Init() { |
weak_display_manager_factory_->GetWeakPtr())); |
} |
-void Shell::InitKeyboard(internal::RootWindowController* root) { |
+void Shell::InitKeyboard() { |
if (keyboard::IsKeyboardEnabled()) { |
if (keyboard_controller_.get()) { |
RootWindowControllerList controllers = GetAllRootWindowControllers(); |