| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ash/display/virtual_keyboard_window_controller.h" | 5 #include "ash/display/virtual_keyboard_window_controller.h" |
| 6 | 6 |
| 7 #include "ash/display/display_controller.h" | 7 #include "ash/display/display_controller.h" |
| 8 #include "ash/display/display_info.h" | 8 #include "ash/display/display_info.h" |
| 9 #include "ash/display/display_manager.h" | 9 #include "ash/display/display_manager.h" |
| 10 #include "ash/display/root_window_transformers.h" | 10 #include "ash/display/root_window_transformers.h" |
| 11 #include "ash/host/window_tree_host_factory.h" | 11 #include "ash/host/ash_window_tree_host.h" |
| 12 #include "ash/host/root_window_transformer.h" |
| 12 #include "ash/root_window_controller.h" | 13 #include "ash/root_window_controller.h" |
| 13 #include "ash/root_window_settings.h" | 14 #include "ash/root_window_settings.h" |
| 14 #include "ash/shell.h" | 15 #include "ash/shell.h" |
| 15 #include "ash/shell_window_ids.h" | 16 #include "ash/shell_window_ids.h" |
| 16 #include "base/strings/stringprintf.h" | 17 #include "base/strings/stringprintf.h" |
| 17 #include "base/strings/utf_string_conversions.h" | 18 #include "base/strings/utf_string_conversions.h" |
| 18 #include "ui/aura/env.h" | 19 #include "ui/aura/env.h" |
| 19 #include "ui/aura/root_window_transformer.h" | |
| 20 #include "ui/aura/window_event_dispatcher.h" | 20 #include "ui/aura/window_event_dispatcher.h" |
| 21 #include "ui/keyboard/keyboard_controller.h" | 21 #include "ui/keyboard/keyboard_controller.h" |
| 22 #include "ui/keyboard/keyboard_util.h" | 22 #include "ui/keyboard/keyboard_util.h" |
| 23 | 23 |
| 24 namespace ash { | 24 namespace ash { |
| 25 | 25 |
| 26 VirtualKeyboardWindowController::VirtualKeyboardWindowController() { | 26 VirtualKeyboardWindowController::VirtualKeyboardWindowController() { |
| 27 Shell::GetInstance()->AddShellObserver(this); | 27 Shell::GetInstance()->AddShellObserver(this); |
| 28 } | 28 } |
| 29 | 29 |
| 30 VirtualKeyboardWindowController::~VirtualKeyboardWindowController() { | 30 VirtualKeyboardWindowController::~VirtualKeyboardWindowController() { |
| 31 Shell::GetInstance()->RemoveShellObserver(this); | 31 Shell::GetInstance()->RemoveShellObserver(this); |
| 32 // Make sure the root window gets deleted before cursor_window_delegate. | 32 // Make sure the root window gets deleted before cursor_window_delegate. |
| 33 Close(); | 33 Close(); |
| 34 } | 34 } |
| 35 | 35 |
| 36 void VirtualKeyboardWindowController::ActivateKeyboard( | 36 void VirtualKeyboardWindowController::ActivateKeyboard( |
| 37 keyboard::KeyboardController* keyboard_controller) { | 37 keyboard::KeyboardController* keyboard_controller) { |
| 38 root_window_controller_->ActivateKeyboard(keyboard_controller); | 38 root_window_controller_->ActivateKeyboard(keyboard_controller); |
| 39 } | 39 } |
| 40 | 40 |
| 41 void VirtualKeyboardWindowController::UpdateWindow( | 41 void VirtualKeyboardWindowController::UpdateWindow( |
| 42 const DisplayInfo& display_info) { | 42 const DisplayInfo& display_info) { |
| 43 static int virtual_keyboard_host_count = 0; | 43 static int virtual_keyboard_host_count = 0; |
| 44 if (!root_window_controller_.get()) { | 44 if (!root_window_controller_.get()) { |
| 45 const gfx::Rect& bounds_in_native = display_info.bounds_in_native(); | 45 const gfx::Rect& bounds_in_native = display_info.bounds_in_native(); |
| 46 aura::WindowTreeHost* host = | 46 AshWindowTreeHost* ash_host = AshWindowTreeHost::Create(bounds_in_native); |
| 47 Shell::GetInstance()->window_tree_host_factory()->CreateWindowTreeHost( | 47 aura::WindowTreeHost* host = ash_host->AsWindowTreeHost(); |
| 48 bounds_in_native); | 48 |
| 49 host->window()->SetName( | 49 host->window()->SetName(base::StringPrintf("VirtualKeyboardRootWindow-%d", |
| 50 base::StringPrintf("VirtualKeyboardRootWindow-%d", | 50 virtual_keyboard_host_count++)); |
| 51 virtual_keyboard_host_count++)); | |
| 52 | 51 |
| 53 // No need to remove WindowTreeHostObserver because the DisplayController | 52 // No need to remove WindowTreeHostObserver because the DisplayController |
| 54 // outlives the host. | 53 // outlives the host. |
| 55 host->AddObserver(Shell::GetInstance()->display_controller()); | 54 host->AddObserver(Shell::GetInstance()->display_controller()); |
| 56 InitRootWindowSettings(host->window())->display_id = display_info.id(); | 55 InitRootWindowSettings(host->window())->display_id = display_info.id(); |
| 57 host->InitHost(); | 56 host->InitHost(); |
| 58 RootWindowController::CreateForVirtualKeyboardDisplay(host); | 57 RootWindowController::CreateForVirtualKeyboardDisplay(ash_host); |
| 59 root_window_controller_.reset(GetRootWindowController(host->window())); | 58 root_window_controller_.reset(GetRootWindowController(host->window())); |
| 60 root_window_controller_->host()->Show(); | 59 root_window_controller_->GetHost()->Show(); |
| 61 root_window_controller_->ActivateKeyboard( | 60 root_window_controller_->ActivateKeyboard( |
| 62 keyboard::KeyboardController::GetInstance()); | 61 keyboard::KeyboardController::GetInstance()); |
| 63 FlipDisplay(); | 62 FlipDisplay(); |
| 64 } else { | 63 } else { |
| 65 aura::WindowTreeHost* host = root_window_controller_->host(); | 64 aura::WindowTreeHost* host = root_window_controller_->GetHost(); |
| 66 GetRootWindowSettings(host->window())->display_id = display_info.id(); | 65 GetRootWindowSettings(host->window())->display_id = display_info.id(); |
| 67 host->SetBounds(display_info.bounds_in_native()); | 66 host->SetBounds(display_info.bounds_in_native()); |
| 68 } | 67 } |
| 69 } | 68 } |
| 70 | 69 |
| 71 void VirtualKeyboardWindowController::Close() { | 70 void VirtualKeyboardWindowController::Close() { |
| 72 if (root_window_controller_.get()) { | 71 if (root_window_controller_.get()) { |
| 73 root_window_controller_->host()->RemoveObserver( | 72 root_window_controller_->GetHost()->RemoveObserver( |
| 74 Shell::GetInstance()->display_controller()); | 73 Shell::GetInstance()->display_controller()); |
| 75 root_window_controller_->Shutdown(); | 74 root_window_controller_->Shutdown(); |
| 76 root_window_controller_.reset(); | 75 root_window_controller_.reset(); |
| 77 } | 76 } |
| 78 } | 77 } |
| 79 | 78 |
| 80 void VirtualKeyboardWindowController::FlipDisplay() { | 79 void VirtualKeyboardWindowController::FlipDisplay() { |
| 81 DisplayManager* display_manager = Shell::GetInstance()->display_manager(); | 80 DisplayManager* display_manager = Shell::GetInstance()->display_manager(); |
| 82 if (!display_manager->virtual_keyboard_root_window_enabled()) { | 81 if (!display_manager->virtual_keyboard_root_window_enabled()) { |
| 83 NOTREACHED() << "Attempting to flip virtual keyboard root window when it " | 82 NOTREACHED() << "Attempting to flip virtual keyboard root window when it " |
| 84 << "is not enabled."; | 83 << "is not enabled."; |
| 85 return; | 84 return; |
| 86 } | 85 } |
| 87 display_manager->SetDisplayRotation( | 86 display_manager->SetDisplayRotation( |
| 88 display_manager->non_desktop_display().id(), gfx::Display::ROTATE_180); | 87 display_manager->non_desktop_display().id(), gfx::Display::ROTATE_180); |
| 89 | 88 |
| 90 aura::WindowTreeHost* host = root_window_controller_->host(); | 89 aura::WindowTreeHost* host = root_window_controller_->GetHost(); |
| 91 scoped_ptr<aura::RootWindowTransformer> transformer( | 90 scoped_ptr<RootWindowTransformer> transformer( |
| 92 CreateRootWindowTransformerForDisplay( | 91 CreateRootWindowTransformerForDisplay( |
| 93 host->window(), display_manager->non_desktop_display())); | 92 host->window(), display_manager->non_desktop_display())); |
| 94 host->SetRootWindowTransformer(transformer.Pass()); | 93 root_window_controller_->ash_host()->SetRootWindowTransformer( |
| 94 transformer.Pass()); |
| 95 } | 95 } |
| 96 | 96 |
| 97 void VirtualKeyboardWindowController::OnMaximizeModeStarted() { | 97 void VirtualKeyboardWindowController::OnMaximizeModeStarted() { |
| 98 keyboard::SetTouchKeyboardEnabled(true); | 98 keyboard::SetTouchKeyboardEnabled(true); |
| 99 Shell::GetInstance()->CreateKeyboard(); | 99 Shell::GetInstance()->CreateKeyboard(); |
| 100 } | 100 } |
| 101 | 101 |
| 102 void VirtualKeyboardWindowController::OnMaximizeModeEnded() { | 102 void VirtualKeyboardWindowController::OnMaximizeModeEnded() { |
| 103 keyboard::SetTouchKeyboardEnabled(false); | 103 keyboard::SetTouchKeyboardEnabled(false); |
| 104 if (!keyboard::IsKeyboardEnabled()) | 104 if (!keyboard::IsKeyboardEnabled()) |
| 105 Shell::GetInstance()->DeactivateKeyboard(); | 105 Shell::GetInstance()->DeactivateKeyboard(); |
| 106 } | 106 } |
| 107 | 107 |
| 108 } // namespace ash | 108 } // namespace ash |
| OLD | NEW |