summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorraz@chromium.org <raz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-10-15 21:52:07 +0000
committerraz@chromium.org <raz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-10-15 21:52:07 +0000
commitdea137473b1fb821d910f6b9f48431af7b408624 (patch)
tree66d0ab5ca02c235fa6096aee9c0b47929d21ea4a
parentd4a7cc0322939beab17c17f7b6d5155115047a42 (diff)
downloadchromium_src-dea137473b1fb821d910f6b9f48431af7b408624.zip
chromium_src-dea137473b1fb821d910f6b9f48431af7b408624.tar.gz
chromium_src-dea137473b1fb821d910f6b9f48431af7b408624.tar.bz2
Merge 62787 - 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 TBR=avi@chromium.org Review URL: http://codereview.chromium.org/3845001 git-svn-id: svn://svn.chromium.org/chrome/branches/552/src@62801 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/gtk/clear_browsing_data_dialog_gtk.cc225
-rw-r--r--chrome/browser/gtk/clear_browsing_data_dialog_gtk.h26
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_;