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

Unified Diff: ash/system/chromeos/tray_display.cc

Issue 16046007: Shows the display info as a popup when a new display is connected. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: minor fix Created 7 years, 7 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/system/chromeos/tray_display.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ash/system/chromeos/tray_display.cc
diff --git a/ash/system/chromeos/tray_display.cc b/ash/system/chromeos/tray_display.cc
index 84f53692df06a6b9727ffffcd058a4fb1d313f13..c1b819f71cb9147e12133a144221af3d41505310 100644
--- a/ash/system/chromeos/tray_display.cc
+++ b/ash/system/chromeos/tray_display.cc
@@ -6,7 +6,6 @@
#include "ash/display/display_controller.h"
#include "ash/display/display_manager.h"
-#include "ash/screen_ash.h"
#include "ash/shell.h"
#include "ash/system/tray/fixed_sized_image_view.h"
#include "ash/system/tray/system_tray.h"
@@ -14,20 +13,35 @@
#include "ash/system/tray/tray_constants.h"
#include "base/chromeos/chromeos_version.h"
#include "base/utf_string_conversions.h"
-#include "chromeos/display/output_configurator.h"
#include "grit/ash_resources.h"
#include "grit/ash_strings.h"
-#include "ui/aura/env.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/resource/resource_bundle.h"
-#include "ui/base/x/x11_util.h"
-#include "ui/gfx/image/image.h"
-#include "ui/views/controls/image_view.h"
#include "ui/views/controls/label.h"
#include "ui/views/layout/box_layout.h"
namespace ash {
namespace internal {
+namespace {
+
+TrayDisplayMode GetCurrentTrayDisplayMode() {
+ DisplayManager* display_manager = Shell::GetInstance()->display_manager();
+ if (display_manager->GetNumDisplays() > 1)
+ return TRAY_DISPLAY_EXTENDED;
+
+ if (display_manager->IsMirrored())
+ return TRAY_DISPLAY_MIRRORED;
+
+ int64 first_id = display_manager->first_display_id();
+ if (display_manager->HasInternalDisplay() &&
+ !display_manager->IsInternalDisplayId(first_id)) {
+ return TRAY_DISPLAY_DOCKED;
+ }
+
+ return TRAY_DISPLAY_SINGLE;
+}
+
+}
stevenjb 2013/05/31 21:43:11 nit: // namespace
Jun Mukai 2013/05/31 21:50:17 Done.
class DisplayView : public ash::internal::ActionableView {
public:
@@ -54,25 +68,35 @@ class DisplayView : public ash::internal::ActionableView {
virtual ~DisplayView() {}
void Update() {
- DisplayManager* display_manager = Shell::GetInstance()->display_manager();
- if (display_manager->num_connected_displays() == 1) {
- // TODO(oshima|mukai): Support single display mode for overscan alignment.
- SetVisible(false);
- return;
+ switch (GetCurrentTrayDisplayMode()) {
+ case TRAY_DISPLAY_SINGLE:
+ // TODO(oshima|mukai): Support single display mode for overscan
+ // alignment.
+ SetVisible(false);
+ return;
+ case TRAY_DISPLAY_EXTENDED:
+ if (Shell::GetInstance()->display_manager()->HasInternalDisplay()) {
+ label_->SetText(l10n_util::GetStringFUTF16(
+ IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED, GetExternalDisplayName()));
+ } else {
+ label_->SetText(l10n_util::GetStringUTF16(
+ IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED_NO_INTERNAL));
+ }
+ break;
+ case TRAY_DISPLAY_MIRRORED:
+ if (Shell::GetInstance()->display_manager()->HasInternalDisplay()) {
+ label_->SetText(l10n_util::GetStringFUTF16(
+ IDS_ASH_STATUS_TRAY_DISPLAY_MIRRORING, GetExternalDisplayName()));
+ } else {
+ label_->SetText(l10n_util::GetStringUTF16(
+ IDS_ASH_STATUS_TRAY_DISPLAY_MIRRORING_NO_INTERNAL));
+ }
+ break;
+ case TRAY_DISPLAY_DOCKED:
+ label_->SetText(l10n_util::GetStringFUTF16(
+ IDS_ASH_STATUS_TRAY_DISPLAY_DOCKED, GetExternalDisplayName()));
stevenjb 2013/05/31 21:43:11 nit: break; (for consistency)
Jun Mukai 2013/05/31 21:50:17 Done.
}
SetVisible(true);
- if (display_manager->IsMirrored()) {
- label_->SetText(l10n_util::GetStringFUTF16(
- IDS_ASH_STATUS_TRAY_DISPLAY_MIRRORING, GetExternalDisplayName()));
- } else {
- label_->SetText(l10n_util::GetStringFUTF16(
- IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED, GetExternalDisplayName()));
- }
- }
-
- chromeos::OutputState InferOutputState() const {
- return Shell::GetScreen()->GetNumDisplays() == 1 ?
- chromeos::STATE_SINGLE : chromeos::STATE_DUAL_EXTENDED;
}
private:
@@ -82,16 +106,21 @@ class DisplayView : public ash::internal::ActionableView {
int64 external_id = display_manager->mirrored_display().id();
if (external_id == gfx::Display::kInvalidDisplayID) {
- int64 internal_display_id = gfx::Display::InternalDisplayId();
- int64 first_display_id = display_manager->first_display_id();
- for (size_t i = 0; i < display_manager->GetNumDisplays(); ++i) {
- int64 id = display_manager->GetDisplayAt(i)->id();
- if (id != internal_display_id && id != first_display_id) {
- external_id = id;
- break;
+ int16 first_display_id = display_manager->first_display_id();
+ if (!display_manager->HasInternalDisplay()) {
+ external_id = first_display_id;
+ } else {
+ int64 internal_display_id = gfx::Display::InternalDisplayId();
+ for (size_t i = 0; i < display_manager->GetNumDisplays(); ++i) {
+ int64 id = display_manager->GetDisplayAt(i)->id();
+ if (id != internal_display_id && id != first_display_id) {
+ external_id = id;
+ break;
+ }
}
}
}
+
if (external_id != gfx::Display::kInvalidDisplayID)
return UTF8ToUTF16(display_manager->GetDisplayNameForId(external_id));
return l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_UNKNOWN_DISPLAY_NAME);
@@ -125,13 +154,12 @@ class DisplayView : public ash::internal::ActionableView {
TrayDisplay::TrayDisplay(SystemTray* system_tray)
: SystemTrayItem(system_tray),
default_(NULL) {
- Shell::GetScreen()->AddObserver(this);
- Shell::GetInstance()->output_configurator()->AddObserver(this);
+ current_mode_ = GetCurrentTrayDisplayMode();
+ Shell::GetInstance()->display_controller()->AddObserver(this);
}
TrayDisplay::~TrayDisplay() {
- Shell::GetScreen()->RemoveObserver(this);
- Shell::GetInstance()->output_configurator()->RemoveObserver(this);
+ Shell::GetInstance()->display_controller()->RemoveObserver(this);
}
views::View* TrayDisplay::CreateDefaultView(user::LoginStatus status) {
@@ -139,31 +167,20 @@ views::View* TrayDisplay::CreateDefaultView(user::LoginStatus status) {
return default_;
}
-void TrayDisplay::DestroyDefaultView() {
- default_ = NULL;
+views::View* TrayDisplay::CreateDetailedView(user::LoginStatus status) {
+ return new DisplayView(status);
}
-void TrayDisplay::OnDisplayBoundsChanged(const gfx::Display& display) {
- if (default_)
- default_->Update();
-}
-
-void TrayDisplay::OnDisplayAdded(const gfx::Display& new_display) {
- if (default_)
- default_->Update();
-}
-
-void TrayDisplay::OnDisplayRemoved(const gfx::Display& old_display) {
- if (default_)
- default_->Update();
+void TrayDisplay::DestroyDefaultView() {
+ default_ = NULL;
}
-#if defined(OS_CHROMEOS)
-void TrayDisplay::OnDisplayModeChanged() {
- if (default_)
- default_->Update();
+void TrayDisplay::OnDisplayConfigurationChanged() {
+ TrayDisplayMode new_mode = GetCurrentTrayDisplayMode();
+ if (current_mode_ != new_mode && new_mode != TRAY_DISPLAY_SINGLE)
+ PopupDetailedView(kTrayPopupAutoCloseDelayForTextInSeconds, false);
+ current_mode_ = new_mode;
}
-#endif
} // namespace internal
} // namespace ash
« no previous file with comments | « ash/system/chromeos/tray_display.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698