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 |