OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/gtk/options/content_page_gtk.h" | 5 #include "chrome/browser/gtk/options/content_page_gtk.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "app/gtk_util.h" | 9 #include "app/gtk_util.h" |
10 #include "app/l10n_util.h" | 10 #include "app/l10n_util.h" |
(...skipping 24 matching lines...) Expand all Loading... |
35 | 35 |
36 #if defined(OS_CHROMEOS) | 36 #if defined(OS_CHROMEOS) |
37 #include "chrome/browser/chromeos/options/options_window_view.h" | 37 #include "chrome/browser/chromeos/options/options_window_view.h" |
38 #endif // defined(OS_CHROMEOS) | 38 #endif // defined(OS_CHROMEOS) |
39 | 39 |
40 namespace { | 40 namespace { |
41 | 41 |
42 // Background color for the status label when it's showing an error. | 42 // Background color for the status label when it's showing an error. |
43 static const GdkColor kSyncLabelErrorBgColor = GDK_COLOR_RGB(0xff, 0x9a, 0x9a); | 43 static const GdkColor kSyncLabelErrorBgColor = GDK_COLOR_RGB(0xff, 0x9a, 0x9a); |
44 | 44 |
| 45 // Set of preferences which might be unavailable for editing when managed. |
| 46 const wchar_t* kContentManagablePrefs[] = { |
| 47 prefs::kSyncManaged |
| 48 }; |
| 49 |
45 // Helper for WrapLabelAtAllocationHack. | 50 // Helper for WrapLabelAtAllocationHack. |
46 void OnLabelAllocate(GtkWidget* label, GtkAllocation* allocation) { | 51 void OnLabelAllocate(GtkWidget* label, GtkAllocation* allocation) { |
47 gtk_widget_set_size_request(label, allocation->width, -1); | 52 gtk_widget_set_size_request(label, allocation->width, -1); |
48 | 53 |
49 // Disconnect ourselves. Repeatedly resizing based on allocation causes | 54 // Disconnect ourselves. Repeatedly resizing based on allocation causes |
50 // the dialog to become unshrinkable. | 55 // the dialog to become unshrinkable. |
51 g_signal_handlers_disconnect_by_func( | 56 g_signal_handlers_disconnect_by_func( |
52 label, reinterpret_cast<gpointer>(OnLabelAllocate), NULL); | 57 label, reinterpret_cast<gpointer>(OnLabelAllocate), NULL); |
53 } | 58 } |
54 | 59 |
(...skipping 17 matching lines...) Expand all Loading... |
72 : OptionsPageBase(profile), | 77 : OptionsPageBase(profile), |
73 sync_status_label_background_(NULL), | 78 sync_status_label_background_(NULL), |
74 sync_status_label_(NULL), | 79 sync_status_label_(NULL), |
75 #if !defined(OS_CHROMEOS) | 80 #if !defined(OS_CHROMEOS) |
76 sync_action_link_background_(NULL), | 81 sync_action_link_background_(NULL), |
77 sync_action_link_(NULL), | 82 sync_action_link_(NULL), |
78 sync_start_stop_button_(NULL), | 83 sync_start_stop_button_(NULL), |
79 #endif | 84 #endif |
80 sync_customize_button_(NULL), | 85 sync_customize_button_(NULL), |
81 initializing_(true), | 86 initializing_(true), |
82 sync_service_(NULL) { | 87 sync_service_(NULL), |
| 88 managed_prefs_banner_(profile->GetPrefs(), kContentManagablePrefs, |
| 89 arraysize(kContentManagablePrefs)) { |
83 if (profile->GetProfileSyncService()) { | 90 if (profile->GetProfileSyncService()) { |
84 sync_service_ = profile->GetProfileSyncService(); | 91 sync_service_ = profile->GetProfileSyncService(); |
85 sync_service_->AddObserver(this); | 92 sync_service_->AddObserver(this); |
86 } | 93 } |
87 | 94 |
88 // Prepare the group options layout. | 95 // Prepare the group options layout. |
89 scoped_ptr<OptionsLayoutBuilderGtk> | 96 scoped_ptr<OptionsLayoutBuilderGtk> |
90 options_builder(OptionsLayoutBuilderGtk::CreateOptionallyCompactLayout()); | 97 options_builder(OptionsLayoutBuilderGtk::CreateOptionallyCompactLayout()); |
| 98 options_builder->AddWidget(managed_prefs_banner_.banner_widget(), false); |
91 if (sync_service_) { | 99 if (sync_service_) { |
92 options_builder->AddOptionGroup( | 100 options_builder->AddOptionGroup( |
93 l10n_util::GetStringUTF8(IDS_SYNC_OPTIONS_GROUP_NAME), | 101 l10n_util::GetStringUTF8(IDS_SYNC_OPTIONS_GROUP_NAME), |
94 InitSyncGroup(), false); | 102 InitSyncGroup(), false); |
95 UpdateSyncControls(); | 103 UpdateSyncControls(); |
96 } | 104 } |
97 | 105 |
98 options_builder->AddOptionGroup( | 106 options_builder->AddOptionGroup( |
99 l10n_util::GetStringUTF8(IDS_OPTIONS_PASSWORDS_GROUP_NAME), | 107 l10n_util::GetStringUTF8(IDS_OPTIONS_PASSWORDS_GROUP_NAME), |
100 InitPasswordSavingGroup(), false); | 108 InitPasswordSavingGroup(), false); |
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
395 | 403 |
396 return vbox; | 404 return vbox; |
397 } | 405 } |
398 | 406 |
399 void ContentPageGtk::UpdateSyncControls() { | 407 void ContentPageGtk::UpdateSyncControls() { |
400 DCHECK(sync_service_); | 408 DCHECK(sync_service_); |
401 string16 status_label; | 409 string16 status_label; |
402 string16 link_label; | 410 string16 link_label; |
403 std::string customize_button_label; | 411 std::string customize_button_label; |
404 std::string button_label; | 412 std::string button_label; |
| 413 bool managed = sync_service_->IsManaged(); |
405 bool sync_setup_completed = sync_service_->HasSyncSetupCompleted(); | 414 bool sync_setup_completed = sync_service_->HasSyncSetupCompleted(); |
406 bool status_has_error = sync_ui_util::GetStatusLabels(sync_service_, | 415 bool status_has_error = sync_ui_util::GetStatusLabels(sync_service_, |
407 &status_label, &link_label) == sync_ui_util::SYNC_ERROR; | 416 &status_label, &link_label) == sync_ui_util::SYNC_ERROR; |
408 customize_button_label = | 417 customize_button_label = |
409 l10n_util::GetStringUTF8(IDS_SYNC_CUSTOMIZE_BUTTON_LABEL); | 418 l10n_util::GetStringUTF8(IDS_SYNC_CUSTOMIZE_BUTTON_LABEL); |
410 if (sync_setup_completed) { | 419 if (sync_setup_completed) { |
411 button_label = l10n_util::GetStringUTF8(IDS_SYNC_STOP_SYNCING_BUTTON_LABEL); | 420 button_label = l10n_util::GetStringUTF8(IDS_SYNC_STOP_SYNCING_BUTTON_LABEL); |
412 } else if (sync_service_->SetupInProgress()) { | 421 } else if (sync_service_->SetupInProgress()) { |
413 button_label = l10n_util::GetStringUTF8(IDS_SYNC_NTP_SETUP_IN_PROGRESS); | 422 button_label = l10n_util::GetStringUTF8(IDS_SYNC_NTP_SETUP_IN_PROGRESS); |
414 } else { | 423 } else { |
415 button_label = l10n_util::GetStringUTF8(IDS_SYNC_START_SYNC_BUTTON_LABEL); | 424 button_label = l10n_util::GetStringUTF8(IDS_SYNC_START_SYNC_BUTTON_LABEL); |
416 } | 425 } |
417 | 426 |
418 gtk_label_set_label(GTK_LABEL(sync_status_label_), | 427 gtk_label_set_label(GTK_LABEL(sync_status_label_), |
419 UTF16ToUTF8(status_label).c_str()); | 428 UTF16ToUTF8(status_label).c_str()); |
420 #if !defined(OS_CHROMEOS) | 429 #if !defined(OS_CHROMEOS) |
421 gtk_widget_set_sensitive(sync_start_stop_button_, | 430 gtk_widget_set_sensitive(sync_start_stop_button_, |
422 !sync_service_->WizardIsVisible()); | 431 !sync_service_->WizardIsVisible() && !managed); |
423 gtk_button_set_label(GTK_BUTTON(sync_start_stop_button_), | 432 gtk_button_set_label(GTK_BUTTON(sync_start_stop_button_), |
424 button_label.c_str()); | 433 button_label.c_str()); |
425 #endif | 434 #endif |
426 | 435 |
427 gtk_widget_set_child_visible(sync_customize_button_, | 436 gtk_widget_set_child_visible(sync_customize_button_, |
428 sync_setup_completed && !status_has_error); | 437 sync_setup_completed && !status_has_error); |
429 gtk_button_set_label(GTK_BUTTON(sync_customize_button_), | 438 gtk_button_set_label(GTK_BUTTON(sync_customize_button_), |
430 customize_button_label.c_str()); | 439 customize_button_label.c_str()); |
| 440 gtk_widget_set_sensitive(sync_customize_button_, !managed); |
431 #if !defined(OS_CHROMEOS) | 441 #if !defined(OS_CHROMEOS) |
432 gtk_chrome_link_button_set_label(GTK_CHROME_LINK_BUTTON(sync_action_link_), | 442 gtk_chrome_link_button_set_label(GTK_CHROME_LINK_BUTTON(sync_action_link_), |
433 UTF16ToUTF8(link_label).c_str()); | 443 UTF16ToUTF8(link_label).c_str()); |
434 if (link_label.empty()) { | 444 if (link_label.empty()) { |
435 gtk_widget_set_no_show_all(sync_action_link_background_, TRUE); | 445 gtk_widget_set_no_show_all(sync_action_link_background_, TRUE); |
436 gtk_widget_hide(sync_action_link_background_); | 446 gtk_widget_hide(sync_action_link_background_); |
437 } else { | 447 } else { |
438 gtk_widget_set_no_show_all(sync_action_link_background_, FALSE); | 448 gtk_widget_set_no_show_all(sync_action_link_background_, FALSE); |
439 gtk_widget_show(sync_action_link_background_); | 449 gtk_widget_show(sync_action_link_background_); |
440 } | 450 } |
| 451 gtk_widget_set_sensitive(sync_action_link_, !managed); |
441 #endif | 452 #endif |
442 if (status_has_error) { | 453 if (status_has_error) { |
443 gtk_widget_modify_bg(sync_status_label_background_, GTK_STATE_NORMAL, | 454 gtk_widget_modify_bg(sync_status_label_background_, GTK_STATE_NORMAL, |
444 &kSyncLabelErrorBgColor); | 455 &kSyncLabelErrorBgColor); |
445 #if !defined(OS_CHROMEOS) | 456 #if !defined(OS_CHROMEOS) |
446 gtk_widget_modify_bg(sync_action_link_background_, GTK_STATE_NORMAL, | 457 gtk_widget_modify_bg(sync_action_link_background_, GTK_STATE_NORMAL, |
447 &kSyncLabelErrorBgColor); | 458 &kSyncLabelErrorBgColor); |
448 #endif | 459 #endif |
449 } else { | 460 } else { |
450 gtk_widget_modify_bg(sync_status_label_background_, GTK_STATE_NORMAL, NULL); | 461 gtk_widget_modify_bg(sync_status_label_background_, GTK_STATE_NORMAL, NULL); |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
557 gtk_widget_set_sensitive(autofill_button_, TRUE); | 568 gtk_widget_set_sensitive(autofill_button_, TRUE); |
558 } else { | 569 } else { |
559 UserMetricsRecordAction(UserMetricsAction("Options_FormAutofill_Disable"), | 570 UserMetricsRecordAction(UserMetricsAction("Options_FormAutofill_Disable"), |
560 profile()->GetPrefs()); | 571 profile()->GetPrefs()); |
561 gtk_widget_set_sensitive(autofill_button_, FALSE); | 572 gtk_widget_set_sensitive(autofill_button_, FALSE); |
562 } | 573 } |
563 enable_form_autofill_.SetValue(enabled); | 574 enable_form_autofill_.SetValue(enabled); |
564 } | 575 } |
565 | 576 |
566 void ContentPageGtk::OnSyncStartStopButtonClicked(GtkWidget* widget) { | 577 void ContentPageGtk::OnSyncStartStopButtonClicked(GtkWidget* widget) { |
567 DCHECK(sync_service_); | 578 DCHECK(sync_service_ && !sync_service_->IsManaged()); |
568 | 579 |
569 if (sync_service_->HasSyncSetupCompleted()) { | 580 if (sync_service_->HasSyncSetupCompleted()) { |
570 GtkWidget* dialog = gtk_message_dialog_new( | 581 GtkWidget* dialog = gtk_message_dialog_new( |
571 GTK_WINDOW(gtk_widget_get_toplevel(widget)), | 582 GTK_WINDOW(gtk_widget_get_toplevel(widget)), |
572 static_cast<GtkDialogFlags>(GTK_DIALOG_MODAL), | 583 static_cast<GtkDialogFlags>(GTK_DIALOG_MODAL), |
573 GTK_MESSAGE_WARNING, | 584 GTK_MESSAGE_WARNING, |
574 GTK_BUTTONS_NONE, | 585 GTK_BUTTONS_NONE, |
575 "%s", | 586 "%s", |
576 l10n_util::GetStringFUTF8( | 587 l10n_util::GetStringFUTF8( |
577 IDS_SYNC_STOP_SYNCING_EXPLANATION_LABEL, | 588 IDS_SYNC_STOP_SYNCING_EXPLANATION_LABEL, |
(...skipping 17 matching lines...) Expand all Loading... |
595 gtk_util::ShowDialog(dialog); | 606 gtk_util::ShowDialog(dialog); |
596 return; | 607 return; |
597 } else { | 608 } else { |
598 sync_service_->EnableForUser(); | 609 sync_service_->EnableForUser(); |
599 ProfileSyncService::SyncEvent(ProfileSyncService::START_FROM_OPTIONS); | 610 ProfileSyncService::SyncEvent(ProfileSyncService::START_FROM_OPTIONS); |
600 } | 611 } |
601 } | 612 } |
602 | 613 |
603 void ContentPageGtk::OnSyncCustomizeButtonClicked(GtkWidget* widget) { | 614 void ContentPageGtk::OnSyncCustomizeButtonClicked(GtkWidget* widget) { |
604 // sync_customize_button_ should be invisible if sync is not yet set up. | 615 // sync_customize_button_ should be invisible if sync is not yet set up. |
605 DCHECK(sync_service_->HasSyncSetupCompleted()); | 616 DCHECK(sync_service_ && !sync_service_->IsManaged() && |
| 617 sync_service_->HasSyncSetupCompleted()); |
606 sync_service_->ShowChooseDataTypes(); | 618 sync_service_->ShowChooseDataTypes(); |
607 } | 619 } |
608 | 620 |
609 void ContentPageGtk::OnSyncActionLinkClicked(GtkWidget* widget) { | 621 void ContentPageGtk::OnSyncActionLinkClicked(GtkWidget* widget) { |
610 DCHECK(sync_service_); | 622 DCHECK(sync_service_ && !sync_service_->IsManaged()); |
611 sync_service_->ShowLoginDialog(); | 623 sync_service_->ShowLoginDialog(); |
612 } | 624 } |
613 | 625 |
614 void ContentPageGtk::OnStopSyncDialogResponse(GtkWidget* widget, int response) { | 626 void ContentPageGtk::OnStopSyncDialogResponse(GtkWidget* widget, int response) { |
615 if (response == GTK_RESPONSE_ACCEPT) { | 627 if (response == GTK_RESPONSE_ACCEPT) { |
616 sync_service_->DisableForUser(); | 628 sync_service_->DisableForUser(); |
617 ProfileSyncService::SyncEvent(ProfileSyncService::STOP_FROM_OPTIONS); | 629 ProfileSyncService::SyncEvent(ProfileSyncService::STOP_FROM_OPTIONS); |
618 } | 630 } |
619 gtk_widget_destroy(widget); | 631 gtk_widget_destroy(widget); |
620 } | 632 } |
OLD | NEW |