diff options
author | mukai@chromium.org <mukai@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-11-05 22:40:45 +0000 |
---|---|---|
committer | mukai@chromium.org <mukai@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-11-05 22:40:45 +0000 |
commit | 4d90a9aedf5f388bf5a9d6e4f6b39b88f62ca548 (patch) | |
tree | cc6e980ff40d980d3a08f2793312ba5bfb844c32 /ash/system | |
parent | 7714ad07dc2f4b7aa7c41861e84d04b77cd4bc94 (diff) | |
download | chromium_src-4d90a9aedf5f388bf5a9d6e4f6b39b88f62ca548.zip chromium_src-4d90a9aedf5f388bf5a9d6e4f6b39b88f62ca548.tar.gz chromium_src-4d90a9aedf5f388bf5a9d6e4f6b39b88f62ca548.tar.bz2 |
Caches the display names in MultiDisplayManager (2nd)
Previous one was reverted due to a build error on win_aura. IsRunningOnChromeOS is ChromeOS-only function so has to be guarded.
BUG=159034
TBR=derat@chromium.org
Review URL: https://codereview.chromium.org/11312078
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@166057 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ash/system')
-rw-r--r-- | ash/system/chromeos/tray_display.cc | 61 |
1 files changed, 30 insertions, 31 deletions
diff --git a/ash/system/chromeos/tray_display.cc b/ash/system/chromeos/tray_display.cc index 0e672d1..6c09ddfc 100644 --- a/ash/system/chromeos/tray_display.cc +++ b/ash/system/chromeos/tray_display.cc @@ -5,6 +5,7 @@ #include "ash/system/chromeos/tray_display.h" #include "ash/display/display_controller.h" +#include "ash/display/multi_display_manager.h" #include "ash/screen_ash.h" #include "ash/shell.h" #include "ash/system/tray/system_tray.h" @@ -23,10 +24,6 @@ #include "ui/views/controls/label.h" #include "ui/views/layout/box_layout.h" -#if defined(USE_X11) -#include "ui/base/x/x11_util.h" -#endif - namespace ash { namespace internal { @@ -60,37 +57,16 @@ class DisplayView : public ash::internal::ActionableView { SetVisible(false); return; case chromeos::STATE_DUAL_MIRROR: { - // Simply assumes that the primary display appears first and the - // secondary display appears next in the list. - std::vector<std::string> display_names; -#if defined(USE_X11) - std::vector<XID> output_ids; - ui::GetOutputDeviceHandles(&output_ids); - display_names = ui::GetDisplayNames(output_ids); -#endif - if (display_names.size() > 1) { - label_->SetText(l10n_util::GetStringFUTF16( - IDS_ASH_STATUS_TRAY_DISPLAY_MIRRORING, - UTF8ToUTF16(display_names[1]))); - SetVisible(true); - } else { - SetVisible(false); - } + label_->SetText(l10n_util::GetStringFUTF16( + IDS_ASH_STATUS_TRAY_DISPLAY_MIRRORING, GetExternalDisplayName())); + SetVisible(true); return; } case chromeos::STATE_DUAL_PRIMARY_ONLY: case chromeos::STATE_DUAL_SECONDARY_ONLY: { - aura::DisplayManager* display_manager = - aura::Env::GetInstance()->display_manager(); - if (display_manager->GetNumDisplays() > 1) { - label_->SetText(l10n_util::GetStringFUTF16( - IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED, - UTF8ToUTF16(display_manager->GetDisplayNameFor( - ScreenAsh::GetSecondaryDisplay())))); - SetVisible(true); - } else { - SetVisible(false); - } + label_->SetText(l10n_util::GetStringFUTF16( + IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED, GetExternalDisplayName())); + SetVisible(true); return; } default: @@ -99,6 +75,29 @@ class DisplayView : public ash::internal::ActionableView { } private: + // Returns the name of the currently connected external display. + string16 GetExternalDisplayName() { + MultiDisplayManager* display_manager = static_cast<MultiDisplayManager*>( + aura::Env::GetInstance()->display_manager()); + + gfx::Display external_display(gfx::Display::kInvalidDisplayID); + if (display_manager->HasInternalDisplay()) { + for (size_t i = 0; i < display_manager->GetNumDisplays(); ++i) { + gfx::Display* display = display_manager->GetDisplayAt(i); + if (!display_manager->IsInternalDisplayId(display->id())) { + external_display = *display; + break; + } + } + } else { + // Falls back to the secondary display since the system doesn't + // distinguish the displays. + external_display = ScreenAsh::GetSecondaryDisplay(); + } + + return UTF8ToUTF16(display_manager->GetDisplayNameFor(external_display)); + } + // Overridden from ActionableView. virtual bool PerformAction(const ui::Event& event) OVERRIDE { if (login_status_ == ash::user::LOGGED_IN_USER || |