Index: ash/display/multi_display_manager.cc |
diff --git a/ash/display/multi_display_manager.cc b/ash/display/multi_display_manager.cc |
index aba85f02e5af38321ebd2485eeec50d0a70b6d03..e09abd84a04f1c98ea7ddf490cb9d3eaa0827e5a 100644 |
--- a/ash/display/multi_display_manager.cc |
+++ b/ash/display/multi_display_manager.cc |
@@ -126,13 +126,7 @@ bool MultiDisplayManager::UpdateWorkAreaOfDisplayNearestWindow( |
} |
const gfx::Display& MultiDisplayManager::GetDisplayForId(int64 id) const { |
- for (DisplayList::const_iterator iter = displays_.begin(); |
- iter != displays_.end(); ++iter) { |
- if ((*iter).id() == id) |
- return *iter; |
- } |
- VLOG(1) << "display not found for id:" << id; |
- return GetInvalidDisplay(); |
+ return const_cast<MultiDisplayManager*>(this)->FindDisplayForId(id); |
} |
const gfx::Display& MultiDisplayManager::FindDisplayContainingPoint( |
@@ -148,6 +142,18 @@ const gfx::Display& MultiDisplayManager::FindDisplayContainingPoint( |
void MultiDisplayManager::SetOverscanInsets(int64 display_id, |
const gfx::Insets& insets_in_dip) { |
+ std::map<int64, gfx::Insets>::const_iterator old_overscan = |
+ overscan_mapping_.find(display_id); |
+ if (old_overscan != overscan_mapping_.end()) { |
+ gfx::Insets old_insets = old_overscan->second; |
+ gfx::Display& display = FindDisplayForId(display_id); |
+ if (display.is_valid()) { |
+ // Undo the existing insets before applying the new insets. |
+ gfx::Rect bounds = display.bounds_in_pixel(); |
+ bounds.Inset(old_insets.Scale(-display.device_scale_factor())); |
+ display.SetScaleAndBounds(display.device_scale_factor(), bounds); |
+ } |
+ } |
overscan_mapping_[display_id] = insets_in_dip; |
OnNativeDisplaysChanged(displays_); |
} |
@@ -437,7 +443,9 @@ gfx::Display& MultiDisplayManager::FindDisplayForRootWindow( |
int64 id = root_window->GetProperty(kDisplayIdKey); |
// if id is |kInvaildDisplayID|, it's being deleted. |
DCHECK(id != gfx::Display::kInvalidDisplayID); |
- return FindDisplayForId(id); |
+ gfx::Display& display = FindDisplayForId(id); |
+ DCHECK(display.is_valid()); |
+ return display; |
} |
gfx::Display& MultiDisplayManager::FindDisplayForId(int64 id) { |
@@ -446,7 +454,7 @@ gfx::Display& MultiDisplayManager::FindDisplayForId(int64 id) { |
if ((*iter).id() == id) |
return *iter; |
} |
- DLOG(FATAL) << "Could not find display:" << id; |
+ DLOG(WARNING) << "Could not find display:" << id; |
return GetInvalidDisplay(); |
} |