Chromium Code Reviews| Index: ash/display/display_controller.cc |
| diff --git a/ash/display/display_controller.cc b/ash/display/display_controller.cc |
| index 7b7cc5882e5592a336e718a28d2fa3c442bb5215..61f4df02f26fe13e0efb2545d1013daa0f39162b 100644 |
| --- a/ash/display/display_controller.cc |
| +++ b/ash/display/display_controller.cc |
| @@ -9,6 +9,7 @@ |
| #include <map> |
| #include "ash/ash_switches.h" |
| +#include "ash/display/cursor_window_controller.h" |
| #include "ash/display/display_layout_store.h" |
| #include "ash/display/display_manager.h" |
| #include "ash/display/mirror_window_controller.h" |
| @@ -20,6 +21,7 @@ |
| #include "ash/screen_util.h" |
| #include "ash/shell.h" |
| #include "ash/shell_delegate.h" |
| +#include "ash/shell_window_ids.h" |
| #include "ash/wm/coordinate_conversion.h" |
| #include "base/command_line.h" |
| #include "base/strings/stringprintf.h" |
| @@ -216,7 +218,8 @@ bool DisplayController::DisplayChangeLimiter::IsThrottled() const { |
| DisplayController::DisplayController() |
| : primary_root_window_for_replace_(NULL), |
| focus_activation_store_(new internal::FocusActivationStore()), |
| - mirror_window_controller_(new internal::MirrorWindowController), |
| + cursor_window_controller_(new internal::CursorWindowController()), |
| + mirror_window_controller_(new internal::MirrorWindowController()), |
| virtual_keyboard_window_controller_( |
| new internal::VirtualKeyboardWindowController) { |
| #if defined(OS_CHROMEOS) |
| @@ -249,6 +252,7 @@ void DisplayController::Shutdown() { |
| // DisplayManager outlives DisplayController. |
| Shell::GetInstance()->display_manager()->set_delegate(NULL); |
| + cursor_window_controller_.reset(); |
| mirror_window_controller_.reset(); |
| virtual_keyboard_window_controller_.reset(); |
| @@ -400,6 +404,25 @@ void DisplayController::SwapPrimaryDisplay() { |
| } |
| } |
| +void DisplayController::SetCursorCompositingEnabled(bool enabled) { |
| +#if defined(OS_CHROMEOS) && defined(USE_X11) |
| + if (cursor_window_controller_->is_cursor_compositing_enabled() != enabled) { |
| + cursor_window_controller_->SetCursorCompositingEnabled(enabled); |
| + UpdateCursorWindowContainer(); |
| + } |
| +#endif |
| +} |
| + |
| +void DisplayController::SetDisplayForCursor(const gfx::Display& display) { |
|
oshima
2014/02/05 23:43:39
Can you move this method to CursorWindowController
hshi1
2014/02/06 00:48:44
Done.
|
| + if (!cursor_window_controller_->is_cursor_compositing_enabled()) |
| + return; |
| + |
| + cursor_window_controller_->SetContainer( |
| + internal::GetRootWindowController(root_windows_[display.id()])-> |
| + GetContainer(internal::kShellWindowId_OverlayContainer)); |
| + cursor_window_controller_->SetBoundsInScreen(display.bounds()); |
| +} |
| + |
| void DisplayController::SetPrimaryDisplayId(int64 id) { |
| DCHECK_NE(gfx::Display::kInvalidDisplayID, id); |
| if (id == gfx::Display::kInvalidDisplayID || primary_display_id == id) |
| @@ -613,6 +636,7 @@ void DisplayController::OnWindowTreeHostResized(const aura::RootWindow* root) { |
| display.id(), |
| root->host()->GetBounds())) { |
| mirror_window_controller_->UpdateWindow(); |
| + UpdateCursorWindowContainer(); |
| } |
| } |
| @@ -622,10 +646,12 @@ void DisplayController::CreateOrUpdateNonDesktopDisplay( |
| case internal::DisplayManager::MIRRORING: |
| mirror_window_controller_->UpdateWindow(info); |
| virtual_keyboard_window_controller_->Close(); |
| + UpdateCursorWindowContainer(); |
| break; |
| case internal::DisplayManager::VIRTUAL_KEYBOARD: |
| mirror_window_controller_->Close(); |
| virtual_keyboard_window_controller_->UpdateWindow(info); |
| + UpdateCursorWindowContainer(); |
| break; |
| case internal::DisplayManager::EXTENDED: |
| NOTREACHED(); |
| @@ -635,6 +661,7 @@ void DisplayController::CreateOrUpdateNonDesktopDisplay( |
| void DisplayController::CloseNonDesktopDisplay() { |
| mirror_window_controller_->Close(); |
| virtual_keyboard_window_controller_->Close(); |
| + UpdateCursorWindowContainer(); |
| } |
| void DisplayController::PreDisplayConfigurationChange(bool clear_focus) { |
| @@ -741,4 +768,19 @@ void DisplayController::UpdateHostWindowNames() { |
| #endif |
| } |
| +void DisplayController::UpdateCursorWindowContainer() { |
| +#if defined(OS_CHROMEOS) && defined(USE_X11) |
| + if (cursor_window_controller_->is_cursor_compositing_enabled()) { |
| + cursor_window_controller_->SetContainer( |
| + Shell::GetPrimaryRootWindowController()->GetContainer( |
| + internal::kShellWindowId_OverlayContainer)); |
| + } else { |
| + aura::RootWindow* mirror_root_window = |
| + mirror_window_controller_->root_window(); |
| + cursor_window_controller_->SetContainer( |
| + mirror_root_window ? mirror_root_window->window() : NULL); |
| + } |
| +#endif |
|
oshima
2014/02/05 23:43:39
Can this be in CursorWindowController too?
hshi1
2014/02/06 00:48:44
Done.
|
| +} |
| + |
| } // namespace ash |