| Index: chrome/browser/ui/gtk/first_run_dialog.cc
|
| diff --git a/chrome/browser/ui/gtk/first_run_dialog.cc b/chrome/browser/ui/gtk/first_run_dialog.cc
|
| index 5d61dd07cc90cf85ffcb16cbd5351bbc89554959..e8e93fa65491a31f659399e1f6de08f9bb3b7733 100644
|
| --- a/chrome/browser/ui/gtk/first_run_dialog.cc
|
| +++ b/chrome/browser/ui/gtk/first_run_dialog.cc
|
| @@ -14,10 +14,6 @@
|
| #include "chrome/browser/google/google_util.h"
|
| #include "chrome/browser/platform_util.h"
|
| #include "chrome/browser/process_singleton.h"
|
| -#include "chrome/browser/profiles/profile.h"
|
| -#include "chrome/browser/search_engines/template_url.h"
|
| -#include "chrome/browser/search_engines/template_url_service.h"
|
| -#include "chrome/browser/search_engines/template_url_service_factory.h"
|
| #include "chrome/browser/shell_integration.h"
|
| #include "chrome/browser/ui/gtk/gtk_chrome_link_button.h"
|
| #include "chrome/browser/ui/gtk/gtk_util.h"
|
| @@ -32,7 +28,6 @@
|
| #include "ui/base/gtk/gtk_hig_constants.h"
|
| #include "ui/base/l10n/l10n_util.h"
|
| #include "ui/base/resource/resource_bundle.h"
|
| -#include "ui/gfx/image/image.h"
|
|
|
| #if defined(USE_LINUX_BREAKPAD)
|
| #include "chrome/app/breakpad_linux.h"
|
| @@ -45,28 +40,6 @@
|
|
|
| namespace {
|
|
|
| -const gchar* kSearchEngineKey = "template-url-search-engine";
|
| -
|
| -// Height of the label that displays the search engine's logo (in lieu of the
|
| -// actual logo) in chromium.
|
| -const int kLogoLabelHeight = 100;
|
| -
|
| -// Size of the small logo (for when we show 4 search engines).
|
| -const int kLogoLabelWidthSmall = 132;
|
| -const int kLogoLabelHeightSmall = 88;
|
| -
|
| -// The number of search engine options we normally show. It may be less than
|
| -// this number if there are not enough search engines for the current locale,
|
| -// or more if the user's imported default is not one of the top search engines
|
| -// for the current locale.
|
| -const size_t kNormalBallotSize = 3;
|
| -
|
| -// The width of the explanatory label. The 180 is the width of the large images.
|
| -const int kExplanationWidth = kNormalBallotSize * 180;
|
| -
|
| -// Horizontal spacing between search engine choices.
|
| -const int kSearchEngineSpacing = 6;
|
| -
|
| // Set the (x, y) coordinates of the welcome message (which floats on top of
|
| // the omnibox image at the top of the first run dialog).
|
| void SetWelcomePosition(GtkFloatingContainer* container,
|
| @@ -96,23 +69,14 @@ void SetWelcomePosition(GtkFloatingContainer* container,
|
|
|
| namespace first_run {
|
|
|
| -void ShowFirstRunDialog(Profile* profile,
|
| - bool randomize_search_engine_order) {
|
| - FirstRunDialog::Show(profile, randomize_search_engine_order);
|
| +void ShowFirstRunDialog(Profile* profile) {
|
| + FirstRunDialog::Show();
|
| }
|
|
|
| } // namespace first_run
|
|
|
| // static
|
| -bool FirstRunDialog::Show(Profile* profile,
|
| - bool randomize_search_engine_order) {
|
| - // Figure out which dialogs we will show.
|
| - // If the default search is managed via policy, we won't ask.
|
| - const TemplateURLService* search_engines_model =
|
| - TemplateURLServiceFactory::GetForProfile(profile);
|
| - bool show_search_engines_dialog =
|
| - first_run::ShouldShowSearchEngineSelector(search_engines_model);
|
| -
|
| +bool FirstRunDialog::Show() {
|
| #if defined(GOOGLE_CHROME_BUILD)
|
| // If the metrics reporting is managed, we won't ask.
|
| const PrefService::Preference* metrics_reporting_pref =
|
| @@ -124,15 +88,12 @@ bool FirstRunDialog::Show(Profile* profile,
|
| bool show_reporting_dialog = false;
|
| #endif
|
|
|
| - if (!show_search_engines_dialog && !show_reporting_dialog)
|
| + if (!show_reporting_dialog)
|
| return true; // Nothing to do
|
|
|
| int response = -1;
|
| // Object deletes itself.
|
| - new FirstRunDialog(profile,
|
| - show_reporting_dialog,
|
| - show_search_engines_dialog,
|
| - &response);
|
| + new FirstRunDialog(show_reporting_dialog, &response);
|
|
|
| // TODO(port): it should be sufficient to just run the dialog:
|
| // int response = gtk_dialog_run(GTK_DIALOG(dialog));
|
| @@ -144,103 +105,18 @@ bool FirstRunDialog::Show(Profile* profile,
|
| return (response == GTK_RESPONSE_ACCEPT);
|
| }
|
|
|
| -FirstRunDialog::FirstRunDialog(Profile* profile,
|
| - bool show_reporting_dialog,
|
| - bool show_search_engines_dialog,
|
| - int* response)
|
| - : search_engine_window_(NULL),
|
| - dialog_(NULL),
|
| +FirstRunDialog::FirstRunDialog(bool show_reporting_dialog, int* response)
|
| + : dialog_(NULL),
|
| report_crashes_(NULL),
|
| make_default_(NULL),
|
| - profile_(profile),
|
| - chosen_search_engine_(NULL),
|
| show_reporting_dialog_(show_reporting_dialog),
|
| response_(response) {
|
| - if (!show_search_engines_dialog) {
|
| - ShowReportingDialog();
|
| - return;
|
| - }
|
| - search_engines_model_ = TemplateURLServiceFactory::GetForProfile(profile_);
|
| -
|
| - ShowSearchEngineWindow();
|
| -
|
| - search_engines_model_->AddObserver(this);
|
| - if (search_engines_model_->loaded())
|
| - OnTemplateURLServiceChanged();
|
| - else
|
| - search_engines_model_->Load();
|
| + ShowReportingDialog();
|
| }
|
|
|
| FirstRunDialog::~FirstRunDialog() {
|
| }
|
|
|
| -void FirstRunDialog::ShowSearchEngineWindow() {
|
| - search_engine_window_ = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
| - gtk_window_set_deletable(GTK_WINDOW(search_engine_window_), FALSE);
|
| - gtk_window_set_title(
|
| - GTK_WINDOW(search_engine_window_),
|
| - l10n_util::GetStringUTF8(IDS_FIRSTRUN_DLG_TITLE).c_str());
|
| - gtk_window_set_resizable(GTK_WINDOW(search_engine_window_), FALSE);
|
| - g_signal_connect(search_engine_window_, "destroy",
|
| - G_CALLBACK(OnSearchEngineWindowDestroyThunk), this);
|
| - GtkWidget* content_area = gtk_vbox_new(FALSE, 0);
|
| - gtk_container_add(GTK_CONTAINER(search_engine_window_), content_area);
|
| -
|
| - GdkPixbuf* pixbuf =
|
| - ui::ResourceBundle::GetSharedInstance().GetRTLEnabledPixbufNamed(
|
| - IDR_SEARCH_ENGINE_DIALOG_TOP);
|
| - GtkWidget* top_image = gtk_image_new_from_pixbuf(pixbuf);
|
| - // Right align the image.
|
| - gtk_misc_set_alignment(GTK_MISC(top_image), 1, 0);
|
| - gtk_widget_set_size_request(top_image, 0, -1);
|
| -
|
| - GtkWidget* welcome_message = gtk_util::CreateBoldLabel(
|
| - l10n_util::GetStringUTF8(IDS_FR_SEARCH_MAIN_LABEL));
|
| - // Force the font size to make sure the label doesn't overlap the image.
|
| - // 13.4px == 10pt @ 96dpi
|
| - gtk_util::ForceFontSizePixels(welcome_message, 13.4);
|
| -
|
| - GtkWidget* top_area = gtk_floating_container_new();
|
| - gtk_container_add(GTK_CONTAINER(top_area), top_image);
|
| - gtk_floating_container_add_floating(GTK_FLOATING_CONTAINER(top_area),
|
| - welcome_message);
|
| - g_signal_connect(top_area, "set-floating-position",
|
| - G_CALLBACK(SetWelcomePosition), welcome_message);
|
| -
|
| - gtk_box_pack_start(GTK_BOX(content_area), top_area,
|
| - FALSE, FALSE, 0);
|
| -
|
| - GtkWidget* bubble_area_background = gtk_event_box_new();
|
| - gtk_widget_modify_bg(bubble_area_background,
|
| - GTK_STATE_NORMAL, &ui::kGdkWhite);
|
| -
|
| - GtkWidget* bubble_area_box = gtk_vbox_new(FALSE, 0);
|
| - gtk_container_set_border_width(GTK_CONTAINER(bubble_area_box),
|
| - ui::kContentAreaSpacing);
|
| - gtk_container_add(GTK_CONTAINER(bubble_area_background),
|
| - bubble_area_box);
|
| -
|
| - GtkWidget* explanation = gtk_label_new(
|
| - l10n_util::GetStringFUTF8(IDS_FR_SEARCH_TEXT,
|
| - l10n_util::GetStringUTF16(IDS_PRODUCT_NAME)).c_str());
|
| - gtk_util::SetLabelColor(explanation, &ui::kGdkBlack);
|
| - gtk_util::SetLabelWidth(explanation, kExplanationWidth);
|
| - gtk_box_pack_start(GTK_BOX(bubble_area_box), explanation, FALSE, FALSE, 0);
|
| -
|
| - // We will fill this in after the TemplateURLService has loaded.
|
| - // GtkHButtonBox because we want all children to have the same size.
|
| - search_engine_hbox_ = gtk_hbutton_box_new();
|
| - gtk_box_set_spacing(GTK_BOX(search_engine_hbox_), kSearchEngineSpacing);
|
| - gtk_box_pack_start(GTK_BOX(bubble_area_box), search_engine_hbox_,
|
| - FALSE, FALSE, 0);
|
| -
|
| - gtk_box_pack_start(GTK_BOX(content_area), bubble_area_background,
|
| - TRUE, TRUE, 0);
|
| -
|
| - gtk_widget_show_all(content_area);
|
| - gtk_window_present(GTK_WINDOW(search_engine_window_));
|
| -}
|
| -
|
| void FirstRunDialog::ShowReportingDialog() {
|
| // The purpose of the dialog is to ask the user to enable stats and crash
|
| // reporting. This setting may be controlled through configuration management
|
| @@ -299,105 +175,6 @@ void FirstRunDialog::ShowReportingDialog() {
|
| gtk_widget_show_all(dialog_);
|
| }
|
|
|
| -void FirstRunDialog::OnTemplateURLServiceChanged() {
|
| - // We only watch the search engine model change once, on load. Remove
|
| - // observer so we don't try to redraw if engines change under us.
|
| - search_engines_model_->RemoveObserver(this);
|
| -
|
| - // Add search engines in |search_engines_model_| to buttons list.
|
| - std::vector<const TemplateURL*> ballot_engines =
|
| - search_engines_model_->GetTemplateURLs();
|
| - // Drop any not in the first 3.
|
| - if (ballot_engines.size() > kNormalBallotSize)
|
| - ballot_engines.resize(kNormalBallotSize);
|
| -
|
| - const TemplateURL* default_search_engine =
|
| - search_engines_model_->GetDefaultSearchProvider();
|
| - if (std::find(ballot_engines.begin(),
|
| - ballot_engines.end(),
|
| - default_search_engine) ==
|
| - ballot_engines.end()) {
|
| - ballot_engines.push_back(default_search_engine);
|
| - }
|
| -
|
| - std::string choose_text = l10n_util::GetStringUTF8(IDS_FR_SEARCH_CHOOSE);
|
| - for (std::vector<const TemplateURL*>::iterator search_engine_iter =
|
| - ballot_engines.begin();
|
| - search_engine_iter < ballot_engines.end();
|
| - ++search_engine_iter) {
|
| - // Create a container for the search engine widgets.
|
| - GtkWidget* vbox = gtk_vbox_new(FALSE, ui::kControlSpacing);
|
| -
|
| - // We show text on Chromium and images on Google Chrome.
|
| - bool show_images = false;
|
| -#if defined(GOOGLE_CHROME_BUILD)
|
| - show_images = true;
|
| -#endif
|
| -
|
| - // Create the image (maybe).
|
| - int logo_id = (*search_engine_iter)->logo_id();
|
| - if (show_images && logo_id > 0) {
|
| - GdkPixbuf* pixbuf =
|
| - ui::ResourceBundle::GetSharedInstance().GetNativeImageNamed(logo_id);
|
| - if (ballot_engines.size() > kNormalBallotSize) {
|
| - GdkPixbuf* old = pixbuf;
|
| - pixbuf = gdk_pixbuf_scale_simple(pixbuf,
|
| - kLogoLabelWidthSmall,
|
| - kLogoLabelHeightSmall,
|
| - GDK_INTERP_HYPER);
|
| - g_object_unref(old);
|
| - } else {
|
| - g_object_ref(pixbuf);
|
| - }
|
| -
|
| - GtkWidget* image = gtk_image_new_from_pixbuf(pixbuf);
|
| - gtk_box_pack_start(GTK_BOX(vbox), image, FALSE, FALSE, 0);
|
| - g_object_unref(pixbuf);
|
| - } else {
|
| - GtkWidget* logo_label = gtk_label_new(NULL);
|
| - char* markup = g_markup_printf_escaped(
|
| - "<span weight='bold' size='x-large' color='black'>%s</span>",
|
| - UTF16ToUTF8((*search_engine_iter)->short_name()).c_str());
|
| - gtk_label_set_markup(GTK_LABEL(logo_label), markup);
|
| - g_free(markup);
|
| - gtk_widget_set_size_request(logo_label, -1,
|
| - ballot_engines.size() > kNormalBallotSize ? kLogoLabelHeightSmall :
|
| - kLogoLabelHeight);
|
| - gtk_box_pack_start(GTK_BOX(vbox), logo_label, FALSE, FALSE, 0);
|
| - }
|
| -
|
| - // Create the button.
|
| - GtkWidget* button = gtk_button_new_with_label(choose_text.c_str());
|
| - g_signal_connect(button, "clicked",
|
| - G_CALLBACK(OnSearchEngineButtonClickedThunk), this);
|
| - g_object_set_data(G_OBJECT(button), kSearchEngineKey,
|
| - const_cast<TemplateURL*>(*search_engine_iter));
|
| -
|
| - GtkWidget* button_centerer = gtk_hbox_new(FALSE, 0);
|
| - gtk_box_pack_start(GTK_BOX(button_centerer), button, TRUE, FALSE, 0);
|
| - gtk_box_pack_start(GTK_BOX(vbox), button_centerer, FALSE, FALSE, 0);
|
| -
|
| - gtk_container_add(GTK_CONTAINER(search_engine_hbox_), vbox);
|
| - gtk_widget_show_all(search_engine_hbox_);
|
| - }
|
| -}
|
| -
|
| -void FirstRunDialog::OnSearchEngineButtonClicked(GtkWidget* sender) {
|
| - chosen_search_engine_ = static_cast<TemplateURL*>(
|
| - g_object_get_data(G_OBJECT(sender), kSearchEngineKey));
|
| - gtk_widget_destroy(search_engine_window_);
|
| -}
|
| -
|
| -void FirstRunDialog::OnSearchEngineWindowDestroy(GtkWidget* sender) {
|
| - search_engine_window_ = NULL;
|
| - if (chosen_search_engine_) {
|
| - search_engines_model_->SetDefaultSearchProvider(chosen_search_engine_);
|
| - ShowReportingDialog();
|
| - } else {
|
| - FirstRunDone();
|
| - }
|
| -}
|
| -
|
| void FirstRunDialog::OnResponseDialog(GtkWidget* widget, int response) {
|
| if (dialog_)
|
| gtk_widget_hide_all(dialog_);
|
|
|