diff options
author | avi@chromium.org <avi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-10-15 20:34:36 +0000 |
---|---|---|
committer | avi@chromium.org <avi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-10-15 20:34:36 +0000 |
commit | bfbceb70b98dc5cdaae9f0774cb087508a4d0927 (patch) | |
tree | 1860a70be2f78255f09223f423ab15cd0bd7368c /chrome | |
parent | e2059e8be9ee7411cd58e94eb484a7f668a26171 (diff) | |
download | chromium_src-bfbceb70b98dc5cdaae9f0774cb087508a4d0927.zip chromium_src-bfbceb70b98dc5cdaae9f0774cb087508a4d0927.tar.gz chromium_src-bfbceb70b98dc5cdaae9f0774cb087508a4d0927.tar.bz2 |
Revert 61832 - GTK: Start implementing the new clear data dialog.
We don't block with a throbber while doing a clear data operation. The views
version of this dialog disables the entire dialog and displays a throbber while
waiting for an operation to complete. We don't do that yet.
This is important because there's no way to display error codes the sync server
might throw; it's comparatively likely that deleting server side data may fail
compared to deleting local data. That's the next step.
BUG=57877
TEST=New dialog has same functionality as before; new functionality intermittently works (since we can't display errors yet).
Review URL: http://codereview.chromium.org/3574013
TBR=erg@google.com
Review URL: http://codereview.chromium.org/3841001
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@62787 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r-- | chrome/browser/gtk/clear_browsing_data_dialog_gtk.cc | 225 | ||||
-rw-r--r-- | chrome/browser/gtk/clear_browsing_data_dialog_gtk.h | 26 |
2 files changed, 62 insertions, 189 deletions
diff --git a/chrome/browser/gtk/clear_browsing_data_dialog_gtk.cc b/chrome/browser/gtk/clear_browsing_data_dialog_gtk.cc index 310e49d..2607359 100644 --- a/chrome/browser/gtk/clear_browsing_data_dialog_gtk.cc +++ b/chrome/browser/gtk/clear_browsing_data_dialog_gtk.cc @@ -6,20 +6,15 @@ #include <string> -#include "app/gtk_util.h" #include "app/l10n_util.h" -#include "base/command_line.h" #include "chrome/browser/browser.h" #include "chrome/browser/browsing_data_remover.h" #include "chrome/browser/gtk/accessible_widget_helper_gtk.h" #include "chrome/browser/gtk/browser_window_gtk.h" #include "chrome/browser/gtk/gtk_chrome_link_button.h" #include "chrome/browser/gtk/gtk_util.h" -#include "chrome/browser/gtk/options/options_layout_gtk.h" #include "chrome/browser/prefs/pref_service.h" #include "chrome/browser/profile.h" -#include "chrome/browser/sync/profile_sync_service.h" -#include "chrome/common/chrome_switches.h" #include "chrome/common/pref_names.h" #include "grit/generated_resources.h" #include "grit/locale_settings.h" @@ -51,48 +46,21 @@ ClearBrowsingDataDialogGtk::ClearBrowsingDataDialogGtk(GtkWindow* parent, NULL); GtkWidget* cancel_button = gtk_dialog_add_button(GTK_DIALOG(dialog_), - GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE); + GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT); gtk_widget_grab_focus(cancel_button); accessible_widget_helper_.reset(new AccessibleWidgetHelper(dialog_, profile)); accessible_widget_helper_->SendOpenWindowNotification(dialog_name); + 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; gtk_box_set_spacing(GTK_BOX(content_area), gtk_util::kContentAreaSpacing); - // Build the first notebook page. - notebook_ = gtk_notebook_new(); - - gtk_notebook_append_page( - GTK_NOTEBOOK(notebook_), - BuildClearBrowsingDataPage(), - gtk_label_new( - l10n_util::GetStringUTF8(IDS_CLEAR_CHROME_DATA_TAB_LABEL).c_str())); - - gtk_notebook_append_page( - GTK_NOTEBOOK(notebook_), - BuildOtherDataPage(), - gtk_label_new( - l10n_util::GetStringUTF8(IDS_CLEAR_OTHER_DATA_TAB_LABEL).c_str())); - - gtk_box_pack_start(GTK_BOX(content_area), notebook_, FALSE, FALSE, 0); - - g_signal_connect(dialog_, "response", - G_CALLBACK(OnDialogResponseThunk), this); - - UpdateDialogButtons(); - - gtk_util::ShowModalDialogWithMinLocalizedWidth(dialog_, - IDS_CLEARDATA_DIALOG_WIDTH_CHARS); -} - -ClearBrowsingDataDialogGtk::~ClearBrowsingDataDialogGtk() { -} - -GtkWidget* ClearBrowsingDataDialogGtk::BuildClearBrowsingDataPage() { GtkWidget* vbox = gtk_vbox_new(FALSE, gtk_util::kControlSpacing); - gtk_container_set_border_width(GTK_CONTAINER(vbox), - gtk_util::kContentAreaBorder); + gtk_container_add(GTK_CONTAINER(content_area), vbox); // Label on top of the checkboxes. GtkWidget* description = gtk_label_new( @@ -182,145 +150,72 @@ GtkWidget* ClearBrowsingDataDialogGtk::BuildClearBrowsingDataPage() { // Add the combo/label time period box to the vertical layout. gtk_box_pack_start(GTK_BOX(vbox), combo_hbox, FALSE, FALSE, 0); - // Create a right aligned button for clearing the browsing data. - GtkWidget* button_box = gtk_hbutton_box_new(); - gtk_button_box_set_layout(GTK_BUTTON_BOX(button_box), GTK_BUTTONBOX_END); - clear_browsing_data_button_ = gtk_button_new_with_label( - l10n_util::GetStringUTF8(IDS_CLEAR_BROWSING_DATA_COMMIT).c_str()); - g_signal_connect(clear_browsing_data_button_, "clicked", - G_CALLBACK(OnClearBrowsingDataClickThunk), this); - gtk_container_add(GTK_CONTAINER(button_box), clear_browsing_data_button_); - gtk_box_pack_start(GTK_BOX(vbox), button_box, FALSE, FALSE, 0); - - return vbox; -} - -GtkWidget* ClearBrowsingDataDialogGtk::BuildOtherDataPage() { - scoped_ptr<OptionsLayoutBuilderGtk> - options_builder(OptionsLayoutBuilderGtk::Create()); - - GtkWidget* adobe_flash_vbox = gtk_vbox_new(FALSE, gtk_util::kControlSpacing); - GtkWidget* description = gtk_label_new(l10n_util::GetStringUTF8( - IDS_CLEAR_DATA_ADOBE_FLASH_DESCRIPTION).c_str()); - gtk_misc_set_alignment(GTK_MISC(description), 0, 0); - gtk_label_set_line_wrap(GTK_LABEL(description), TRUE); - gtk_box_pack_start(GTK_BOX(adobe_flash_vbox), description, FALSE, FALSE, 0); - + // Add widgets for the area below the accept buttons. 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(OnFlashLinkClickedThunk), this); - - // Stick it in an hbox so it doesn't expand to the whole width. 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_start(GTK_BOX(adobe_flash_vbox), - flash_link_hbox, FALSE, FALSE, 0); - - options_builder->AddOptionGroup( - l10n_util::GetStringUTF8(IDS_CLEAR_DATA_ADOBE_FLASH_TITLE), - adobe_flash_vbox, false); - - bool allow_clear_server_data_ui = - CommandLine::ForCurrentProcess()->HasSwitch( - switches::kEnableClearServerData); - bool sync_enabled = - allow_clear_server_data_ui && - profile_->GetProfileSyncService()->HasSyncSetupCompleted(); - - if (sync_enabled) { - GtkWidget* clear_sync_vbox = gtk_vbox_new(FALSE, gtk_util::kControlSpacing); - GtkWidget* description = gtk_label_new(l10n_util::GetStringUTF8( - IDS_CLEAR_DATA_CLEAR_SERVER_DATA_DESCRIPTION).c_str()); - gtk_misc_set_alignment(GTK_MISC(description), 0, 0); - gtk_label_set_line_wrap(GTK_LABEL(description), TRUE); - gtk_box_pack_start(GTK_BOX(clear_sync_vbox), description, FALSE, FALSE, 0); - - GtkWidget* clear_button = gtk_button_new_with_label( - l10n_util::GetStringUTF8(IDS_CLEAR_DATA_CLEAR_BUTTON).c_str()); - g_signal_connect(clear_button, "clicked", - G_CALLBACK(OnClearSyncDataClickThunk), this); - gtk_box_pack_start(GTK_BOX(clear_sync_vbox), clear_button, FALSE, FALSE, 0); - - // TODO(erg): We still need to have a link to the google privacy dashboard - // here, which is a label with a link embedded in it. This is too hard for - // the first pass. crbug.com/57877 - - options_builder->AddOptionGroup( - l10n_util::GetStringUTF8(IDS_CLEAR_DATA_CHROME_SYNC_TITLE), - clear_sync_vbox, false); - } + gtk_box_pack_end(GTK_BOX(content_area), flash_link_hbox, FALSE, FALSE, 0); - return options_builder->get_page_widget(); -} + GtkWidget* separator = gtk_hseparator_new(); + gtk_box_pack_end(GTK_BOX(content_area), separator, FALSE, FALSE, 0); -void ClearBrowsingDataDialogGtk::OnDialogResponse(GtkWidget* widget, - int response) { - delete this; - gtk_widget_destroy(GTK_WIDGET(widget)); -} + // Make sure we can move things around. + DCHECK_EQ(GTK_DIALOG(dialog_)->action_area->parent, content_area); -void ClearBrowsingDataDialogGtk::OnClearBrowsingDataClick(GtkWidget* widget) { - PrefService* prefs = profile_->GetPrefs(); - prefs->SetBoolean(prefs::kDeleteBrowsingHistory, - IsChecked(del_history_checkbox_)); - prefs->SetBoolean(prefs::kDeleteDownloadHistory, - IsChecked(del_downloads_checkbox_)); - prefs->SetBoolean(prefs::kDeleteCache, - IsChecked(del_cache_checkbox_)); - prefs->SetBoolean(prefs::kDeleteCookies, - IsChecked(del_cookies_checkbox_)); - prefs->SetBoolean(prefs::kDeletePasswords, - IsChecked(del_passwords_checkbox_)); - prefs->SetBoolean(prefs::kDeleteFormData, - IsChecked(del_form_data_checkbox_)); - prefs->SetInteger(prefs::kDeleteTimePeriod, gtk_combo_box_get_active( - GTK_COMBO_BOX(time_period_combobox_))); - - int period_selected = gtk_combo_box_get_active( - GTK_COMBO_BOX(time_period_combobox_)); - - // BrowsingDataRemover deletes itself when done. - remover_ = new BrowsingDataRemover( - profile_, - static_cast<BrowsingDataRemover::TimePeriod>(period_selected), - base::Time()); - remover_->Remove(GetCheckedItems()); - - OnDialogResponse(dialog_, GTK_RESPONSE_CLOSE); -} + // 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, + -1); + + g_signal_connect(dialog_, "response", + G_CALLBACK(OnDialogResponseThunk), this); -void ClearBrowsingDataDialogGtk::OnClearSyncDataClick(GtkWidget* widget) { - GtkWidget* confirm = gtk_message_dialog_new( - GTK_WINDOW(dialog_), - static_cast<GtkDialogFlags>( - GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT), - GTK_MESSAGE_QUESTION, - GTK_BUTTONS_YES_NO, - "%s", - l10n_util::GetStringUTF8(IDS_CONFIRM_CLEAR_DESCRIPTION).c_str()); - gtk_util::ApplyMessageDialogQuirks(confirm); - gtk_window_set_title(GTK_WINDOW(confirm), l10n_util::GetStringUTF8( - IDS_CONFIRM_CLEAR_TITLE).c_str()); - g_signal_connect(confirm, "response", - G_CALLBACK(OnClearSyncDataConfirmResponseThunk), this); - gtk_widget_show_all(confirm); + UpdateDialogButtons(); + + gtk_util::ShowModalDialogWithMinLocalizedWidth(dialog_, + IDS_CLEARDATA_DIALOG_WIDTH_CHARS); } -void ClearBrowsingDataDialogGtk::OnClearSyncDataConfirmResponse( - GtkWidget* confirm, - gint response) { - gtk_widget_destroy(confirm); - if (response != GTK_RESPONSE_YES) - return; +ClearBrowsingDataDialogGtk::~ClearBrowsingDataDialogGtk() { +} - // TODO(erg): The views version disables all controls and then starts a - // throbber, in both tabs. We currently don't have a way to do this in the - // GTK+ UI. It was a purely cosmetic thing, but now that this sync step can - // fail and needs to report stuff to the user, we'll need to implement that. - profile_->GetProfileSyncService()->ClearServerData(); +void ClearBrowsingDataDialogGtk::OnDialogResponse(GtkWidget* widget, + int response) { + if (response == GTK_RESPONSE_ACCEPT) { + PrefService* prefs = profile_->GetPrefs(); + prefs->SetBoolean(prefs::kDeleteBrowsingHistory, + IsChecked(del_history_checkbox_)); + prefs->SetBoolean(prefs::kDeleteDownloadHistory, + IsChecked(del_downloads_checkbox_)); + prefs->SetBoolean(prefs::kDeleteCache, + IsChecked(del_cache_checkbox_)); + prefs->SetBoolean(prefs::kDeleteCookies, + IsChecked(del_cookies_checkbox_)); + prefs->SetBoolean(prefs::kDeletePasswords, + IsChecked(del_passwords_checkbox_)); + prefs->SetBoolean(prefs::kDeleteFormData, + IsChecked(del_form_data_checkbox_)); + prefs->SetInteger(prefs::kDeleteTimePeriod, + gtk_combo_box_get_active(GTK_COMBO_BOX(time_period_combobox_))); + + int period_selected = gtk_combo_box_get_active( + GTK_COMBO_BOX(time_period_combobox_)); + + // BrowsingDataRemover deletes itself when done. + remover_ = new BrowsingDataRemover(profile_, + static_cast<BrowsingDataRemover::TimePeriod>(period_selected), + base::Time()); + remover_->Remove(GetCheckedItems()); + } - OnDialogResponse(dialog_, GTK_RESPONSE_CLOSE); + delete this; + gtk_widget_destroy(GTK_WIDGET(widget)); } void ClearBrowsingDataDialogGtk::OnDialogWidgetClicked(GtkWidget* widget) { @@ -337,8 +232,8 @@ void ClearBrowsingDataDialogGtk::OnFlashLinkClicked(GtkWidget* button) { } void ClearBrowsingDataDialogGtk::UpdateDialogButtons() { - gtk_widget_set_sensitive(GTK_WIDGET(clear_browsing_data_button_), - GetCheckedItems() != 0); + gtk_dialog_set_response_sensitive(GTK_DIALOG(dialog_), GTK_RESPONSE_ACCEPT, + GetCheckedItems() != 0); } int ClearBrowsingDataDialogGtk::GetCheckedItems() { diff --git a/chrome/browser/gtk/clear_browsing_data_dialog_gtk.h b/chrome/browser/gtk/clear_browsing_data_dialog_gtk.h index fa23f85..87a4546 100644 --- a/chrome/browser/gtk/clear_browsing_data_dialog_gtk.h +++ b/chrome/browser/gtk/clear_browsing_data_dialog_gtk.h @@ -26,27 +26,9 @@ class ClearBrowsingDataDialogGtk { ClearBrowsingDataDialogGtk(GtkWindow* parent, Profile* profile); ~ClearBrowsingDataDialogGtk(); - // Builds the first notebook page in the dialog. - GtkWidget* BuildClearBrowsingDataPage(); - - // Builds the second notebook page in the dialog. - GtkWidget* BuildOtherDataPage(); - - // Handler to respond to Close responses from the dialog. + // Handler to respond to Ok and Cancel responses from the dialog. CHROMEGTK_CALLBACK_1(ClearBrowsingDataDialogGtk, void, OnDialogResponse, int); - // Handler that handles clearing browsing data. - CHROMEGTK_CALLBACK_0(ClearBrowsingDataDialogGtk, - void, OnClearBrowsingDataClick); - - // Handles the appearance of the clear server side conformation box, and - // handling the response of the "are you sure you want to do this?" message - // box. - CHROMEGTK_CALLBACK_0(ClearBrowsingDataDialogGtk, - void, OnClearSyncDataClick); - CHROMEGTK_CALLBACK_1(ClearBrowsingDataDialogGtk, void, - OnClearSyncDataConfirmResponse, int); - // Handler to respond to widget clicked actions from the dialog. CHROMEGTK_CALLBACK_0(ClearBrowsingDataDialogGtk, void, OnDialogWidgetClicked); @@ -62,10 +44,7 @@ class ClearBrowsingDataDialogGtk { // The dialog window. GtkWidget* dialog_; - // The notebook in the dialog. - GtkWidget* notebook_; - - // UI elements on the first page. + // UI elements. GtkWidget* del_history_checkbox_; GtkWidget* del_downloads_checkbox_; GtkWidget* del_cache_checkbox_; @@ -73,7 +52,6 @@ class ClearBrowsingDataDialogGtk { GtkWidget* del_passwords_checkbox_; GtkWidget* del_form_data_checkbox_; GtkWidget* time_period_combobox_; - GtkWidget* clear_browsing_data_button_; // Our current profile. Profile* profile_; |