diff options
Diffstat (limited to 'chrome/browser/gtk/instant_confirm_dialog_gtk.cc')
-rw-r--r-- | chrome/browser/gtk/instant_confirm_dialog_gtk.cc | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/chrome/browser/gtk/instant_confirm_dialog_gtk.cc b/chrome/browser/gtk/instant_confirm_dialog_gtk.cc new file mode 100644 index 0000000..c313cec --- /dev/null +++ b/chrome/browser/gtk/instant_confirm_dialog_gtk.cc @@ -0,0 +1,82 @@ +// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/gtk/instant_confirm_dialog_gtk.h" + +#include <gtk/gtk.h> + +#include "app/l10n_util.h" +#include "chrome/browser/gtk/gtk_chrome_link_button.h" +#include "chrome/browser/gtk/gtk_util.h" +#include "chrome/browser/instant/instant_confirm_dialog.h" +#include "chrome/browser/prefs/pref_service.h" +#include "chrome/browser/profile.h" +#include "chrome/browser/show_options_url.h" +#include "chrome/common/pref_names.h" +#include "googleurl/src/gurl.h" +#include "grit/generated_resources.h" + +namespace browser { + +void ShowInstantConfirmDialog(GtkWindow* parent, Profile* profile) { + new InstantConfirmDialogGtk(parent, profile); +} + +} // namespace browser + +InstantConfirmDialogGtk::InstantConfirmDialogGtk( + GtkWindow* parent, Profile* profile) : profile_(profile) { + dialog_ = gtk_dialog_new_with_buttons( + l10n_util::GetStringUTF8(IDS_INSTANT_OPT_IN_TITLE).c_str(), + parent, + static_cast<GtkDialogFlags>(GTK_DIALOG_MODAL | GTK_DIALOG_NO_SEPARATOR), + GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, + GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, + NULL); + g_signal_connect(dialog_, "response", + G_CALLBACK(OnDialogResponseThunk), this); + + GtkBox* vbox = GTK_BOX(GTK_DIALOG(dialog_)->vbox); + gtk_box_set_spacing(vbox, gtk_util::kControlSpacing); + + GtkWidget* label = gtk_label_new( + l10n_util::GetStringUTF8(IDS_INSTANT_OPT_IN_MESSAGE).c_str()); + gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); + gtk_box_pack_start(vbox, label, FALSE, FALSE, 0); + + GtkWidget* link_button = gtk_chrome_link_button_new( + l10n_util::GetStringUTF8(IDS_OPTIONS_LEARN_MORE_LABEL).c_str()); + g_signal_connect(link_button, "clicked", + G_CALLBACK(OnLinkButtonClickedThunk), this); + + GtkWidget* action_area = GTK_DIALOG(dialog_)->action_area; + gtk_container_add(GTK_CONTAINER(action_area), link_button); + gtk_button_box_set_child_secondary(GTK_BUTTON_BOX(action_area), + link_button, + TRUE); + + gtk_dialog_set_default_response(GTK_DIALOG(dialog_), GTK_RESPONSE_ACCEPT); + gtk_widget_show_all(dialog_); +} + +InstantConfirmDialogGtk::~InstantConfirmDialogGtk() { + gtk_widget_destroy(dialog_); +} + +void InstantConfirmDialogGtk::OnDialogResponse(GtkWidget* dialog, + int response) { + if (response == GTK_RESPONSE_ACCEPT) { + PrefService* service = profile_->GetPrefs(); + if (service) { + service->SetBoolean(prefs::kInstantEnabled, true); + service->SetBoolean(prefs::kInstantConfirmDialogShown, true); + } + } + + delete this; +} + +void InstantConfirmDialogGtk::OnLinkButtonClicked(GtkWidget* button) { + browser::ShowOptionsURL(profile_, GURL(browser::kInstantLearnMoreURL)); +} |