summaryrefslogtreecommitdiffstats
path: root/ash/system
diff options
context:
space:
mode:
authormukai@chromium.org <mukai@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-11-05 22:40:45 +0000
committermukai@chromium.org <mukai@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-11-05 22:40:45 +0000
commit4d90a9aedf5f388bf5a9d6e4f6b39b88f62ca548 (patch)
treecc6e980ff40d980d3a08f2793312ba5bfb844c32 /ash/system
parent7714ad07dc2f4b7aa7c41861e84d04b77cd4bc94 (diff)
downloadchromium_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.cc61
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 ||