Index: chrome/browser/gtk/options/general_page_gtk.cc |
=================================================================== |
--- chrome/browser/gtk/options/general_page_gtk.cc (revision 71352) |
+++ chrome/browser/gtk/options/general_page_gtk.cc (working copy) |
@@ -1,805 +0,0 @@ |
-// 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/options/general_page_gtk.h" |
- |
-#include <set> |
-#include <vector> |
- |
-#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/instant/instant_controller.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/profiles/profile.h" |
-#include "chrome/browser/search_engines/template_url.h" |
-#include "chrome/browser/search_engines/template_url_model.h" |
-#include "chrome/browser/ui/options/show_options_url.h" |
-#include "chrome/common/pref_names.h" |
-#include "chrome/common/url_constants.h" |
-#include "gfx/gtk_util.h" |
-#include "grit/chromium_strings.h" |
-#include "grit/generated_resources.h" |
- |
-namespace { |
- |
-// Markup for the text showing the current state of the default browser |
-const char kDefaultBrowserLabelMarkup[] = "<span color='#%s'>%s</span>"; |
- |
-// Color of the default browser text when Chromium is the default browser |
-const char kDefaultBrowserLabelColor[] = "008700"; |
- |
-// Color of the default browser text when Chromium is not the default browser |
-const char kNotDefaultBrowserLabelColor[] = "870000"; |
- |
-// Column ids for |startup_custom_pages_store_|. |
-enum { |
- COL_FAVICON, |
- COL_URL, |
- COL_TOOLTIP, |
- COL_COUNT, |
-}; |
- |
-// Column ids for |default_search_engines_model_|. |
-enum { |
- SEARCH_ENGINES_COL_INDEX, |
- SEARCH_ENGINES_COL_TITLE, |
- SEARCH_ENGINES_COL_COUNT, |
-}; |
- |
-bool IsNewTabUIURLString(const GURL& url) { |
- return url == GURL(chrome::kChromeUINewTabURL); |
-} |
- |
-} // namespace |
- |
-/////////////////////////////////////////////////////////////////////////////// |
-// GeneralPageGtk, public: |
- |
-GeneralPageGtk::GeneralPageGtk(Profile* profile) |
- : OptionsPageBase(profile), |
- template_url_model_(NULL), |
- instant_checkbox_(NULL), |
- default_search_initializing_(true), |
- initializing_(true), |
- default_browser_worker_( |
- new ShellIntegration::DefaultBrowserWorker(this)), |
- managed_prefs_banner_(profile->GetPrefs(), OPTIONS_PAGE_GENERAL) { |
- scoped_ptr<OptionsLayoutBuilderGtk> |
- options_builder(OptionsLayoutBuilderGtk::CreateOptionallyCompactLayout()); |
- page_ = options_builder->get_page_widget(); |
- accessible_widget_helper_.reset(new AccessibleWidgetHelper(page_, profile)); |
- |
- options_builder->AddWidget(managed_prefs_banner_.banner_widget(), false); |
- options_builder->AddOptionGroup( |
- l10n_util::GetStringUTF8(IDS_OPTIONS_STARTUP_GROUP_NAME), |
- InitStartupGroup(), true); |
- options_builder->AddOptionGroup( |
- l10n_util::GetStringUTF8(IDS_OPTIONS_HOMEPAGE_GROUP_NAME), |
- InitHomepageGroup(), false); |
- options_builder->AddOptionGroup( |
- l10n_util::GetStringUTF8(IDS_OPTIONS_DEFAULTSEARCH_GROUP_NAME), |
- InitDefaultSearchGroup(), false); |
-#if !defined(OS_CHROMEOS) |
- options_builder->AddOptionGroup( |
- l10n_util::GetStringUTF8(IDS_OPTIONS_DEFAULTBROWSER_GROUP_NAME), |
- InitDefaultBrowserGroup(), false); |
-#endif |
- |
- registrar_.Init(profile->GetPrefs()); |
- registrar_.Add(prefs::kRestoreOnStartup, this); |
- registrar_.Add(prefs::kURLsToRestoreOnStartup, this); |
- |
- new_tab_page_is_home_page_.Init(prefs::kHomePageIsNewTabPage, |
- profile->GetPrefs(), this); |
- 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); |
-} |
- |
-GeneralPageGtk::~GeneralPageGtk() { |
- if (template_url_model_) |
- template_url_model_->RemoveObserver(this); |
- |
- default_browser_worker_->ObserverDestroyed(); |
-} |
- |
-GtkWindow* GeneralPageGtk::GetWindow() { |
- return GTK_WINDOW(gtk_widget_get_toplevel(page_)); |
-} |
- |
-/////////////////////////////////////////////////////////////////////////////// |
-// GeneralPageGtk, OptionsPageBase overrides: |
- |
-void GeneralPageGtk::NotifyPrefChanged(const std::string* pref_name) { |
- initializing_ = true; |
- PrefService* prefs = profile()->GetPrefs(); |
- if (!pref_name || |
- *pref_name == prefs::kRestoreOnStartup || |
- *pref_name == prefs::kURLsToRestoreOnStartup) { |
- const SessionStartupPref startup_pref = |
- SessionStartupPref::GetStartupPref(prefs); |
- bool radio_buttons_enabled = !SessionStartupPref::TypeIsManaged(prefs); |
- bool restore_urls_enabled = !SessionStartupPref::URLsAreManaged(prefs); |
- switch (startup_pref.type) { |
- case SessionStartupPref::DEFAULT: |
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(startup_homepage_radio_), |
- TRUE); |
- restore_urls_enabled = false; |
- break; |
- |
- case SessionStartupPref::LAST: |
- gtk_toggle_button_set_active( |
- GTK_TOGGLE_BUTTON(startup_last_session_radio_), TRUE); |
- restore_urls_enabled = false; |
- break; |
- |
- case SessionStartupPref::URLS: |
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(startup_custom_radio_), |
- TRUE); |
- break; |
- } |
- gtk_widget_set_sensitive(startup_homepage_radio_, radio_buttons_enabled); |
- gtk_widget_set_sensitive(startup_last_session_radio_, |
- radio_buttons_enabled); |
- gtk_widget_set_sensitive(startup_custom_radio_, radio_buttons_enabled); |
- EnableCustomHomepagesControls(restore_urls_enabled); |
- startup_custom_pages_table_model_->SetURLs(startup_pref.urls); |
- } |
- |
- if (!pref_name || |
- *pref_name == prefs::kHomePageIsNewTabPage || |
- *pref_name == prefs::kHomePage) { |
- bool new_tab_page_is_home_page_managed = |
- new_tab_page_is_home_page_.IsManaged(); |
- bool homepage_managed = homepage_.IsManaged(); |
- bool homepage_url_is_new_tab = |
- IsNewTabUIURLString(GURL(homepage_.GetValue())); |
- bool homepage_is_new_tab = homepage_url_is_new_tab || |
- new_tab_page_is_home_page_.GetValue(); |
- // If HomepageIsNewTab is managed or |
- // Homepage is 'chrome://newtab' and managed, disable the radios. |
- bool disable_homepage_choice_buttons = |
- new_tab_page_is_home_page_managed || |
- (homepage_managed && homepage_url_is_new_tab); |
- if (!homepage_url_is_new_tab) { |
- gtk_entry_set_text(GTK_ENTRY(homepage_use_url_entry_), |
- homepage_.GetValue().c_str()); |
- } |
- UpdateHomepageIsNewTabRadio( |
- homepage_is_new_tab, !disable_homepage_choice_buttons); |
- EnableHomepageURLField(!homepage_is_new_tab); |
- } |
- |
- if (!pref_name || *pref_name == prefs::kShowHomeButton) { |
- gtk_toggle_button_set_active( |
- GTK_TOGGLE_BUTTON(homepage_show_home_button_checkbox_), |
- show_home_button_.GetValue()); |
- gtk_widget_set_sensitive( |
- homepage_show_home_button_checkbox_, |
- !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; |
-} |
- |
-void GeneralPageGtk::HighlightGroup(OptionsGroup highlight_group) { |
- // TODO(mattm): implement group highlighting |
-} |
- |
-/////////////////////////////////////////////////////////////////////////////// |
-// GeneralPageGtk, private: |
- |
-GtkWidget* GeneralPageGtk::InitStartupGroup() { |
- GtkWidget* vbox = gtk_vbox_new(FALSE, gtk_util::kControlSpacing); |
- |
- startup_homepage_radio_ = gtk_radio_button_new_with_label(NULL, |
- l10n_util::GetStringUTF8( |
- IDS_OPTIONS_STARTUP_SHOW_DEFAULT_AND_NEWTAB).c_str()); |
- g_signal_connect(startup_homepage_radio_, "toggled", |
- G_CALLBACK(OnStartupRadioToggledThunk), this); |
- gtk_box_pack_start(GTK_BOX(vbox), startup_homepage_radio_, FALSE, FALSE, 0); |
- |
- startup_last_session_radio_ = gtk_radio_button_new_with_label_from_widget( |
- GTK_RADIO_BUTTON(startup_homepage_radio_), |
- l10n_util::GetStringUTF8(IDS_OPTIONS_STARTUP_SHOW_LAST_SESSION).c_str()); |
- g_signal_connect(startup_last_session_radio_, "toggled", |
- G_CALLBACK(OnStartupRadioToggledThunk), this); |
- gtk_box_pack_start(GTK_BOX(vbox), startup_last_session_radio_, |
- FALSE, FALSE, 0); |
- |
- startup_custom_radio_ = gtk_radio_button_new_with_label_from_widget( |
- GTK_RADIO_BUTTON(startup_homepage_radio_), |
- l10n_util::GetStringUTF8(IDS_OPTIONS_STARTUP_SHOW_PAGES).c_str()); |
- g_signal_connect(startup_custom_radio_, "toggled", |
- G_CALLBACK(OnStartupRadioToggledThunk), this); |
- gtk_box_pack_start(GTK_BOX(vbox), startup_custom_radio_, FALSE, FALSE, 0); |
- |
- GtkWidget* url_list_container = gtk_hbox_new(FALSE, |
- gtk_util::kControlSpacing); |
- gtk_box_pack_start(GTK_BOX(vbox), url_list_container, TRUE, TRUE, 0); |
- |
- GtkWidget* scroll_window = gtk_scrolled_window_new(NULL, NULL); |
- gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll_window), |
- GTK_POLICY_AUTOMATIC, |
- GTK_POLICY_AUTOMATIC); |
- gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scroll_window), |
- GTK_SHADOW_ETCHED_IN); |
- gtk_container_add(GTK_CONTAINER(url_list_container), |
- scroll_window); |
- startup_custom_pages_store_ = gtk_list_store_new(COL_COUNT, |
- GDK_TYPE_PIXBUF, |
- G_TYPE_STRING, |
- G_TYPE_STRING); |
- startup_custom_pages_tree_ = gtk_tree_view_new_with_model( |
- GTK_TREE_MODEL(startup_custom_pages_store_)); |
- gtk_container_add(GTK_CONTAINER(scroll_window), startup_custom_pages_tree_); |
- |
- // Release |startup_custom_pages_store_| so that |startup_custom_pages_tree_| |
- // owns the model. |
- g_object_unref(startup_custom_pages_store_); |
- |
- gtk_tree_view_set_tooltip_column(GTK_TREE_VIEW(startup_custom_pages_tree_), |
- COL_TOOLTIP); |
- gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(startup_custom_pages_tree_), |
- FALSE); |
- GtkTreeViewColumn* column = gtk_tree_view_column_new(); |
- GtkCellRenderer* renderer = gtk_cell_renderer_pixbuf_new(); |
- gtk_tree_view_column_pack_start(column, renderer, FALSE); |
- gtk_tree_view_column_add_attribute(column, renderer, "pixbuf", COL_FAVICON); |
- renderer = gtk_cell_renderer_text_new(); |
- gtk_tree_view_column_pack_start(column, renderer, TRUE); |
- gtk_tree_view_column_add_attribute(column, renderer, "text", COL_URL); |
- gtk_tree_view_append_column(GTK_TREE_VIEW(startup_custom_pages_tree_), |
- column); |
- startup_custom_pages_selection_ = gtk_tree_view_get_selection( |
- GTK_TREE_VIEW(startup_custom_pages_tree_)); |
- gtk_tree_selection_set_mode(startup_custom_pages_selection_, |
- GTK_SELECTION_MULTIPLE); |
- g_signal_connect(startup_custom_pages_selection_, "changed", |
- G_CALLBACK(OnStartupPagesSelectionChangedThunk), this); |
- |
- startup_custom_pages_table_model_.reset( |
- new CustomHomePagesTableModel(profile())); |
- startup_custom_pages_table_adapter_.reset( |
- new gtk_tree::TableAdapter(this, startup_custom_pages_store_, |
- startup_custom_pages_table_model_.get())); |
- |
- GtkWidget* url_list_buttons = gtk_vbox_new(FALSE, gtk_util::kControlSpacing); |
- gtk_box_pack_end(GTK_BOX(url_list_container), url_list_buttons, |
- FALSE, FALSE, 0); |
- |
- startup_add_custom_page_button_ = gtk_button_new_with_mnemonic( |
- gfx::ConvertAcceleratorsFromWindowsStyle( |
- l10n_util::GetStringUTF8(IDS_OPTIONS_STARTUP_ADD_BUTTON)).c_str()); |
- g_signal_connect(startup_add_custom_page_button_, "clicked", |
- G_CALLBACK(OnStartupAddCustomPageClickedThunk), this); |
- gtk_box_pack_start(GTK_BOX(url_list_buttons), startup_add_custom_page_button_, |
- FALSE, FALSE, 0); |
- startup_remove_custom_page_button_ = gtk_button_new_with_mnemonic( |
- gfx::ConvertAcceleratorsFromWindowsStyle( |
- l10n_util::GetStringUTF8(IDS_OPTIONS_STARTUP_REMOVE_BUTTON)).c_str()); |
- g_signal_connect(startup_remove_custom_page_button_, "clicked", |
- G_CALLBACK(OnStartupRemoveCustomPageClickedThunk), this); |
- gtk_box_pack_start(GTK_BOX(url_list_buttons), |
- startup_remove_custom_page_button_, FALSE, FALSE, 0); |
- startup_use_current_page_button_ = gtk_button_new_with_mnemonic( |
- gfx::ConvertAcceleratorsFromWindowsStyle( |
- l10n_util::GetStringUTF8(IDS_OPTIONS_STARTUP_USE_CURRENT)).c_str()); |
- g_signal_connect(startup_use_current_page_button_, "clicked", |
- G_CALLBACK(OnStartupUseCurrentPageClickedThunk), this); |
- gtk_box_pack_start(GTK_BOX(url_list_buttons), |
- startup_use_current_page_button_, FALSE, FALSE, 0); |
- |
- return vbox; |
-} |
- |
-GtkWidget* GeneralPageGtk::InitHomepageGroup() { |
- GtkWidget* vbox = gtk_vbox_new(FALSE, gtk_util::kControlSpacing); |
- |
- homepage_use_newtab_radio_ = gtk_radio_button_new_with_label(NULL, |
- l10n_util::GetStringUTF8(IDS_OPTIONS_HOMEPAGE_USE_NEWTAB).c_str()); |
- g_signal_connect(homepage_use_newtab_radio_, "toggled", |
- G_CALLBACK(OnNewTabIsHomePageToggledThunk), this); |
- gtk_container_add(GTK_CONTAINER(vbox), homepage_use_newtab_radio_); |
- |
- GtkWidget* homepage_hbox = gtk_hbox_new(FALSE, gtk_util::kLabelSpacing); |
- gtk_container_add(GTK_CONTAINER(vbox), homepage_hbox); |
- |
- homepage_use_url_radio_ = gtk_radio_button_new_with_label_from_widget( |
- GTK_RADIO_BUTTON(homepage_use_newtab_radio_), |
- l10n_util::GetStringUTF8(IDS_OPTIONS_HOMEPAGE_USE_URL).c_str()); |
- g_signal_connect(homepage_use_url_radio_, "toggled", |
- G_CALLBACK(OnNewTabIsHomePageToggledThunk), this); |
- gtk_box_pack_start(GTK_BOX(homepage_hbox), homepage_use_url_radio_, |
- FALSE, FALSE, 0); |
- |
- homepage_use_url_entry_ = gtk_entry_new(); |
- g_signal_connect(homepage_use_url_entry_, "changed", |
- G_CALLBACK(OnHomepageUseUrlEntryChangedThunk), this); |
- gtk_box_pack_start(GTK_BOX(homepage_hbox), homepage_use_url_entry_, |
- TRUE, TRUE, 0); |
- |
- homepage_show_home_button_checkbox_ = gtk_check_button_new_with_label( |
- l10n_util::GetStringUTF8(IDS_OPTIONS_HOMEPAGE_SHOW_BUTTON).c_str()); |
- g_signal_connect(homepage_show_home_button_checkbox_, "toggled", |
- G_CALLBACK(OnShowHomeButtonToggledThunk), this); |
- gtk_container_add(GTK_CONTAINER(vbox), homepage_show_home_button_checkbox_); |
- |
- return vbox; |
-} |
- |
-GtkWidget* GeneralPageGtk::InitDefaultSearchGroup() { |
- 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, |
- G_TYPE_STRING); |
- default_search_engine_combobox_ = gtk_combo_box_new_with_model( |
- GTK_TREE_MODEL(default_search_engines_model_)); |
- g_object_unref(default_search_engines_model_); |
- g_signal_connect(default_search_engine_combobox_, "changed", |
- G_CALLBACK(OnDefaultSearchEngineChangedThunk), this); |
- gtk_container_add(GTK_CONTAINER(search_hbox), |
- default_search_engine_combobox_); |
- accessible_widget_helper_->SetWidgetName( |
- default_search_engine_combobox_, IDS_OPTIONS_DEFAULTSEARCH_GROUP_NAME); |
- |
- GtkCellRenderer* renderer = gtk_cell_renderer_text_new(); |
- gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(default_search_engine_combobox_), |
- renderer, TRUE); |
- gtk_cell_layout_set_attributes( |
- GTK_CELL_LAYOUT(default_search_engine_combobox_), renderer, |
- "text", SEARCH_ENGINES_COL_TITLE, |
- NULL); |
- |
- template_url_model_ = profile()->GetTemplateURLModel(); |
- if (template_url_model_) { |
- template_url_model_->Load(); |
- template_url_model_->AddObserver(this); |
- } |
- OnTemplateURLModelChanged(); |
- |
- default_search_manage_engines_button_ = gtk_button_new_with_label( |
- l10n_util::GetStringUTF8( |
- IDS_OPTIONS_DEFAULTSEARCH_MANAGE_ENGINES_LINK).c_str()); |
- g_signal_connect(default_search_manage_engines_button_, "clicked", |
- G_CALLBACK(OnDefaultSearchManageEnginesClickedThunk), this); |
- 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 vbox; |
-} |
- |
-GtkWidget* GeneralPageGtk::InitDefaultBrowserGroup() { |
- GtkWidget* vbox = gtk_vbox_new(FALSE, gtk_util::kControlSpacing); |
- |
- // TODO(mattm): the label should be created with a text like "checking for |
- // default" to be displayed while we wait for the check to complete. |
- default_browser_status_label_ = gtk_label_new(NULL); |
- gtk_box_pack_start(GTK_BOX(vbox), default_browser_status_label_, |
- FALSE, FALSE, 0); |
- |
- default_browser_use_as_default_button_ = gtk_button_new_with_label( |
- l10n_util::GetStringFUTF8(IDS_OPTIONS_DEFAULTBROWSER_USEASDEFAULT, |
- l10n_util::GetStringUTF16(IDS_PRODUCT_NAME)).c_str()); |
- g_signal_connect(default_browser_use_as_default_button_, "clicked", |
- G_CALLBACK(OnBrowserUseAsDefaultClickedThunk), this); |
- |
- gtk_box_pack_start(GTK_BOX(vbox), default_browser_use_as_default_button_, |
- FALSE, FALSE, 0); |
- |
- GtkWidget* vbox_alignment = gtk_alignment_new(0.0, 0.5, 0.0, 0.0); |
- gtk_container_add(GTK_CONTAINER(vbox_alignment), vbox); |
- |
- default_browser_worker_->StartCheckDefaultBrowser(); |
- |
- return vbox_alignment; |
-} |
- |
-void GeneralPageGtk::OnStartupRadioToggled(GtkWidget* toggle_button) { |
- if (initializing_) |
- return; |
- |
- if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toggle_button))) { |
- // When selecting a radio button, we get two signals (one for the old radio |
- // being toggled off, one for the new one being toggled on.) Ignore the |
- // signal for toggling off the old button. |
- return; |
- } |
- SaveStartupPref(); |
- if (toggle_button == startup_homepage_radio_) { |
- UserMetricsRecordAction(UserMetricsAction("Options_Startup_Homepage"), |
- profile()->GetPrefs()); |
- } else if (toggle_button == startup_last_session_radio_) { |
- UserMetricsRecordAction(UserMetricsAction("Options_Startup_LastSession"), |
- profile()->GetPrefs()); |
- } else if (toggle_button == startup_custom_radio_) { |
- UserMetricsRecordAction(UserMetricsAction("Options_Startup_Custom"), |
- profile()->GetPrefs()); |
- } |
-} |
- |
-void GeneralPageGtk::OnStartupAddCustomPageClicked(GtkWidget* button) { |
- new UrlPickerDialogGtk( |
- NewCallback(this, &GeneralPageGtk::OnAddCustomUrl), |
- profile(), |
- GetWindow()); |
-} |
- |
-void GeneralPageGtk::OnStartupRemoveCustomPageClicked(GtkWidget* button) { |
- RemoveSelectedCustomUrls(); |
-} |
- |
-void GeneralPageGtk::OnStartupUseCurrentPageClicked(GtkWidget* button) { |
- SetCustomUrlListFromCurrentPages(); |
-} |
- |
-void GeneralPageGtk::OnStartupPagesSelectionChanged( |
- GtkTreeSelection* selection) { |
- EnableCustomHomepagesControls(true); |
-} |
- |
-void GeneralPageGtk::OnNewTabIsHomePageToggled(GtkWidget* toggle_button) { |
- if (initializing_) |
- return; |
- if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toggle_button))) { |
- // Ignore the signal for toggling off the old button. |
- return; |
- } |
- if (toggle_button == homepage_use_newtab_radio_) { |
- UserMetricsRecordAction(UserMetricsAction("Options_Homepage_UseNewTab"), |
- profile()->GetPrefs()); |
- UpdateHomepagePrefs(); |
- EnableHomepageURLField(false); |
- } else if (toggle_button == homepage_use_url_radio_) { |
- UserMetricsRecordAction(UserMetricsAction("Options_Homepage_UseURL"), |
- profile()->GetPrefs()); |
- UpdateHomepagePrefs(); |
- EnableHomepageURLField(true); |
- } |
-} |
- |
-void GeneralPageGtk::OnHomepageUseUrlEntryChanged(GtkWidget* editable) { |
- if (initializing_) |
- return; |
- UpdateHomepagePrefs(); |
-} |
- |
-void GeneralPageGtk::OnShowHomeButtonToggled(GtkWidget* toggle_button) { |
- if (initializing_) |
- return; |
- bool enabled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toggle_button)); |
- show_home_button_.SetValue(enabled); |
- if (enabled) { |
- UserMetricsRecordAction( |
- UserMetricsAction("Options_Homepage_ShowHomeButton"), |
- profile()->GetPrefs()); |
- } else { |
- UserMetricsRecordAction( |
- UserMetricsAction("Options_Homepage_HideHomeButton"), |
- profile()->GetPrefs()); |
- } |
-} |
- |
-void GeneralPageGtk::OnInstantToggled(GtkWidget* toggle_button) { |
- if (initializing_) |
- return; |
- |
- bool enabled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toggle_button)); |
- |
- if (enabled) { |
- if (!instant_.GetValue()) |
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(instant_checkbox_), false); |
- browser::ShowInstantConfirmDialogIfNecessary(GetWindow(), profile()); |
- } else { |
- InstantController::Disable(profile()); |
- } |
- |
- // TODO(estade): UMA? |
-} |
- |
-void GeneralPageGtk::OnDefaultSearchEngineChanged(GtkWidget* combo_box) { |
- if (default_search_initializing_) |
- return; |
- SetDefaultSearchEngineFromComboBox(); |
-} |
- |
-void GeneralPageGtk::OnDefaultSearchManageEnginesClicked(GtkWidget* button) { |
- KeywordEditorView::Show(profile()); |
-} |
- |
-void GeneralPageGtk::OnBrowserUseAsDefaultClicked(GtkWidget* button) { |
- default_browser_worker_->StartSetAsDefaultBrowser(); |
- // If the user made Chrome the default browser, then he/she arguably wants |
- // to be notified when that changes. |
- profile()->GetPrefs()->SetBoolean(prefs::kCheckDefaultBrowser, true); |
- UserMetricsRecordAction(UserMetricsAction("Options_SetAsDefaultBrowser"), |
- profile()->GetPrefs()); |
-} |
- |
-void GeneralPageGtk::SaveStartupPref() { |
- SessionStartupPref pref; |
- |
- if (gtk_toggle_button_get_active( |
- GTK_TOGGLE_BUTTON(startup_last_session_radio_))) { |
- pref.type = SessionStartupPref::LAST; |
- } else if (gtk_toggle_button_get_active( |
- GTK_TOGGLE_BUTTON(startup_custom_radio_))) { |
- pref.type = SessionStartupPref::URLS; |
- } |
- |
- pref.urls = startup_custom_pages_table_model_->GetURLs(); |
- |
- SessionStartupPref::SetStartupPref(profile()->GetPrefs(), pref); |
-} |
- |
-void GeneralPageGtk::SetColumnValues(int row, GtkTreeIter* iter) { |
- SkBitmap bitmap = startup_custom_pages_table_model_->GetIcon(row); |
- GdkPixbuf* pixbuf = gfx::GdkPixbufFromSkBitmap(&bitmap); |
- string16 text = startup_custom_pages_table_model_->GetText(row, 0); |
- std::string tooltip = |
- UTF16ToUTF8(startup_custom_pages_table_model_->GetTooltip(row)); |
- gchar* escaped_tooltip = g_markup_escape_text(tooltip.c_str(), |
- tooltip.size()); |
- gtk_list_store_set(startup_custom_pages_store_, iter, |
- COL_FAVICON, pixbuf, |
- COL_URL, UTF16ToUTF8(text).c_str(), |
- COL_TOOLTIP, escaped_tooltip, |
- -1); |
- g_object_unref(pixbuf); |
- g_free(escaped_tooltip); |
-} |
- |
-void GeneralPageGtk::SetCustomUrlListFromCurrentPages() { |
- startup_custom_pages_table_model_->SetToCurrentlyOpenPages(); |
- |
- SaveStartupPref(); |
-} |
- |
-void GeneralPageGtk::OnAddCustomUrl(const GURL& url) { |
- // The restore URLs policy might have become managed while the dialog is |
- // displayed. While the model makes sure that no changes are made in this |
- // condition, we should still avoid the rest of the method otherwise |
- // graphic elements will become enabled. |
- if (SessionStartupPref::URLsAreManaged(profile()->GetPrefs())) |
- return; |
- std::set<int> indices; |
- gtk_tree::GetSelectedIndices(startup_custom_pages_selection_, &indices); |
- int index; |
- if (indices.empty()) |
- index = startup_custom_pages_table_model_->RowCount(); |
- else |
- index = *indices.begin() + 1; |
- startup_custom_pages_table_model_->Add(index, url); |
- |
- SaveStartupPref(); |
- |
- gtk_tree::SelectAndFocusRowNum(index, |
- GTK_TREE_VIEW(startup_custom_pages_tree_)); |
-} |
- |
-void GeneralPageGtk::RemoveSelectedCustomUrls() { |
- std::set<int> indices; |
- gtk_tree::GetSelectedIndices(startup_custom_pages_selection_, &indices); |
- |
- int selected_row = 0; |
- for (std::set<int>::reverse_iterator i = indices.rbegin(); |
- i != indices.rend(); ++i) { |
- startup_custom_pages_table_model_->Remove(*i); |
- selected_row = *i; |
- } |
- |
- SaveStartupPref(); |
- |
- // Select the next row after the last row deleted, or the above item if the |
- // latest item was deleted or nothing when the table doesn't have any items. |
- int row_count = startup_custom_pages_table_model_->RowCount(); |
- if (selected_row >= row_count) |
- selected_row = row_count - 1; |
- if (selected_row >= 0) { |
- gtk_tree::SelectAndFocusRowNum(selected_row, |
- GTK_TREE_VIEW(startup_custom_pages_tree_)); |
- } |
-} |
- |
-void GeneralPageGtk::OnTemplateURLModelChanged() { |
- if (!template_url_model_ || !template_url_model_->loaded()) { |
- EnableDefaultSearchEngineComboBox(false); |
- return; |
- } |
- default_search_initializing_ = true; |
- gtk_list_store_clear(default_search_engines_model_); |
- const TemplateURL* default_search_provider = |
- template_url_model_->GetDefaultSearchProvider(); |
- std::vector<const TemplateURL*> model_urls = |
- template_url_model_->GetTemplateURLs(); |
- bool populated = false; |
- for (size_t i = 0; i < model_urls.size(); ++i) { |
- if (!model_urls[i]->ShowInDefaultList()) |
- continue; |
- populated = true; |
- GtkTreeIter iter; |
- gtk_list_store_append(default_search_engines_model_, &iter); |
- gtk_list_store_set( |
- default_search_engines_model_, &iter, |
- SEARCH_ENGINES_COL_INDEX, i, |
- SEARCH_ENGINES_COL_TITLE, |
- WideToUTF8(model_urls[i]->short_name()).c_str(), |
- -1); |
- if (model_urls[i] == default_search_provider) { |
- gtk_combo_box_set_active_iter( |
- GTK_COMBO_BOX(default_search_engine_combobox_), &iter); |
- } |
- } |
- EnableDefaultSearchEngineComboBox(populated && |
- !template_url_model_->is_default_search_managed()); |
- default_search_initializing_ = false; |
-} |
- |
-void GeneralPageGtk::SetDefaultSearchEngineFromComboBox() { |
- GtkTreeIter iter; |
- if (!gtk_combo_box_get_active_iter( |
- GTK_COMBO_BOX(default_search_engine_combobox_), &iter)) { |
- return; |
- } |
- guint index; |
- gtk_tree_model_get(GTK_TREE_MODEL(default_search_engines_model_), &iter, |
- SEARCH_ENGINES_COL_INDEX, &index, |
- -1); |
- std::vector<const TemplateURL*> model_urls = |
- template_url_model_->GetTemplateURLs(); |
- if (index < model_urls.size()) |
- template_url_model_->SetDefaultSearchProvider(model_urls[index]); |
- else |
- NOTREACHED(); |
-} |
- |
-void GeneralPageGtk::EnableDefaultSearchEngineComboBox(bool enable) { |
- gtk_widget_set_sensitive(default_search_engine_combobox_, enable); |
-} |
- |
-void GeneralPageGtk::UpdateHomepagePrefs() { |
- const GURL& homepage = URLFixerUpper::FixupURL( |
- gtk_entry_get_text(GTK_ENTRY(homepage_use_url_entry_)), std::string()); |
- bool new_tab_page_is_home_page = |
- gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(homepage_use_newtab_radio_)); |
- if (IsNewTabUIURLString(homepage)) { |
- new_tab_page_is_home_page = true; |
- homepage_.SetValueIfNotManaged(std::string()); |
- } else if (!homepage.is_valid()) { |
- new_tab_page_is_home_page = true; |
- if (!homepage.has_host()) |
- homepage_.SetValueIfNotManaged(std::string()); |
- } else { |
- homepage_.SetValueIfNotManaged(homepage.spec()); |
- } |
- new_tab_page_is_home_page_.SetValueIfNotManaged(new_tab_page_is_home_page); |
-} |
- |
-void GeneralPageGtk::UpdateHomepageIsNewTabRadio(bool homepage_is_new_tab, |
- bool enabled) { |
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(homepage_use_newtab_radio_), |
- homepage_is_new_tab); |
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(homepage_use_url_radio_), |
- !homepage_is_new_tab); |
- gtk_widget_set_sensitive(homepage_use_newtab_radio_, enabled); |
- gtk_widget_set_sensitive(homepage_use_url_radio_, enabled); |
-} |
- |
-void GeneralPageGtk::EnableHomepageURLField(bool enabled) { |
- if (homepage_.IsManaged()) |
- enabled = false; |
- gtk_widget_set_sensitive(homepage_use_url_entry_, enabled); |
-} |
- |
-void GeneralPageGtk::EnableCustomHomepagesControls(bool enable) { |
- gtk_widget_set_sensitive(startup_add_custom_page_button_, enable); |
- gtk_widget_set_sensitive(startup_remove_custom_page_button_, |
- enable && |
- gtk_tree_selection_count_selected_rows(startup_custom_pages_selection_)); |
- gtk_widget_set_sensitive(startup_use_current_page_button_, enable); |
- gtk_widget_set_sensitive(startup_custom_pages_tree_, enable); |
-} |
- |
-void GeneralPageGtk::SetDefaultBrowserUIState( |
- ShellIntegration::DefaultBrowserUIState state) { |
- const char* color = NULL; |
- std::string text; |
- if (state == ShellIntegration::STATE_IS_DEFAULT) { |
- color = kDefaultBrowserLabelColor; |
- text = l10n_util::GetStringFUTF8(IDS_OPTIONS_DEFAULTBROWSER_DEFAULT, |
- l10n_util::GetStringUTF16(IDS_PRODUCT_NAME)); |
- } else if (state == ShellIntegration::STATE_NOT_DEFAULT) { |
- color = kNotDefaultBrowserLabelColor; |
- text = l10n_util::GetStringFUTF8(IDS_OPTIONS_DEFAULTBROWSER_NOTDEFAULT, |
- l10n_util::GetStringUTF16(IDS_PRODUCT_NAME)); |
- } else if (state == ShellIntegration::STATE_UNKNOWN) { |
- color = kNotDefaultBrowserLabelColor; |
- text = l10n_util::GetStringFUTF8(IDS_OPTIONS_DEFAULTBROWSER_UNKNOWN, |
- l10n_util::GetStringUTF16(IDS_PRODUCT_NAME)); |
- } |
- if (color) { |
- char* markup = g_markup_printf_escaped(kDefaultBrowserLabelMarkup, |
- color, text.c_str()); |
- gtk_label_set_markup(GTK_LABEL(default_browser_status_label_), markup); |
- g_free(markup); |
- } |
- |
- 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(), browser::InstantLearnMoreURL()); |
-} |