summaryrefslogtreecommitdiffstats
path: root/chrome/browser/ui/gtk
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/ui/gtk')
-rw-r--r--chrome/browser/ui/gtk/first_run_dialog.cc239
-rw-r--r--chrome/browser/ui/gtk/first_run_dialog.h37
2 files changed, 12 insertions, 264 deletions
diff --git a/chrome/browser/ui/gtk/first_run_dialog.cc b/chrome/browser/ui/gtk/first_run_dialog.cc
index 5d61dd0..e8e93fa 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_);
diff --git a/chrome/browser/ui/gtk/first_run_dialog.h b/chrome/browser/ui/gtk/first_run_dialog.h
index 67b8e6d..684dd29 100644
--- a/chrome/browser/ui/gtk/first_run_dialog.h
+++ b/chrome/browser/ui/gtk/first_run_dialog.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 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.
@@ -11,32 +11,20 @@ typedef struct _GtkWidget GtkWidget;
#include "base/compiler_specific.h"
#include "chrome/browser/first_run/first_run.h"
-#include "chrome/browser/search_engines/template_url_service_observer.h"
#include "ui/base/gtk/gtk_signal.h"
-class TemplateURL;
-class TemplateURLService;
-
-class FirstRunDialog : public TemplateURLServiceObserver {
+class FirstRunDialog {
public:
// Displays the first run UI for reporting opt-in, import data etc.
- static bool Show(Profile* profile, bool randomize_search_engine_order);
-
- virtual void OnTemplateURLServiceChanged() OVERRIDE;
+ static bool Show();
private:
- FirstRunDialog(Profile* profile,
- bool show_reporting_dialog,
- bool show_search_engines_dialog,
- int* response);
+ FirstRunDialog(bool show_reporting_dialog, int* response);
virtual ~FirstRunDialog();
CHROMEGTK_CALLBACK_1(FirstRunDialog, void, OnResponseDialog, int);
- CHROMEGTK_CALLBACK_0(FirstRunDialog, void, OnSearchEngineButtonClicked);
- CHROMEGTK_CALLBACK_0(FirstRunDialog, void, OnSearchEngineWindowDestroy);
CHROMEG_CALLBACK_0(FirstRunDialog, void, OnLearnMoreLinkClicked, GtkButton*);
- void ShowSearchEngineWindow();
void ShowReportingDialog();
// This method closes the first run window and quits the message loop so that
@@ -44,32 +32,15 @@ class FirstRunDialog : public TemplateURLServiceObserver {
// first run tasks are done.
void FirstRunDone();
- // The search engine choice window. This is created and shown before
- // |dialog_|.
- GtkWidget* search_engine_window_;
-
// Dialog that holds the bug reporting and default browser checkboxes.
GtkWidget* dialog_;
- // Container for the search engine choices.
- GtkWidget* search_engine_hbox_;
-
// Crash reporting checkbox
GtkWidget* report_crashes_;
// Make browser default checkbox
GtkWidget* make_default_;
- // Our current profile
- Profile* profile_;
-
- // Owned by the profile_.
- TemplateURLService* search_engines_model_;
-
- // The search engine the user chose, or NULL if the user has not chosen a
- // search engine.
- TemplateURL* chosen_search_engine_;
-
// Whether we should show the dialog asking the user whether to report
// crashes and usage stats.
bool show_reporting_dialog_;