Index: chrome/browser/gtk/options/general_page_gtk.cc |
diff --git a/chrome/browser/gtk/options/general_page_gtk.cc b/chrome/browser/gtk/options/general_page_gtk.cc |
index c454ce82f6c475a673df90ff5ad74e781e4917c9..a708201a5ab798a98239e5ab4ecd7ee9877edb26 100644 |
--- a/chrome/browser/gtk/options/general_page_gtk.cc |
+++ b/chrome/browser/gtk/options/general_page_gtk.cc |
@@ -9,20 +9,25 @@ |
#include "app/l10n_util.h" |
#include "base/callback.h" |
+#include "base/command_line.h" |
#include "base/utf_string_conversions.h" |
#include "chrome/browser/custom_home_pages_table_model.h" |
#include "chrome/browser/gtk/accessible_widget_helper_gtk.h" |
+#include "chrome/browser/gtk/gtk_chrome_link_button.h" |
#include "chrome/browser/gtk/gtk_util.h" |
#include "chrome/browser/gtk/keyword_editor_view.h" |
#include "chrome/browser/gtk/options/managed_prefs_banner_gtk.h" |
#include "chrome/browser/gtk/options/options_layout_gtk.h" |
#include "chrome/browser/gtk/options/url_picker_dialog_gtk.h" |
+#include "chrome/browser/instant/instant_confirm_dialog.h" |
#include "chrome/browser/net/url_fixer_upper.h" |
#include "chrome/browser/prefs/pref_service.h" |
#include "chrome/browser/prefs/session_startup_pref.h" |
#include "chrome/browser/profile.h" |
#include "chrome/browser/search_engines/template_url.h" |
#include "chrome/browser/search_engines/template_url_model.h" |
+#include "chrome/browser/show_options_url.h" |
+#include "chrome/common/chrome_switches.h" |
#include "chrome/common/notification_service.h" |
#include "chrome/common/pref_names.h" |
#include "chrome/common/url_constants.h" |
@@ -68,6 +73,7 @@ bool IsNewTabUIURLString(const GURL& url) { |
GeneralPageGtk::GeneralPageGtk(Profile* profile) |
: OptionsPageBase(profile), |
template_url_model_(NULL), |
+ instant_checkbox_(NULL), |
default_search_initializing_(true), |
initializing_(true), |
default_browser_worker_( |
@@ -103,6 +109,8 @@ GeneralPageGtk::GeneralPageGtk(Profile* profile) |
homepage_.Init(prefs::kHomePage, profile->GetPrefs(), this); |
show_home_button_.Init(prefs::kShowHomeButton, profile->GetPrefs(), this); |
+ instant_.Init(prefs::kInstantEnabled, profile->GetPrefs(), this); |
+ |
// Load initial values |
NotifyPrefChanged(NULL); |
} |
@@ -186,6 +194,13 @@ void GeneralPageGtk::NotifyPrefChanged(const std::string* pref_name) { |
!show_home_button_.IsManaged()); |
} |
+ if ((!pref_name || *pref_name == prefs::kInstantEnabled) && |
+ instant_checkbox_) { |
+ gtk_toggle_button_set_active( |
+ GTK_TOGGLE_BUTTON(instant_checkbox_), |
+ instant_.GetValue()); |
+ } |
+ |
initializing_ = false; |
} |
@@ -336,7 +351,9 @@ GtkWidget* GeneralPageGtk::InitHomepageGroup() { |
} |
GtkWidget* GeneralPageGtk::InitDefaultSearchGroup() { |
- GtkWidget* hbox = gtk_hbox_new(FALSE, gtk_util::kControlSpacing); |
+ GtkWidget* vbox = gtk_vbox_new(FALSE, gtk_util::kControlSpacing); |
+ GtkWidget* search_hbox = gtk_hbox_new(FALSE, gtk_util::kControlSpacing); |
+ gtk_box_pack_start(GTK_BOX(vbox), search_hbox, FALSE, FALSE, 0); |
default_search_engines_model_ = gtk_list_store_new(SEARCH_ENGINES_COL_COUNT, |
G_TYPE_UINT, |
@@ -346,7 +363,8 @@ GtkWidget* GeneralPageGtk::InitDefaultSearchGroup() { |
g_object_unref(default_search_engines_model_); |
g_signal_connect(default_search_engine_combobox_, "changed", |
G_CALLBACK(OnDefaultSearchEngineChangedThunk), this); |
- gtk_container_add(GTK_CONTAINER(hbox), default_search_engine_combobox_); |
+ gtk_container_add(GTK_CONTAINER(search_hbox), |
+ default_search_engine_combobox_); |
accessible_widget_helper_->SetWidgetName( |
default_search_engine_combobox_, IDS_OPTIONS_DEFAULTSEARCH_GROUP_NAME); |
@@ -370,10 +388,46 @@ GtkWidget* GeneralPageGtk::InitDefaultSearchGroup() { |
IDS_OPTIONS_DEFAULTSEARCH_MANAGE_ENGINES_LINK).c_str()); |
g_signal_connect(default_search_manage_engines_button_, "clicked", |
G_CALLBACK(OnDefaultSearchManageEnginesClickedThunk), this); |
- gtk_box_pack_end(GTK_BOX(hbox), default_search_manage_engines_button_, |
- FALSE, FALSE, 0); |
+ gtk_box_pack_start(GTK_BOX(search_hbox), |
+ default_search_manage_engines_button_, FALSE, FALSE, 0); |
+ |
+ // When the instant lab is on, add some options for instant. We want the |
+ // warning text and link to align with the pref's checkbox's label. |
+ // Need a new vbox as we don't want any spacing between these labels. |
+ GtkWidget* instant_vbox = gtk_vbox_new(FALSE, 0); |
+ gtk_box_pack_start(GTK_BOX(vbox), instant_vbox, FALSE, FALSE, 0); |
+ |
+ instant_checkbox_ = gtk_check_button_new_with_label( |
+ l10n_util::GetStringUTF8(IDS_INSTANT_PREF).c_str()); |
+ g_signal_connect(instant_checkbox_, "toggled", |
+ G_CALLBACK(OnInstantToggledThunk), this); |
+ gtk_box_pack_start(GTK_BOX(instant_vbox), instant_checkbox_, FALSE, FALSE, 0); |
+ |
+ // Relies on knowledge of GTK+ internals to find the checkbox's label child |
+ // and then make the indent below match its vertical spacing. |
+ GtkWidget* instant_label = gtk_bin_get_child(GTK_BIN(instant_checkbox_)); |
+ if (instant_label && GTK_IS_LABEL(instant_label)) { |
+ g_signal_connect(instant_label, "size-allocate", |
+ G_CALLBACK(OnInstantLabelSizeAllocateThunk), this); |
+ } |
+ |
+ instant_indent_ = gtk_fixed_new(); |
+ GtkWidget* explanation_box = gtk_hbox_new(FALSE, 0); |
+ GtkWidget* explanation = gtk_label_new(( |
+ l10n_util::GetStringUTF8(IDS_INSTANT_PREF_WARNING) + " ").c_str()); |
+ GtkWidget* learn_more_link = gtk_chrome_link_button_new( |
+ l10n_util::GetStringUTF8(IDS_LEARN_MORE).c_str()); |
+ g_signal_connect(learn_more_link, "clicked", |
+ G_CALLBACK(OnSearchLearnMoreClickedThunk), this); |
+ gtk_box_pack_start(GTK_BOX(explanation_box), instant_indent_, |
+ FALSE, FALSE, 0); |
+ gtk_box_pack_start(GTK_BOX(explanation_box), explanation, |
+ FALSE, FALSE, 0); |
+ gtk_box_pack_start(GTK_BOX(explanation_box), learn_more_link, |
+ FALSE, FALSE, 0); |
+ gtk_box_pack_start(GTK_BOX(instant_vbox), explanation_box, FALSE, FALSE, 0); |
- return hbox; |
+ return vbox; |
} |
GtkWidget* GeneralPageGtk::InitDefaultBrowserGroup() { |
@@ -487,6 +541,17 @@ void GeneralPageGtk::OnShowHomeButtonToggled(GtkWidget* toggle_button) { |
} |
} |
+void GeneralPageGtk::OnInstantToggled(GtkWidget* toggle_button) { |
+ if (initializing_) |
+ return; |
+ |
+ // TODO(estade): show confirm dialog. |
+ bool enabled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toggle_button)); |
+ instant_.SetValue(enabled); |
+ |
+ // TODO(estade): UMA? |
+} |
+ |
void GeneralPageGtk::OnDefaultSearchEngineChanged(GtkWidget* combo_box) { |
if (default_search_initializing_) |
return; |
@@ -718,3 +783,16 @@ void GeneralPageGtk::SetDefaultBrowserUIState( |
gtk_widget_set_sensitive(default_browser_use_as_default_button_, |
state == ShellIntegration::STATE_NOT_DEFAULT); |
} |
+ |
+void GeneralPageGtk::OnInstantLabelSizeAllocate(GtkWidget* sender, |
+ GtkAllocation* allocation) { |
+ int desired_width = allocation->x - sender->parent->allocation.x; |
+ GtkRequisition req; |
+ gtk_widget_size_request(instant_indent_, &req); |
+ if (req.width != desired_width) |
+ gtk_widget_set_size_request(instant_indent_, desired_width, -1); |
+} |
+ |
+void GeneralPageGtk::OnSearchLearnMoreClicked(GtkWidget* sender) { |
+ browser::ShowOptionsURL(profile(), GURL(browser::kInstantLearnMoreURL)); |
+} |