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

Unified Diff: ash/display/display_error_dialog.cc

Issue 12212171: Provides more types of errors for output status. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 10 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
Index: ash/display/display_error_dialog.cc
diff --git a/ash/display/display_error_dialog.cc b/ash/display/display_error_dialog.cc
index 604d86acf6d9d9d4c9017f8cae2d216b45ade1e0..59b74ff927fe39fed04ad8f8a12a1278a04e8072 100644
--- a/ash/display/display_error_dialog.cc
+++ b/ash/display/display_error_dialog.cc
@@ -27,28 +27,20 @@ const int kDialogMessageWidthPixel = 300;
// The margin width from the error message to the edge of the dialog.
const int kDialogMessageMarginWidthPixel = 5;
-DisplayErrorDialog* g_instance = NULL;
-
} // namespace
// static
-void DisplayErrorDialog::ShowDialog() {
- if (g_instance) {
- DCHECK(g_instance->GetWidget());
- g_instance->GetWidget()->StackAtTop();
- g_instance->GetWidget()->Activate();
- return;
- }
-
+DisplayErrorDialog* DisplayErrorDialog::ShowDialog(
+ chromeos::OutputState new_state) {
gfx::Screen* screen = Shell::GetScreen();
const gfx::Display& target_display =
(screen->GetNumDisplays() > 1) ?
ScreenAsh::GetSecondaryDisplay() : screen->GetPrimaryDisplay();
- g_instance = new DisplayErrorDialog();
+ DisplayErrorDialog* dialog = new DisplayErrorDialog(new_state);
views::Widget* widget = new views::Widget;
views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW);
- params.delegate = g_instance;
+ params.delegate = dialog;
// Makes |widget| belong to the target display. Size and location are
// fixed by CenterWindow() below.
params.bounds = target_display.bounds();
@@ -62,12 +54,32 @@ void DisplayErrorDialog::ShowDialog() {
widget->GetNativeView()->SetName("DisplayErrorDialog");
widget->CenterWindow(widget->GetRootView()->GetPreferredSize());
widget->Show();
+ return dialog;
}
-DisplayErrorDialog::DisplayErrorDialog() {
+void DisplayErrorDialog::UpdateMessageForState(
+ chromeos::OutputState new_state) {
+ int message_id = -1;
+ switch (new_state) {
+ case chromeos::STATE_DUAL_MIRROR:
+ message_id = IDS_ASH_DISPLAY_FAILURE_ON_MIRRORING;
+ break;
+ case chromeos::STATE_DUAL_PRIMARY_ONLY:
+ case chromeos::STATE_DUAL_SECONDARY_ONLY:
+ message_id = IDS_ASH_DISPLAY_FAILURE_ON_EXTENDED;
+ break;
+ default:
+ message_id = IDS_ASH_DISPLAY_FAILURE_UNKNOWN;
oshima 2013/02/14 00:01:50 Can you document when this can happen?
Jun Mukai 2013/02/14 00:54:03 Done.
+ }
+ label_->SetText(l10n_util::GetStringUTF16(message_id));
+ label_->SizeToFit(kDialogMessageWidthPixel);
+ Layout();
+ SchedulePaint();
+}
+
+DisplayErrorDialog::DisplayErrorDialog(chromeos::OutputState new_state) {
Shell::GetInstance()->display_controller()->AddObserver(this);
- label_ = new views::Label(
- l10n_util::GetStringUTF16(IDS_ASH_DISPLAY_FAILURE_ON_MIRRORING));
+ label_ = new views::Label();
AddChildView(label_);
label_->SetMultiLine(true);
@@ -77,12 +89,12 @@ DisplayErrorDialog::DisplayErrorDialog() {
kDialogMessageMarginWidthPixel,
kDialogMessageMarginWidthPixel,
kDialogMessageMarginWidthPixel));
- label_->SizeToFit(kDialogMessageWidthPixel);
+
+ UpdateMessageForState(new_state);
}
DisplayErrorDialog::~DisplayErrorDialog() {
Shell::GetInstance()->display_controller()->RemoveObserver(this);
- g_instance = NULL;
}
int DisplayErrorDialog::GetDialogButtons() const {
@@ -101,9 +113,30 @@ void DisplayErrorDialog::OnDisplayConfigurationChanging() {
GetWidget()->Close();
}
-// static
-DisplayErrorDialog* DisplayErrorDialog::GetInstanceForTest() {
- return g_instance;
+DisplayErrorObserver::DisplayErrorObserver()
+ : dialog_(NULL) {
+}
+
+DisplayErrorObserver::~DisplayErrorObserver() {
+}
+
+void DisplayErrorObserver::OnDisplayModeChangeFailed(
+ chromeos::OutputState new_state) {
+ if (dialog_) {
+ DCHECK(dialog_->GetWidget());
+ dialog_->UpdateMessageForState(new_state);
+ dialog_->GetWidget()->StackAtTop();
+ dialog_->GetWidget()->Activate();
+ } else {
+ dialog_ = DisplayErrorDialog::ShowDialog(new_state);
+ }
+}
+
+void DisplayErrorObserver::OnWidgetClosing(views::Widget* widget) {
+ if (dialog_ && dialog_->GetWidget() == widget) {
oshima 2013/02/14 00:01:50 can dialog_->GetWidget() != widget happen? do you
Jun Mukai 2013/02/14 00:54:03 Done.
+ widget->RemoveObserver(this);
+ dialog_ = NULL;
+ }
}
} // namespace internal

Powered by Google App Engine
This is Rietveld 408576698