diff options
author | evan@chromium.org <evan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-04-22 23:17:27 +0000 |
---|---|---|
committer | evan@chromium.org <evan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-04-22 23:17:27 +0000 |
commit | 18cec742ac18f7c99a357e57a659eed68397f8c6 (patch) | |
tree | ee9291f81122325d5a2e60c24b2d36e2c8e4e243 | |
parent | 097cd1f8986172d626060867c13ef2fe9759468f (diff) | |
download | chromium_src-18cec742ac18f7c99a357e57a659eed68397f8c6.zip chromium_src-18cec742ac18f7c99a357e57a659eed68397f8c6.tar.gz chromium_src-18cec742ac18f7c99a357e57a659eed68397f8c6.tar.bz2 |
gtk: Disable the "Clear browsing data" button on the Clear Browsing Data dialog
if there is no checkbox checked.
BUG=30401
TEST=open Clear Browsing Data dialog, unckeck all checkboxes,
see if the "Clear browsing data" button is disabled.
Patch from Thiago Farina <thiago.farina@gmail.com>
Review URL: http://codereview.chromium.org/1602007
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@45378 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/gtk/clear_browsing_data_dialog_gtk.cc | 113 | ||||
-rw-r--r-- | chrome/browser/gtk/clear_browsing_data_dialog_gtk.h | 32 |
2 files changed, 76 insertions, 69 deletions
diff --git a/chrome/browser/gtk/clear_browsing_data_dialog_gtk.cc b/chrome/browser/gtk/clear_browsing_data_dialog_gtk.cc index 44ccb21..88c8348 100644 --- a/chrome/browser/gtk/clear_browsing_data_dialog_gtk.cc +++ b/chrome/browser/gtk/clear_browsing_data_dialog_gtk.cc @@ -20,6 +20,15 @@ #include "grit/generated_resources.h" #include "grit/locale_settings.h" +namespace { + +// Returns true if the checkbox is checked. +gboolean IsChecked(GtkWidget* widget) { + return gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); +} + +} // namespace + // static void ClearBrowsingDataDialogGtk::Show(GtkWindow* parent, Profile* profile) { new ClearBrowsingDataDialogGtk(parent, profile); @@ -31,7 +40,7 @@ ClearBrowsingDataDialogGtk::ClearBrowsingDataDialogGtk(GtkWindow* parent, // Build the dialog. std::string dialog_name = l10n_util::GetStringUTF8( IDS_CLEAR_BROWSING_DATA_TITLE); - GtkWidget* dialog = gtk_dialog_new_with_buttons( + dialog_ = gtk_dialog_new_with_buttons( dialog_name.c_str(), parent, (GtkDialogFlags) (GTK_DIALOG_MODAL | GTK_DIALOG_NO_SEPARATOR), @@ -39,19 +48,19 @@ ClearBrowsingDataDialogGtk::ClearBrowsingDataDialogGtk(GtkWindow* parent, GTK_RESPONSE_REJECT, NULL); - accessible_widget_helper_.reset(new AccessibleWidgetHelper(dialog, profile)); + accessible_widget_helper_.reset(new AccessibleWidgetHelper(dialog_, profile)); accessible_widget_helper_->SendOpenWindowNotification(dialog_name); - gtk_widget_realize(dialog); - gtk_util::SetWindowSizeFromResources(GTK_WINDOW(dialog), + gtk_widget_realize(dialog_); + gtk_util::SetWindowSizeFromResources(GTK_WINDOW(dialog_), IDS_CLEARDATA_DIALOG_WIDTH_CHARS, -1, // height false); // resizable - gtk_util::AddButtonToDialog(dialog, + gtk_util::AddButtonToDialog(dialog_, l10n_util::GetStringUTF8(IDS_CLEAR_BROWSING_DATA_COMMIT).c_str(), GTK_STOCK_APPLY, GTK_RESPONSE_ACCEPT); - GtkWidget* content_area = GTK_DIALOG(dialog)->vbox; + GtkWidget* content_area = GTK_DIALOG(dialog_)->vbox; gtk_box_set_spacing(GTK_BOX(content_area), gtk_util::kContentAreaSpacing); GtkWidget* vbox = gtk_vbox_new(FALSE, gtk_util::kControlSpacing); @@ -70,7 +79,7 @@ ClearBrowsingDataDialogGtk::ClearBrowsingDataDialogGtk(GtkWindow* parent, gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(del_history_checkbox_), profile_->GetPrefs()->GetBoolean(prefs::kDeleteBrowsingHistory)); g_signal_connect(del_history_checkbox_, "toggled", - G_CALLBACK(HandleOnClickedWidget), this); + G_CALLBACK(OnDialogWidgetClickedThunk), this); // Downloads checkbox. del_downloads_checkbox_ = gtk_check_button_new_with_label( @@ -79,7 +88,7 @@ ClearBrowsingDataDialogGtk::ClearBrowsingDataDialogGtk(GtkWindow* parent, gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(del_downloads_checkbox_), profile_->GetPrefs()->GetBoolean(prefs::kDeleteDownloadHistory)); g_signal_connect(del_downloads_checkbox_, "toggled", - G_CALLBACK(HandleOnClickedWidget), this); + G_CALLBACK(OnDialogWidgetClickedThunk), this); // Cache checkbox. del_cache_checkbox_ = gtk_check_button_new_with_label( @@ -88,7 +97,7 @@ ClearBrowsingDataDialogGtk::ClearBrowsingDataDialogGtk(GtkWindow* parent, gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(del_cache_checkbox_), profile_->GetPrefs()->GetBoolean(prefs::kDeleteCache)); g_signal_connect(del_cache_checkbox_, "toggled", - G_CALLBACK(HandleOnClickedWidget), this); + G_CALLBACK(OnDialogWidgetClickedThunk), this); // Cookies checkbox. del_cookies_checkbox_ = gtk_check_button_new_with_label( @@ -97,7 +106,7 @@ ClearBrowsingDataDialogGtk::ClearBrowsingDataDialogGtk(GtkWindow* parent, gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(del_cookies_checkbox_), profile_->GetPrefs()->GetBoolean(prefs::kDeleteCookies)); g_signal_connect(del_cookies_checkbox_, "toggled", - G_CALLBACK(HandleOnClickedWidget), this); + G_CALLBACK(OnDialogWidgetClickedThunk), this); // Passwords checkbox. del_passwords_checkbox_ = gtk_check_button_new_with_label( @@ -106,7 +115,7 @@ ClearBrowsingDataDialogGtk::ClearBrowsingDataDialogGtk(GtkWindow* parent, gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(del_passwords_checkbox_), profile_->GetPrefs()->GetBoolean(prefs::kDeletePasswords)); g_signal_connect(del_passwords_checkbox_, "toggled", - G_CALLBACK(HandleOnClickedWidget), this); + G_CALLBACK(OnDialogWidgetClickedThunk), this); // Form data checkbox. del_form_data_checkbox_ = gtk_check_button_new_with_label( @@ -115,7 +124,7 @@ ClearBrowsingDataDialogGtk::ClearBrowsingDataDialogGtk(GtkWindow* parent, gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(del_form_data_checkbox_), profile_->GetPrefs()->GetBoolean(prefs::kDeleteFormData)); g_signal_connect(del_form_data_checkbox_, "toggled", - G_CALLBACK(HandleOnClickedWidget), this); + G_CALLBACK(OnDialogWidgetClickedThunk), this); // Create a horizontal layout for the combo box and label. GtkWidget* combo_hbox = gtk_hbox_new(FALSE, gtk_util::kLabelSpacing); @@ -140,7 +149,7 @@ ClearBrowsingDataDialogGtk::ClearBrowsingDataDialogGtk(GtkWindow* parent, gtk_box_pack_start(GTK_BOX(combo_hbox), time_period_combobox_, FALSE, FALSE, 0); g_signal_connect(time_period_combobox_, "changed", - G_CALLBACK(HandleOnClickedWidget), this); + G_CALLBACK(OnDialogWidgetClickedThunk), this); // Add the combo/label time period box to the vertical layout. gtk_box_pack_start(GTK_BOX(vbox), combo_hbox, FALSE, FALSE, 0); @@ -149,7 +158,7 @@ ClearBrowsingDataDialogGtk::ClearBrowsingDataDialogGtk(GtkWindow* parent, GtkWidget* flash_link = gtk_chrome_link_button_new( l10n_util::GetStringUTF8(IDS_FLASH_STORAGE_SETTINGS).c_str()); g_signal_connect(G_OBJECT(flash_link), "clicked", - G_CALLBACK(HandleOnFlashLinkClicked), this); + G_CALLBACK(OnFlashLinkClickedThunk), this); GtkWidget* flash_link_hbox = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(flash_link_hbox), flash_link, FALSE, FALSE, 0); gtk_box_pack_end(GTK_BOX(content_area), flash_link_hbox, FALSE, FALSE, 0); @@ -158,19 +167,22 @@ ClearBrowsingDataDialogGtk::ClearBrowsingDataDialogGtk(GtkWindow* parent, gtk_box_pack_end(GTK_BOX(content_area), separator, FALSE, FALSE, 0); // Make sure we can move things around. - DCHECK_EQ(GTK_DIALOG(dialog)->action_area->parent, content_area); + DCHECK_EQ(GTK_DIALOG(dialog_)->action_area->parent, content_area); // Now rearrange those because they're *above* the accept buttons...there's // no way to place them in the correct position with gtk_box_pack_end() so // manually move things into the correct order. gtk_box_reorder_child(GTK_BOX(content_area), flash_link_hbox, -1); gtk_box_reorder_child(GTK_BOX(content_area), separator, -1); - gtk_box_reorder_child(GTK_BOX(content_area), GTK_DIALOG(dialog)->action_area, + gtk_box_reorder_child(GTK_BOX(content_area), GTK_DIALOG(dialog_)->action_area, -1); - g_signal_connect(dialog, "response", - G_CALLBACK(HandleOnResponseDialog), this); - gtk_widget_show_all(dialog); + g_signal_connect(dialog_, "response", + G_CALLBACK(OnDialogResponseThunk), this); + + UpdateDialogButtons(); + + gtk_widget_show_all(dialog_); } ClearBrowsingDataDialogGtk::~ClearBrowsingDataDialogGtk() { @@ -182,31 +194,11 @@ void ClearBrowsingDataDialogGtk::OnDialogResponse(GtkWidget* widget, int period_selected = gtk_combo_box_get_active( GTK_COMBO_BOX(time_period_combobox_)); - int items = 0; - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(del_history_checkbox_))) - items |= BrowsingDataRemover::REMOVE_HISTORY; - if (gtk_toggle_button_get_active( - GTK_TOGGLE_BUTTON(del_downloads_checkbox_))) { - items |= BrowsingDataRemover::REMOVE_DOWNLOADS; - } - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(del_cookies_checkbox_))) - items |= BrowsingDataRemover::REMOVE_COOKIES; - if (gtk_toggle_button_get_active( - GTK_TOGGLE_BUTTON(del_passwords_checkbox_))) { - items |= BrowsingDataRemover::REMOVE_PASSWORDS; - } - if (gtk_toggle_button_get_active( - GTK_TOGGLE_BUTTON(del_form_data_checkbox_))) { - items |= BrowsingDataRemover::REMOVE_FORM_DATA; - } - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(del_cache_checkbox_))) - items |= BrowsingDataRemover::REMOVE_CACHE; - // BrowsingDataRemover deletes itself when done. remover_ = new BrowsingDataRemover(profile_, static_cast<BrowsingDataRemover::TimePeriod>(period_selected), base::Time()); - remover_->Remove(items); + remover_->Remove(GetCheckedItems()); } delete this; @@ -216,32 +208,27 @@ void ClearBrowsingDataDialogGtk::OnDialogResponse(GtkWidget* widget, void ClearBrowsingDataDialogGtk::OnDialogWidgetClicked(GtkWidget* widget) { if (widget == del_history_checkbox_) { profile_->GetPrefs()->SetBoolean(prefs::kDeleteBrowsingHistory, - gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)) ? - true : false); + IsChecked(widget)); } else if (widget == del_downloads_checkbox_) { profile_->GetPrefs()->SetBoolean(prefs::kDeleteDownloadHistory, - gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)) ? - true : false); + IsChecked(widget)); } else if (widget == del_cache_checkbox_) { profile_->GetPrefs()->SetBoolean(prefs::kDeleteCache, - gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)) ? - true : false); + IsChecked(widget)); } else if (widget == del_cookies_checkbox_) { profile_->GetPrefs()->SetBoolean(prefs::kDeleteCookies, - gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)) ? - true : false); + IsChecked(widget)); } else if (widget == del_passwords_checkbox_) { profile_->GetPrefs()->SetBoolean(prefs::kDeletePasswords, - gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)) ? - true : false); + IsChecked(widget)); } else if (widget == del_form_data_checkbox_) { profile_->GetPrefs()->SetBoolean(prefs::kDeleteFormData, - gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)) ? - true : false); + IsChecked(widget)); } else if (widget == time_period_combobox_) { profile_->GetPrefs()->SetInteger(prefs::kDeleteTimePeriod, gtk_combo_box_get_active(GTK_COMBO_BOX(widget))); } + UpdateDialogButtons(); } void ClearBrowsingDataDialogGtk::OnFlashLinkClicked(GtkWidget* button) { @@ -252,3 +239,25 @@ void ClearBrowsingDataDialogGtk::OnFlashLinkClicked(GtkWidget* button) { GURL(), NEW_FOREGROUND_TAB, PageTransition::LINK); browser->window()->Show(); } + +void ClearBrowsingDataDialogGtk::UpdateDialogButtons() { + gtk_dialog_set_response_sensitive(GTK_DIALOG(dialog_), GTK_RESPONSE_ACCEPT, + GetCheckedItems() != 0); +} + +int ClearBrowsingDataDialogGtk::GetCheckedItems() { + int items = 0; + if (IsChecked(del_history_checkbox_)) + items |= BrowsingDataRemover::REMOVE_HISTORY; + if (IsChecked(del_downloads_checkbox_)) + items |= BrowsingDataRemover::REMOVE_DOWNLOADS; + if (IsChecked(del_cookies_checkbox_)) + items |= BrowsingDataRemover::REMOVE_COOKIES; + if (IsChecked(del_passwords_checkbox_)) + items |= BrowsingDataRemover::REMOVE_PASSWORDS; + if (IsChecked(del_form_data_checkbox_)) + items |= BrowsingDataRemover::REMOVE_FORM_DATA; + if (IsChecked(del_cache_checkbox_)) + items |= BrowsingDataRemover::REMOVE_CACHE; + return items; +} diff --git a/chrome/browser/gtk/clear_browsing_data_dialog_gtk.h b/chrome/browser/gtk/clear_browsing_data_dialog_gtk.h index ce452f6..ba6e512 100644 --- a/chrome/browser/gtk/clear_browsing_data_dialog_gtk.h +++ b/chrome/browser/gtk/clear_browsing_data_dialog_gtk.h @@ -5,6 +5,7 @@ #ifndef CHROME_BROWSER_GTK_CLEAR_BROWSING_DATA_DIALOG_GTK_H_ #define CHROME_BROWSER_GTK_CLEAR_BROWSING_DATA_DIALOG_GTK_H_ +#include "app/gtk_signal.h" #include "base/basictypes.h" #include "base/scoped_ptr.h" @@ -25,25 +26,22 @@ class ClearBrowsingDataDialogGtk { ~ClearBrowsingDataDialogGtk(); // Handler to respond to Ok and Cancel responses from the dialog. - static void HandleOnResponseDialog(GtkWidget* widget, - int response, - ClearBrowsingDataDialogGtk* user_data) { - user_data->OnDialogResponse(widget, response); - } + CHROMEGTK_CALLBACK_1(ClearBrowsingDataDialogGtk, void, OnDialogResponse, int); // Handler to respond to widget clicked actions from the dialog. - static void HandleOnClickedWidget(GtkWidget* widget, - ClearBrowsingDataDialogGtk* user_data) { - user_data->OnDialogWidgetClicked(widget); - } - void OnDialogResponse(GtkWidget* widget, int response); - void OnDialogWidgetClicked(GtkWidget* widget); - - static void HandleOnFlashLinkClicked(GtkWidget* button, - ClearBrowsingDataDialogGtk* user_data) { - user_data->OnFlashLinkClicked(button); - } - void OnFlashLinkClicked(GtkWidget* widget); + CHROMEGTK_CALLBACK_0(ClearBrowsingDataDialogGtk, void, OnDialogWidgetClicked); + + CHROMEGTK_CALLBACK_0(ClearBrowsingDataDialogGtk, void, OnFlashLinkClicked); + + // Enable or disable the dialog buttons depending on the state of the + // checkboxes. + void UpdateDialogButtons(); + + // Create a bitmask from the checkboxes of the dialog. + int GetCheckedItems(); + + // The dialog window. + GtkWidget* dialog_; // UI elements. GtkWidget* del_history_checkbox_; |