| Index: chrome/browser/ui/gtk/one_click_signin_bubble_gtk.cc
|
| diff --git a/chrome/browser/ui/gtk/one_click_signin_bubble_gtk.cc b/chrome/browser/ui/gtk/one_click_signin_bubble_gtk.cc
|
| index c544cecd073a8932dc94ccc8e1455c0e686e21d8..d3bb9d34150268bc8cb58fbc9ed45e719d3451ac 100644
|
| --- a/chrome/browser/ui/gtk/one_click_signin_bubble_gtk.cc
|
| +++ b/chrome/browser/ui/gtk/one_click_signin_bubble_gtk.cc
|
| @@ -32,11 +32,13 @@ OneClickSigninBubbleGtk::OneClickSigninBubbleGtk(
|
| BrowserWindowGtk* browser_window_gtk,
|
| BrowserWindow::OneClickSigninBubbleType type,
|
| const string16& email,
|
| + const string16& error_message,
|
| const BrowserWindow::StartSyncCallback& start_sync_callback)
|
| : bubble_(NULL),
|
| - start_sync_callback_(start_sync_callback),
|
| - is_modal_(type != BrowserWindow::ONE_CLICK_SIGNIN_BUBBLE_TYPE_BUBBLE),
|
| email_(email),
|
| + error_message_(error_message),
|
| + start_sync_callback_(start_sync_callback),
|
| + is_sync_dialog_(type!=BrowserWindow::ONE_CLICK_SIGNIN_BUBBLE_TYPE_BUBBLE),
|
| message_label_(NULL),
|
| advanced_link_(NULL),
|
| ok_button_(NULL),
|
| @@ -50,7 +52,7 @@ OneClickSigninBubbleGtk::OneClickSigninBubbleGtk(
|
|
|
| void OneClickSigninBubbleGtk::BubbleClosing(
|
| BubbleGtk* bubble, bool closed_by_escape) {
|
| - if (!start_sync_callback_.is_null()) {
|
| + if (is_sync_dialog_ && !start_sync_callback_.is_null()) {
|
| base::ResetAndReturn(&start_sync_callback_).Run(
|
| OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS);
|
| }
|
| @@ -65,40 +67,55 @@ void OneClickSigninBubbleGtk::BubbleClosing(
|
| }
|
|
|
| void OneClickSigninBubbleGtk::OnClickAdvancedLink(GtkWidget* link) {
|
| - OneClickSigninHelper::LogConfirmHistogramValue(
|
| + if (is_sync_dialog_) {
|
| + OneClickSigninHelper::LogConfirmHistogramValue(
|
| clicked_learn_more_ ?
|
| one_click_signin::HISTOGRAM_CONFIRM_LEARN_MORE_ADVANCED :
|
| one_click_signin::HISTOGRAM_CONFIRM_ADVANCED);
|
| - base::ResetAndReturn(&start_sync_callback_).Run(
|
| +
|
| + base::ResetAndReturn(&start_sync_callback_).Run(
|
| OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST);
|
| + } else {
|
| + Browser* browser = chrome::FindBrowserWithWindow(
|
| + gtk_window_get_transient_for(bubble_->GetNativeWindow()));
|
| + DCHECK(browser);
|
| + chrome::NavigateParams params(browser, GURL(chrome::kChromeUISettingsURL),
|
| + content::PAGE_TRANSITION_LINK);
|
| + params.disposition = CURRENT_TAB;
|
| + chrome::Navigate(¶ms);
|
| + }
|
| bubble_->Close();
|
| }
|
|
|
| void OneClickSigninBubbleGtk::OnClickOK(GtkWidget* link) {
|
| - OneClickSigninHelper::LogConfirmHistogramValue(
|
| + if (is_sync_dialog_) {
|
| + OneClickSigninHelper::LogConfirmHistogramValue(
|
| clicked_learn_more_ ?
|
| one_click_signin::HISTOGRAM_CONFIRM_LEARN_MORE_OK :
|
| one_click_signin::HISTOGRAM_CONFIRM_OK);
|
|
|
| - base::ResetAndReturn(&start_sync_callback_).Run(
|
| + base::ResetAndReturn(&start_sync_callback_).Run(
|
| OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS);
|
| + }
|
| bubble_->Close();
|
| }
|
|
|
| void OneClickSigninBubbleGtk::OnClickUndo(GtkWidget* link) {
|
| - OneClickSigninHelper::LogConfirmHistogramValue(
|
| + if (is_sync_dialog_) {
|
| + OneClickSigninHelper::LogConfirmHistogramValue(
|
| clicked_learn_more_ ?
|
| one_click_signin::HISTOGRAM_CONFIRM_LEARN_MORE_UNDO :
|
| one_click_signin::HISTOGRAM_CONFIRM_UNDO);
|
|
|
| - base::ResetAndReturn(&start_sync_callback_).Run(
|
| - OneClickSigninSyncStarter::UNDO_SYNC);
|
| + base::ResetAndReturn(&start_sync_callback_).Run(
|
| + OneClickSigninSyncStarter::UNDO_SYNC);
|
| + }
|
| bubble_->Close();
|
| }
|
|
|
| void OneClickSigninBubbleGtk::OnClickLearnMoreLink(GtkWidget* link) {
|
| - // We only want to log the Learn More click once per bubble instance.
|
| - if (!clicked_learn_more_) {
|
| + // We only want to log the Learn More click once per modal dialog instance.
|
| + if (is_sync_dialog_ && !clicked_learn_more_) {
|
| OneClickSigninHelper::LogConfirmHistogramValue(
|
| one_click_signin::HISTOGRAM_CONFIRM_LEARN_MORE);
|
| clicked_learn_more_ = true;
|
| @@ -110,6 +127,10 @@ void OneClickSigninBubbleGtk::OnClickLearnMoreLink(GtkWidget* link) {
|
| content::PAGE_TRANSITION_LINK);
|
| params.disposition = NEW_WINDOW;
|
| chrome::Navigate(¶ms);
|
| +
|
| + if (!is_sync_dialog_) {
|
| + bubble_->Close();
|
| + }
|
| }
|
|
|
| void OneClickSigninBubbleGtk::OnClickCloseButton(GtkWidget* button) {
|
| @@ -126,21 +147,22 @@ OneClickSigninBubbleGtk::~OneClickSigninBubbleGtk() {
|
|
|
| void OneClickSigninBubbleGtk::InitializeWidgets(
|
| BrowserWindowGtk* browser_window_gtk) {
|
| - // Message.
|
| - std::string message;
|
| - if (is_modal_) {
|
| - message = email_.empty() ?
|
| + // Main dialog/bubble message.
|
| + std::string label_text;
|
| + if (is_sync_dialog_) {
|
| + label_text = email_.empty() ?
|
| l10n_util::GetStringUTF8(IDS_ONE_CLICK_SIGNIN_DIALOG_MESSAGE) :
|
| l10n_util::GetStringFUTF8(IDS_ONE_CLICK_SIGNIN_DIALOG_MESSAGE_NEW,
|
| email_);
|
| } else {
|
| - message = l10n_util::GetStringUTF8(IDS_ONE_CLICK_SIGNIN_BUBBLE_MESSAGE);
|
| + label_text = !error_message_.empty() ? UTF16ToUTF8(error_message_):
|
| + l10n_util::GetStringUTF8(IDS_ONE_CLICK_SIGNIN_BUBBLE_MESSAGE);
|
| }
|
|
|
| - message_label_ = gtk_label_new(message.c_str());
|
| + message_label_ = gtk_label_new(label_text.c_str());
|
| gtk_label_set_line_wrap(GTK_LABEL(message_label_), TRUE);
|
| gtk_misc_set_alignment(GTK_MISC(message_label_), 0.0, 0.5);
|
| - if (is_modal_)
|
| + if (is_sync_dialog_)
|
| gtk_widget_set_size_request(message_label_, kModalDialogMessageWidth, -1);
|
|
|
| GtkThemeService* const theme_provider = GtkThemeService::GetFrom(
|
| @@ -149,39 +171,38 @@ void OneClickSigninBubbleGtk::InitializeWidgets(
|
| // Advanced link.
|
| advanced_link_ = theme_provider->BuildChromeLinkButton(
|
| l10n_util::GetStringUTF8(
|
| - is_modal_ ? IDS_ONE_CLICK_SIGNIN_DIALOG_ADVANCED :
|
| - IDS_SYNC_PROMO_NTP_BUBBLE_ADVANCED));
|
| + IDS_ONE_CLICK_SIGNIN_DIALOG_ADVANCED));
|
| g_signal_connect(advanced_link_, "clicked",
|
| G_CALLBACK(OnClickAdvancedLinkThunk), this);
|
|
|
| + // The 'Learn More...' link
|
| + learn_more_ = theme_provider->BuildChromeLinkButton(
|
| + l10n_util::GetStringUTF8(IDS_LEARN_MORE));
|
| + g_signal_connect(learn_more_, "clicked",
|
| + G_CALLBACK(OnClickLearnMoreLinkThunk), this);
|
| +
|
| // Make the OK and Undo buttons the same size horizontally.
|
| GtkSizeGroup* size_group = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
|
| // OK Button.
|
| ok_button_ = gtk_button_new_with_label(l10n_util::GetStringUTF8(
|
| - is_modal_ ? IDS_ONE_CLICK_SIGNIN_DIALOG_OK_BUTTON : IDS_OK).c_str());
|
| + is_sync_dialog_ ? IDS_ONE_CLICK_SIGNIN_DIALOG_OK_BUTTON :
|
| + IDS_OK).c_str());
|
| g_signal_connect(ok_button_, "clicked",
|
| G_CALLBACK(OnClickOKThunk), this);
|
| gtk_size_group_add_widget(size_group, ok_button_);
|
|
|
| - // Undo Button.
|
| + if (!is_sync_dialog_)
|
| + return;
|
| +
|
| + // The undo button is only in the modal dialog
|
| undo_button_ = gtk_button_new_with_label(l10n_util::GetStringUTF8(
|
| - is_modal_? IDS_ONE_CLICK_SIGNIN_DIALOG_UNDO_BUTTON :
|
| - IDS_ONE_CLICK_BUBBLE_UNDO).c_str());
|
| + IDS_ONE_CLICK_SIGNIN_DIALOG_UNDO_BUTTON).c_str());
|
| g_signal_connect(undo_button_, "clicked",
|
| G_CALLBACK(OnClickUndoThunk), this);
|
| gtk_size_group_add_widget(size_group, undo_button_);
|
|
|
| g_object_unref(size_group);
|
|
|
| - if (!is_modal_)
|
| - return;
|
| -
|
| - // The close button and the 'Learn More...' link are only in the modal dialog.
|
| - learn_more_ = theme_provider->BuildChromeLinkButton(
|
| - l10n_util::GetStringUTF8(IDS_LEARN_MORE));
|
| - g_signal_connect(learn_more_, "clicked",
|
| - G_CALLBACK(OnClickLearnMoreLinkThunk), this);
|
| -
|
| header_label_ = theme_provider->BuildLabel(email_.empty() ?
|
| l10n_util::GetStringUTF8(IDS_ONE_CLICK_SIGNIN_DIALOG_TITLE) :
|
| l10n_util::GetStringFUTF8(IDS_ONE_CLICK_SIGNIN_DIALOG_TITLE_NEW, email_),
|
| @@ -217,8 +238,13 @@ GtkWidget* OneClickSigninBubbleGtk::LayoutWidgets() {
|
|
|
| if (learn_more_) {
|
| GtkWidget* box = gtk_hbox_new(FALSE, ui::kControlSpacing);
|
| - gtk_box_pack_end(GTK_BOX(box),
|
| + if (is_sync_dialog_){
|
| + gtk_box_pack_end(GTK_BOX(box),
|
| + learn_more_, FALSE, FALSE, 0);
|
| + } else {
|
| + gtk_box_pack_start(GTK_BOX(box),
|
| learn_more_, FALSE, FALSE, 0);
|
| + }
|
| gtk_box_pack_start(GTK_BOX(content_widget),
|
| box, TRUE, TRUE, 0);
|
| }
|
| @@ -231,33 +257,41 @@ GtkWidget* OneClickSigninBubbleGtk::LayoutWidgets() {
|
| advanced_link_, FALSE, FALSE, 0);
|
| gtk_box_pack_end(GTK_BOX(bottom_line),
|
| ok_button_, FALSE, FALSE, 0);
|
| - gtk_box_pack_end(GTK_BOX(bottom_line),
|
| - undo_button_, FALSE, FALSE, 0);
|
| +
|
| + if (is_sync_dialog_) {
|
| + gtk_box_pack_end(GTK_BOX(bottom_line),
|
| + undo_button_, FALSE, FALSE, 0);
|
| + }
|
| return content_widget;
|
| }
|
|
|
| void OneClickSigninBubbleGtk::ShowWidget(BrowserWindowGtk* browser_window_gtk,
|
| GtkWidget* content_widget) {
|
| - OneClickSigninHelper::LogConfirmHistogramValue(
|
| - one_click_signin::HISTOGRAM_CONFIRM_SHOWN);
|
| + if (is_sync_dialog_) {
|
| + OneClickSigninHelper::LogConfirmHistogramValue(
|
| + one_click_signin::HISTOGRAM_CONFIRM_SHOWN);
|
| + }
|
| +
|
| GtkThemeService* const theme_provider = GtkThemeService::GetFrom(
|
| browser_window_gtk->browser()->profile());
|
|
|
| - GtkWidget* parent_widget = is_modal_ ?
|
| + GtkWidget* parent_widget = is_sync_dialog_ ?
|
| browser_window_gtk->GetToolbar()->widget() :
|
| browser_window_gtk->GetToolbar()->GetAppMenuButton();
|
| gfx::Rect bounds = gtk_util::WidgetBounds(parent_widget);
|
| - int flags = (is_modal_ ? BubbleGtk::NO_ACCELERATORS : BubbleGtk::GRAB_INPUT) |
|
| - BubbleGtk::MATCH_SYSTEM_THEME |
|
| - BubbleGtk::POPUP_WINDOW;
|
| + int flags = (is_sync_dialog_ ? BubbleGtk::NO_ACCELERATORS :
|
| + BubbleGtk::GRAB_INPUT) |
|
| + BubbleGtk::MATCH_SYSTEM_THEME |
|
| + BubbleGtk::POPUP_WINDOW;
|
| bubble_ = BubbleGtk::Show(parent_widget, &bounds, content_widget,
|
| - is_modal_ ? BubbleGtk::CENTER_OVER_RECT :
|
| + is_sync_dialog_ ? BubbleGtk::CENTER_OVER_RECT :
|
| BubbleGtk::ANCHOR_TOP_RIGHT,
|
| flags,
|
| theme_provider, this);
|
| - if (is_modal_) {
|
| - gtk_window_set_transient_for(bubble_->GetNativeWindow(),
|
| +
|
| + gtk_window_set_transient_for(bubble_->GetNativeWindow(),
|
| browser_window_gtk->GetNativeWindow());
|
| + if (is_sync_dialog_) {
|
| gtk_window_set_modal(bubble_->GetNativeWindow(), true);
|
| gtk_window_set_focus(bubble_->GetNativeWindow(), ok_button_);
|
| } else {
|
|
|