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 "app/gfx/gtk_util.h" | 7 #include "app/gfx/gtk_util.h" |
8 #include "app/l10n_util.h" | 8 #include "app/l10n_util.h" |
9 #include "app/resource_bundle.h" | 9 #include "app/resource_bundle.h" |
10 #include "chrome/browser/browser.h" | 10 #include "chrome/browser/browser.h" |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
65 l10n_util::GetStringUTF8(IDS_OPTIONS_BROWSING_DATA_GROUP_NAME), | 65 l10n_util::GetStringUTF8(IDS_OPTIONS_BROWSING_DATA_GROUP_NAME), |
66 InitBrowsingDataGroup(), false); | 66 InitBrowsingDataGroup(), false); |
67 options_builder.AddOptionGroup( | 67 options_builder.AddOptionGroup( |
68 l10n_util::GetStringUTF8(IDS_APPEARANCE_GROUP_NAME), | 68 l10n_util::GetStringUTF8(IDS_APPEARANCE_GROUP_NAME), |
69 InitThemesGroup(), false); | 69 InitThemesGroup(), false); |
70 page_ = options_builder.get_page_widget(); | 70 page_ = options_builder.get_page_widget(); |
71 | 71 |
72 // Add preferences observers. | 72 // Add preferences observers. |
73 ask_to_save_passwords_.Init(prefs::kPasswordManagerEnabled, | 73 ask_to_save_passwords_.Init(prefs::kPasswordManagerEnabled, |
74 profile->GetPrefs(), this); | 74 profile->GetPrefs(), this); |
75 ask_to_save_form_autofill_.Init(prefs::kFormAutofillEnabled, | 75 enable_form_autofill_.Init(prefs::kFormAutofillEnabled, |
76 profile->GetPrefs(), this); | 76 profile->GetPrefs(), this); |
77 if (browser_defaults::kCanToggleSystemTitleBar) { | 77 if (browser_defaults::kCanToggleSystemTitleBar) { |
78 use_custom_chrome_frame_.Init(prefs::kUseCustomChromeFrame, | 78 use_custom_chrome_frame_.Init(prefs::kUseCustomChromeFrame, |
79 profile->GetPrefs(), this); | 79 profile->GetPrefs(), this); |
80 } | 80 } |
81 | 81 |
82 // Load initial values. | 82 // Load initial values. |
83 NotifyPrefChanged(NULL); | 83 NotifyPrefChanged(NULL); |
84 | 84 |
85 registrar_.Add(this, NotificationType::BROWSER_THEME_CHANGED, | 85 registrar_.Add(this, NotificationType::BROWSER_THEME_CHANGED, |
86 NotificationService::AllSources()); | 86 NotificationService::AllSources()); |
87 ObserveThemeChanged(); | 87 ObserveThemeChanged(); |
| 88 |
| 89 personal_data_ = profile->GetPersonalDataManager(); |
88 } | 90 } |
89 | 91 |
90 ContentPageGtk::~ContentPageGtk() { | 92 ContentPageGtk::~ContentPageGtk() { |
91 if (sync_service_) | 93 if (sync_service_) |
92 sync_service_->RemoveObserver(this); | 94 sync_service_->RemoveObserver(this); |
| 95 if (personal_data_) |
| 96 personal_data_->RemoveObserver(this); |
93 } | 97 } |
94 | 98 |
95 /////////////////////////////////////////////////////////////////////////////// | 99 /////////////////////////////////////////////////////////////////////////////// |
96 // ContentsPageView, ProfileSyncServiceObserver implementation: | 100 // ContentsPageView, ProfileSyncServiceObserver implementation: |
97 | 101 |
98 void ContentPageGtk::OnStateChanged() { | 102 void ContentPageGtk::OnStateChanged() { |
99 // If the UI controls are not yet initialized, then don't do anything. This | 103 // If the UI controls are not yet initialized, then don't do anything. This |
100 // can happen if the Options dialog is up, but the Content tab is not yet | 104 // can happen if the Options dialog is up, but the Content tab is not yet |
101 // clicked. | 105 // clicked. |
102 if (!initializing_) | 106 if (!initializing_) |
(...skipping 11 matching lines...) Expand all Loading... |
114 if (!pref_name || *pref_name == prefs::kPasswordManagerEnabled) { | 118 if (!pref_name || *pref_name == prefs::kPasswordManagerEnabled) { |
115 if (ask_to_save_passwords_.GetValue()) { | 119 if (ask_to_save_passwords_.GetValue()) { |
116 gtk_toggle_button_set_active( | 120 gtk_toggle_button_set_active( |
117 GTK_TOGGLE_BUTTON(passwords_asktosave_radio_), TRUE); | 121 GTK_TOGGLE_BUTTON(passwords_asktosave_radio_), TRUE); |
118 } else { | 122 } else { |
119 gtk_toggle_button_set_active( | 123 gtk_toggle_button_set_active( |
120 GTK_TOGGLE_BUTTON(passwords_neversave_radio_), TRUE); | 124 GTK_TOGGLE_BUTTON(passwords_neversave_radio_), TRUE); |
121 } | 125 } |
122 } | 126 } |
123 if (!pref_name || *pref_name == prefs::kFormAutofillEnabled) { | 127 if (!pref_name || *pref_name == prefs::kFormAutofillEnabled) { |
124 if (ask_to_save_form_autofill_.GetValue()) { | 128 if (enable_form_autofill_.GetValue()) { |
125 gtk_toggle_button_set_active( | 129 gtk_toggle_button_set_active( |
126 GTK_TOGGLE_BUTTON(form_autofill_asktosave_radio_), TRUE); | 130 GTK_TOGGLE_BUTTON(form_autofill_enable_radio_), TRUE); |
127 } else { | 131 } else { |
128 gtk_toggle_button_set_active( | 132 gtk_toggle_button_set_active( |
129 GTK_TOGGLE_BUTTON(form_autofill_neversave_radio_), TRUE); | 133 GTK_TOGGLE_BUTTON(form_autofill_disable_radio_), TRUE); |
130 } | 134 } |
131 } | 135 } |
132 if (browser_defaults::kCanToggleSystemTitleBar && | 136 if (browser_defaults::kCanToggleSystemTitleBar && |
133 (!pref_name || *pref_name == prefs::kUseCustomChromeFrame)) { | 137 (!pref_name || *pref_name == prefs::kUseCustomChromeFrame)) { |
134 if (use_custom_chrome_frame_.GetValue()) { | 138 if (use_custom_chrome_frame_.GetValue()) { |
135 gtk_toggle_button_set_active( | 139 gtk_toggle_button_set_active( |
136 GTK_TOGGLE_BUTTON(system_title_bar_hide_radio_), TRUE); | 140 GTK_TOGGLE_BUTTON(system_title_bar_hide_radio_), TRUE); |
137 } else { | 141 } else { |
138 gtk_toggle_button_set_active( | 142 gtk_toggle_button_set_active( |
139 GTK_TOGGLE_BUTTON(system_title_bar_show_radio_), TRUE); | 143 GTK_TOGGLE_BUTTON(system_title_bar_show_radio_), TRUE); |
(...skipping 19 matching lines...) Expand all Loading... |
159 #else | 163 #else |
160 BrowserThemeProvider* provider = | 164 BrowserThemeProvider* provider = |
161 reinterpret_cast<BrowserThemeProvider*>(profile()->GetThemeProvider()); | 165 reinterpret_cast<BrowserThemeProvider*>(profile()->GetThemeProvider()); |
162 bool is_gtk_theme = false; | 166 bool is_gtk_theme = false; |
163 #endif | 167 #endif |
164 | 168 |
165 bool is_classic_theme = !is_gtk_theme && provider->GetThemeID().empty(); | 169 bool is_classic_theme = !is_gtk_theme && provider->GetThemeID().empty(); |
166 gtk_widget_set_sensitive(themes_reset_button_, !is_classic_theme); | 170 gtk_widget_set_sensitive(themes_reset_button_, !is_classic_theme); |
167 } | 171 } |
168 | 172 |
| 173 void ContentPageGtk::OnPersonalDataLoaded() { |
| 174 DCHECK(personal_data_); |
| 175 // We might have been alerted that the PersonalDataManager has loaded, so |
| 176 // remove ourselves as observer. |
| 177 personal_data_->RemoveObserver(this); |
| 178 |
| 179 ShowAutoFillDialog( |
| 180 personal_data_, personal_data_->profiles(), |
| 181 personal_data_->credit_cards()); |
| 182 } |
| 183 |
169 GtkWidget* ContentPageGtk::InitPasswordSavingGroup() { | 184 GtkWidget* ContentPageGtk::InitPasswordSavingGroup() { |
170 GtkWidget* vbox = gtk_vbox_new(FALSE, gtk_util::kControlSpacing); | 185 GtkWidget* vbox = gtk_vbox_new(FALSE, gtk_util::kControlSpacing); |
171 | 186 |
172 // Ask to save radio button. | 187 // Ask to save radio button. |
173 passwords_asktosave_radio_ = gtk_radio_button_new_with_label(NULL, | 188 passwords_asktosave_radio_ = gtk_radio_button_new_with_label(NULL, |
174 l10n_util::GetStringUTF8(IDS_OPTIONS_PASSWORDS_ASKTOSAVE).c_str()); | 189 l10n_util::GetStringUTF8(IDS_OPTIONS_PASSWORDS_ASKTOSAVE).c_str()); |
175 g_signal_connect(passwords_asktosave_radio_, "toggled", | 190 g_signal_connect(passwords_asktosave_radio_, "toggled", |
176 G_CALLBACK(OnPasswordRadioToggled), this); | 191 G_CALLBACK(OnPasswordRadioToggled), this); |
177 gtk_box_pack_start(GTK_BOX(vbox), passwords_asktosave_radio_, FALSE, | 192 gtk_box_pack_start(GTK_BOX(vbox), passwords_asktosave_radio_, FALSE, |
178 FALSE, 0); | 193 FALSE, 0); |
(...skipping 17 matching lines...) Expand all Loading... |
196 G_CALLBACK(OnPasswordsExceptionsButtonClicked), this); | 211 G_CALLBACK(OnPasswordsExceptionsButtonClicked), this); |
197 gtk_box_pack_start(GTK_BOX(button_hbox), passwords_exceptions_button, FALSE, | 212 gtk_box_pack_start(GTK_BOX(button_hbox), passwords_exceptions_button, FALSE, |
198 FALSE, 0); | 213 FALSE, 0); |
199 | 214 |
200 return vbox; | 215 return vbox; |
201 } | 216 } |
202 | 217 |
203 GtkWidget* ContentPageGtk::InitFormAutofillGroup() { | 218 GtkWidget* ContentPageGtk::InitFormAutofillGroup() { |
204 GtkWidget* vbox = gtk_vbox_new(FALSE, gtk_util::kControlSpacing); | 219 GtkWidget* vbox = gtk_vbox_new(FALSE, gtk_util::kControlSpacing); |
205 | 220 |
206 // Ask to save radio button. | 221 // Enable radio button. |
207 form_autofill_asktosave_radio_ = gtk_radio_button_new_with_label(NULL, | 222 form_autofill_enable_radio_ = gtk_radio_button_new_with_label(NULL, |
208 l10n_util::GetStringUTF8(IDS_OPTIONS_AUTOFILL_SAVE).c_str()); | 223 l10n_util::GetStringUTF8(IDS_OPTIONS_AUTOFILL_ENABLE).c_str()); |
209 g_signal_connect(form_autofill_asktosave_radio_, "toggled", | 224 g_signal_connect(G_OBJECT(form_autofill_enable_radio_), "toggled", |
210 G_CALLBACK(OnAutofillRadioToggled), this); | 225 G_CALLBACK(OnAutofillRadioToggled), this); |
211 gtk_box_pack_start(GTK_BOX(vbox), form_autofill_asktosave_radio_, FALSE, | 226 gtk_box_pack_start(GTK_BOX(vbox), form_autofill_enable_radio_, FALSE, |
212 FALSE, 0); | 227 FALSE, 0); |
213 | 228 |
214 // Never save radio button. | 229 // Disable radio button. |
215 form_autofill_neversave_radio_ = gtk_radio_button_new_with_label_from_widget( | 230 form_autofill_disable_radio_ = gtk_radio_button_new_with_label_from_widget( |
216 GTK_RADIO_BUTTON(form_autofill_asktosave_radio_), | 231 GTK_RADIO_BUTTON(form_autofill_enable_radio_), |
217 l10n_util::GetStringUTF8(IDS_OPTIONS_AUTOFILL_NEVERSAVE).c_str()); | 232 l10n_util::GetStringUTF8(IDS_OPTIONS_AUTOFILL_DISABLE).c_str()); |
218 g_signal_connect(form_autofill_neversave_radio_, "toggled", | 233 g_signal_connect(G_OBJECT(form_autofill_disable_radio_), "toggled", |
219 G_CALLBACK(OnAutofillRadioToggled), this); | 234 G_CALLBACK(OnAutofillRadioToggled), this); |
220 gtk_box_pack_start(GTK_BOX(vbox), form_autofill_neversave_radio_, FALSE, | 235 gtk_box_pack_start(GTK_BOX(vbox), form_autofill_disable_radio_, FALSE, |
221 FALSE, 0); | 236 FALSE, 0); |
222 | 237 |
| 238 GtkWidget* button_hbox = gtk_hbox_new(FALSE, gtk_util::kControlSpacing); |
| 239 gtk_container_add(GTK_CONTAINER(vbox), button_hbox); |
| 240 |
| 241 // Autofill button. |
| 242 GtkWidget* autofill_button = gtk_button_new_with_label( |
| 243 l10n_util::GetStringUTF8(IDS_OPTIONS_AUTOFILL_SETTINGS).c_str()); |
| 244 if (!personal_data_) |
| 245 gtk_widget_set_sensitive(autofill_button, FALSE); |
| 246 |
| 247 g_signal_connect(G_OBJECT(autofill_button), "clicked", |
| 248 G_CALLBACK(OnAutoFillButtonClicked), this); |
| 249 gtk_box_pack_start(GTK_BOX(button_hbox), autofill_button, FALSE, FALSE, 0); |
| 250 |
223 return vbox; | 251 return vbox; |
224 } | 252 } |
225 | 253 |
226 GtkWidget* ContentPageGtk::InitBrowsingDataGroup() { | 254 GtkWidget* ContentPageGtk::InitBrowsingDataGroup() { |
227 GtkWidget* vbox = gtk_vbox_new(FALSE, gtk_util::kControlSpacing); | 255 GtkWidget* vbox = gtk_vbox_new(FALSE, gtk_util::kControlSpacing); |
228 | 256 |
229 // Horizontal two button layout. | 257 // Horizontal two button layout. |
230 GtkWidget* button_hbox = gtk_hbox_new(FALSE, gtk_util::kControlSpacing); | 258 GtkWidget* button_hbox = gtk_hbox_new(FALSE, gtk_util::kControlSpacing); |
231 gtk_container_add(GTK_CONTAINER(vbox), button_hbox); | 259 gtk_container_add(GTK_CONTAINER(vbox), button_hbox); |
232 | 260 |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
369 &kSyncLabelErrorBgColor); | 397 &kSyncLabelErrorBgColor); |
370 gtk_widget_modify_bg(sync_action_link_background_, GTK_STATE_NORMAL, | 398 gtk_widget_modify_bg(sync_action_link_background_, GTK_STATE_NORMAL, |
371 &kSyncLabelErrorBgColor); | 399 &kSyncLabelErrorBgColor); |
372 } else { | 400 } else { |
373 gtk_widget_modify_bg(sync_status_label_background_, GTK_STATE_NORMAL, NULL); | 401 gtk_widget_modify_bg(sync_status_label_background_, GTK_STATE_NORMAL, NULL); |
374 gtk_widget_modify_bg(sync_action_link_background_, GTK_STATE_NORMAL, NULL); | 402 gtk_widget_modify_bg(sync_action_link_background_, GTK_STATE_NORMAL, NULL); |
375 } | 403 } |
376 } | 404 } |
377 | 405 |
378 // static | 406 // static |
| 407 void ContentPageGtk::OnAutoFillButtonClicked(GtkButton* widget, |
| 408 ContentPageGtk* page) { |
| 409 DCHECK(page->personal_data_); |
| 410 // If the personal data manager has not loaded the data yet, set ourselves as |
| 411 // its observer so that we can listen for the OnPersonalDataLoaded signal. |
| 412 if (!page->personal_data_->IsDataLoaded()) |
| 413 page->personal_data_->SetObserver(page); |
| 414 else |
| 415 page->OnPersonalDataLoaded(); |
| 416 } |
| 417 |
| 418 // static |
379 void ContentPageGtk::OnImportButtonClicked(GtkButton* widget, | 419 void ContentPageGtk::OnImportButtonClicked(GtkButton* widget, |
380 ContentPageGtk* page) { | 420 ContentPageGtk* page) { |
381 ImportDialogGtk::Show( | 421 ImportDialogGtk::Show( |
382 GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(widget))), | 422 GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(widget))), |
383 page->profile(), ALL); | 423 page->profile(), ALL); |
384 } | 424 } |
385 | 425 |
386 // static | 426 // static |
387 void ContentPageGtk::OnGtkThemeButtonClicked(GtkButton* widget, | 427 void ContentPageGtk::OnGtkThemeButtonClicked(GtkButton* widget, |
388 ContentPageGtk* page) { | 428 ContentPageGtk* page) { |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
469 if (page->initializing_) | 509 if (page->initializing_) |
470 return; | 510 return; |
471 | 511 |
472 // We get two signals when selecting a radio button, one for the old radio | 512 // We get two signals when selecting a radio button, one for the old radio |
473 // being toggled off and one for the new one being toggled on. Ignore the | 513 // being toggled off and one for the new one being toggled on. Ignore the |
474 // signal for the toggling off the old button. | 514 // signal for the toggling off the old button. |
475 if (!gtk_toggle_button_get_active(widget)) | 515 if (!gtk_toggle_button_get_active(widget)) |
476 return; | 516 return; |
477 | 517 |
478 bool enabled = gtk_toggle_button_get_active( | 518 bool enabled = gtk_toggle_button_get_active( |
479 GTK_TOGGLE_BUTTON(page->form_autofill_asktosave_radio_)); | 519 GTK_TOGGLE_BUTTON(page->form_autofill_enable_radio_)); |
480 if (enabled) { | 520 if (enabled) { |
481 page->UserMetricsRecordAction("Options_FormAutofill_Enable", | 521 page->UserMetricsRecordAction("Options_FormAutofill_Enable", |
482 page->profile()->GetPrefs()); | 522 page->profile()->GetPrefs()); |
483 } else { | 523 } else { |
484 page->UserMetricsRecordAction("Options_FormAutofill_Disable", | 524 page->UserMetricsRecordAction("Options_FormAutofill_Disable", |
485 page->profile()->GetPrefs()); | 525 page->profile()->GetPrefs()); |
486 } | 526 } |
487 page->ask_to_save_form_autofill_.SetValue(enabled); | 527 page->enable_form_autofill_.SetValue(enabled); |
488 } | 528 } |
489 | 529 |
490 // static | 530 // static |
491 void ContentPageGtk::OnSyncStartStopButtonClicked(GtkButton* widget, | 531 void ContentPageGtk::OnSyncStartStopButtonClicked(GtkButton* widget, |
492 ContentPageGtk* page) { | 532 ContentPageGtk* page) { |
493 DCHECK(page->sync_service_); | 533 DCHECK(page->sync_service_); |
494 | 534 |
495 if (page->sync_service_->HasSyncSetupCompleted()) { | 535 if (page->sync_service_->HasSyncSetupCompleted()) { |
496 GtkWidget* dialog = gtk_message_dialog_new( | 536 GtkWidget* dialog = gtk_message_dialog_new( |
497 GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(widget))), | 537 GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(widget))), |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
534 | 574 |
535 // static | 575 // static |
536 void ContentPageGtk::OnStopSyncDialogResponse(GtkWidget* widget, int response, | 576 void ContentPageGtk::OnStopSyncDialogResponse(GtkWidget* widget, int response, |
537 ContentPageGtk* page) { | 577 ContentPageGtk* page) { |
538 if (response == GTK_RESPONSE_ACCEPT) { | 578 if (response == GTK_RESPONSE_ACCEPT) { |
539 page->sync_service_->DisableForUser(); | 579 page->sync_service_->DisableForUser(); |
540 ProfileSyncService::SyncEvent(ProfileSyncService::STOP_FROM_OPTIONS); | 580 ProfileSyncService::SyncEvent(ProfileSyncService::STOP_FROM_OPTIONS); |
541 } | 581 } |
542 gtk_widget_destroy(widget); | 582 gtk_widget_destroy(widget); |
543 } | 583 } |
OLD | NEW |