Chromium Code Reviews| Index: ash/display/multi_display_manager.cc |
| diff --git a/ash/display/multi_display_manager.cc b/ash/display/multi_display_manager.cc |
| index 246e0b844c0b2f79da0f93d02772126ff3e92422..15d572e0eae15bcfb2532b7197aabe6e3a8fa63a 100644 |
| --- a/ash/display/multi_display_manager.cc |
| +++ b/ash/display/multi_display_manager.cc |
| @@ -129,6 +129,16 @@ bool MultiDisplayManager::UpdateWorkAreaOfDisplayNearestWindow( |
| return old_work_area != display.work_area(); |
| } |
| +std::vector<std::string> MultiDisplayManager::GetExternalDisplayNames() const { |
| + std::vector<std::string> result; |
| + for (std::map<int64, std::string>::const_iterator iter = |
| + display_names_.begin(); iter != display_names_.end(); ++iter) { |
| + result.push_back(iter->second); |
| + } |
| + |
| + return result; |
| +} |
| + |
| const gfx::Display& MultiDisplayManager::GetDisplayForId(int64 id) const { |
| return const_cast<MultiDisplayManager*>(this)->FindDisplayForId(id); |
| } |
| @@ -283,6 +293,8 @@ void MultiDisplayManager::OnNativeDisplaysChanged( |
| } |
| displays_ = new_displays; |
| + RefreshDisplayNames(); |
| + |
| // Temporarily add displays to be removed because display object |
| // being removed are accessed during shutting down the root. |
| displays_.insert(displays_.end(), removed_displays.begin(), |
| @@ -379,23 +391,11 @@ std::string MultiDisplayManager::GetDisplayNameFor( |
| bundle.GetLocalizedString(IDS_ASH_INTERNAL_DISPLAY_NAME)); |
| } |
| -#if defined(USE_X11) |
| - std::vector<XID> outputs; |
| - if (display.id() != gfx::Display::kInvalidDisplayID && |
| - ui::GetOutputDeviceHandles(&outputs)) { |
| - for (size_t i = 0; i < outputs.size(); ++i) { |
| - uint16 manufacturer_id = 0; |
| - uint32 serial_number = 0; |
| - std::string name; |
| - if (ui::GetOutputDeviceData( |
| - outputs[i], &manufacturer_id, &serial_number, &name) && |
| - display.id() == |
| - gfx::Display::GetID(manufacturer_id, serial_number)) { |
| - return name; |
| - } |
| - } |
| - } |
| -#endif |
| + std::map<int64, std::string>::const_iterator iter = |
| + display_names_.find(display.id()); |
| + if (iter != display_names_.end()) |
| + return iter->second; |
| + |
| return base::StringPrintf("Display %d", static_cast<int>(display.id())); |
| } |
| @@ -426,6 +426,8 @@ void MultiDisplayManager::Init() { |
| } |
| #endif |
| + RefreshDisplayNames(); |
| + |
| #if defined(OS_WIN) |
| if (base::win::GetVersion() >= base::win::VERSION_WIN8) |
| set_use_fullscreen_host_window(true); |
| @@ -543,6 +545,32 @@ void MultiDisplayManager::EnsurePointerInDisplays() { |
| root_window->MoveCursorTo(target_location); |
| } |
| +void MultiDisplayManager::RefreshDisplayNames() { |
| + display_names_.clear(); |
| + |
| + if (!base::chromeos::IsRunningOnChromeOS()) |
| + return; |
| + |
| +#if defined(USE_X11) |
| + std::vector<XID> outputs; |
| + std::string result; |
|
oshima
2012/11/02 06:33:56
this isn't used?
Jun Mukai
2012/11/02 16:09:07
Done.
|
| + if (!ui::GetOutputDeviceHandles(&outputs)) |
| + return; |
| + |
| + for (size_t i = 0; i < outputs.size(); ++i) { |
| + uint16 manufacturer_id = 0; |
| + uint32 serial_number = 0; |
| + std::string name; |
| + if (ui::GetOutputDeviceData( |
| + outputs[i], &manufacturer_id, &serial_number, &name)) { |
| + int64 id = gfx::Display::GetID(manufacturer_id, serial_number); |
| + if (!HasInternalDisplay() || !IsInternalDisplayId(id)) |
|
oshima
2012/11/02 06:33:56
is it simpler to set inernal display's name here r
Jun Mukai
2012/11/02 16:09:07
Done.
|
| + display_names_[id] = name; |
| + } |
| + } |
| +#endif |
| +} |
| + |
| void MultiDisplayManager::SetDisplayIdsForTest(DisplayList* to_update) const { |
| DisplayList::iterator iter_to_update = to_update->begin(); |
| DisplayList::const_iterator iter = displays_.begin(); |