Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2305)

Unified Diff: ash/display/display_controller.cc

Issue 10961021: Return primary display if out of bounds point or NULL ponter is passed to gfx::Screen::GeDisplayNea (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix a few other tests that were using native coordinate. it shoud use screen coordinate now. Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ash/display/display_controller.h ('k') | ash/display/display_controller_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ash/display/display_controller.cc
diff --git a/ash/display/display_controller.cc b/ash/display/display_controller.cc
index 102f0d7068605013ea757d92358cf2a02d0e0c4c..d87252dd2ae674a5e21e7e53f0ad99b986f4c472 100644
--- a/ash/display/display_controller.cc
+++ b/ash/display/display_controller.cc
@@ -35,7 +35,7 @@ namespace {
// Primary display stored in global object as it can be
// accessed after Shell is deleted.
-gfx::Display* primary_display = NULL;
+int64 primary_display_id = gfx::Display::kInvalidDisplayID;
// The maximum value for 'offset' in DisplayLayout in case of outliers. Need
// to change this value in case to support even larger displays.
@@ -156,10 +156,9 @@ void DisplayLayout::RegisterJSONConverter(
}
DisplayController::DisplayController() {
- // Reinstantiate display to make sure that tests don't use
+ // Reset primary display to make sure that tests don't use
// stale display info from previous tests.
- delete primary_display;
- primary_display = new gfx::Display();
+ primary_display_id = gfx::Display::kInvalidDisplayID;
GetDisplayManager()->AddObserver(this);
}
@@ -177,9 +176,9 @@ DisplayController::~DisplayController() {
}
}
// static
-gfx::Display DisplayController::GetPrimaryDisplay() {
- DCHECK(primary_display);
- return *primary_display;
+const gfx::Display& DisplayController::GetPrimaryDisplay() {
+ DCHECK_NE(primary_display_id, gfx::Display::kInvalidDisplayID);
+ return GetDisplayManager()->GetDisplayForId(primary_display_id);
}
void DisplayController::InitPrimaryDisplay() {
@@ -203,9 +202,9 @@ void DisplayController::InitPrimaryDisplay() {
}
}
#endif
- *primary_display = *primary_candidate;
- aura::RootWindow* root = AddRootWindowForDisplay(*primary_display);
- root->SetHostBounds(primary_display->bounds_in_pixel());
+ primary_display_id = primary_candidate->id();
+ aura::RootWindow* root = AddRootWindowForDisplay(*primary_candidate);
+ root->SetHostBounds(primary_candidate->bounds_in_pixel());
UpdateDisplayBoundsForLayout();
}
@@ -213,7 +212,7 @@ void DisplayController::InitSecondaryDisplays() {
internal::MultiDisplayManager* display_manager = GetDisplayManager();
for (size_t i = 0; i < display_manager->GetNumDisplays(); ++i) {
const gfx::Display* display = display_manager->GetDisplayAt(i);
- if (primary_display->id() != display->id()) {
+ if (primary_display_id != display->id()) {
aura::RootWindow* root = AddRootWindowForDisplay(*display);
Shell::GetInstance()->InitRootWindowForSecondaryDisplay(root);
}
@@ -249,7 +248,7 @@ void DisplayController::RemoveObserver(Observer* observer) {
aura::RootWindow* DisplayController::GetPrimaryRootWindow() {
DCHECK(!root_windows_.empty());
- return root_windows_[primary_display->id()];
+ return root_windows_[primary_display_id];
}
aura::RootWindow* DisplayController::GetRootWindowForDisplayId(int64 id) {
@@ -351,7 +350,7 @@ void DisplayController::SetPrimaryDisplay(
return;
}
- if (primary_display->id() == new_primary_display.id() ||
+ if (primary_display_id == new_primary_display.id() ||
root_windows_.size() < 2) {
return;
}
@@ -363,10 +362,10 @@ void DisplayController::SetPrimaryDisplay(
if (!non_primary_root)
return;
- gfx::Display old_primary_display = *primary_display;
+ gfx::Display old_primary_display = GetPrimaryDisplay();
// Swap root windows between current and new primary display.
- aura::RootWindow* primary_root = root_windows_[primary_display->id()];
+ aura::RootWindow* primary_root = root_windows_[primary_display_id];
DCHECK(primary_root);
DCHECK_NE(primary_root, non_primary_root);
@@ -377,7 +376,7 @@ void DisplayController::SetPrimaryDisplay(
non_primary_root->SetProperty(internal::kDisplayIdKey,
old_primary_display.id());
- *primary_display = new_primary_display;
+ primary_display_id = new_primary_display.id();
// Update the layout.
SetLayoutForDisplayName(
@@ -386,7 +385,7 @@ void DisplayController::SetPrimaryDisplay(
// Update the dispay manager with new display info.
std::vector<gfx::Display> displays;
- displays.push_back(*primary_display);
+ displays.push_back(GetDisplayManager()->GetDisplayForId(primary_display_id));
displays.push_back(*GetSecondaryDisplay());
GetDisplayManager()->set_force_bounds_changed(true);
GetDisplayManager()->OnNativeDisplaysChanged(displays);
@@ -396,13 +395,11 @@ void DisplayController::SetPrimaryDisplay(
gfx::Display* DisplayController::GetSecondaryDisplay() {
internal::MultiDisplayManager* display_manager = GetDisplayManager();
CHECK_EQ(2U, display_manager->GetNumDisplays());
- return display_manager->GetDisplayAt(0)->id() == primary_display->id() ?
+ return display_manager->GetDisplayAt(0)->id() == primary_display_id ?
display_manager->GetDisplayAt(1) : display_manager->GetDisplayAt(0);
}
void DisplayController::OnDisplayBoundsChanged(const gfx::Display& display) {
- if (display.id() == primary_display->id())
- *primary_display = display;
NotifyDisplayConfigurationChanging();
UpdateDisplayBoundsForLayout();
root_windows_[display.id()]->SetHostBounds(display.bounds_in_pixel());
@@ -427,20 +424,21 @@ void DisplayController::OnDisplayRemoved(const gfx::Display& display) {
// When the primary root window's display is removed, move the primary
// root to the other display.
- if (primary_display->id() == display.id()) {
+ if (primary_display_id == display.id()) {
DCHECK_EQ(1U, root_windows_.size());
- *primary_display = *GetSecondaryDisplay();
+ primary_display_id = GetSecondaryDisplay()->id();
aura::RootWindow* primary_root = root_to_delete;
// Delete the other root instead.
- root_to_delete = root_windows_[primary_display->id()];
+ root_to_delete = root_windows_[primary_display_id];
root_to_delete->SetProperty(internal::kDisplayIdKey, display.id());
// Setup primary root.
- root_windows_[primary_display->id()] = primary_root;
- primary_root->SetProperty(internal::kDisplayIdKey, primary_display->id());
+ root_windows_[primary_display_id] = primary_root;
+ primary_root->SetProperty(internal::kDisplayIdKey, primary_display_id);
- OnDisplayBoundsChanged(*primary_display);
+ OnDisplayBoundsChanged(
+ GetDisplayManager()->GetDisplayForId(primary_display_id));
}
internal::RootWindowController* controller =
GetRootWindowController(root_to_delete);
@@ -473,7 +471,7 @@ void DisplayController::UpdateDisplayBoundsForLayout() {
return;
DCHECK_EQ(2, gfx::Screen::GetNumDisplays());
- const gfx::Rect& primary_bounds = primary_display->bounds();
+ const gfx::Rect& primary_bounds = GetPrimaryDisplay().bounds();
gfx::Display* secondary_display = GetSecondaryDisplay();
const gfx::Rect& secondary_bounds = secondary_display->bounds();
« no previous file with comments | « ash/display/display_controller.h ('k') | ash/display/display_controller_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698