| OLD | NEW |
| 1 // Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/gtk/options/general_page_gtk.h" | 5 #include "chrome/browser/gtk/options/general_page_gtk.h" |
| 6 | 6 |
| 7 #include "app/l10n_util.h" | 7 #include "app/l10n_util.h" |
| 8 #include "chrome/browser/browser.h" | 8 #include "chrome/browser/browser.h" |
| 9 #include "chrome/browser/browser_list.h" | 9 #include "chrome/browser/browser_list.h" |
| 10 #include "chrome/browser/gtk/keyword_editor_view.h" | 10 #include "chrome/browser/gtk/keyword_editor_view.h" |
| 11 #include "chrome/browser/gtk/list_store_favicon_loader.h" | 11 #include "chrome/browser/gtk/list_store_favicon_loader.h" |
| 12 #include "chrome/browser/gtk/options/options_layout_gtk.h" | 12 #include "chrome/browser/gtk/options/options_layout_gtk.h" |
| 13 #include "chrome/browser/gtk/options/url_picker_dialog_gtk.h" | 13 #include "chrome/browser/gtk/options/url_picker_dialog_gtk.h" |
| 14 #include "chrome/browser/net/url_fixer_upper.h" | 14 #include "chrome/browser/net/url_fixer_upper.h" |
| 15 #include "chrome/browser/search_engines/template_url.h" | 15 #include "chrome/browser/search_engines/template_url.h" |
| 16 #include "chrome/browser/session_startup_pref.h" | 16 #include "chrome/browser/session_startup_pref.h" |
| 17 #include "chrome/browser/shell_integration.h" | |
| 18 #include "chrome/browser/tab_contents/tab_contents.h" | 17 #include "chrome/browser/tab_contents/tab_contents.h" |
| 19 #include "chrome/common/gtk_util.h" | 18 #include "chrome/common/gtk_util.h" |
| 20 #include "chrome/common/pref_names.h" | 19 #include "chrome/common/pref_names.h" |
| 21 #include "chrome/common/pref_service.h" | 20 #include "chrome/common/pref_service.h" |
| 22 #include "chrome/common/url_constants.h" | 21 #include "chrome/common/url_constants.h" |
| 23 #include "grit/chromium_strings.h" | 22 #include "grit/chromium_strings.h" |
| 24 #include "grit/generated_resources.h" | 23 #include "grit/generated_resources.h" |
| 25 | 24 |
| 26 namespace { | 25 namespace { |
| 27 | 26 |
| (...skipping 23 matching lines...) Expand all Loading... |
| 51 | 50 |
| 52 } | 51 } |
| 53 | 52 |
| 54 /////////////////////////////////////////////////////////////////////////////// | 53 /////////////////////////////////////////////////////////////////////////////// |
| 55 // GeneralPageGtk, public: | 54 // GeneralPageGtk, public: |
| 56 | 55 |
| 57 GeneralPageGtk::GeneralPageGtk(Profile* profile) | 56 GeneralPageGtk::GeneralPageGtk(Profile* profile) |
| 58 : OptionsPageBase(profile), | 57 : OptionsPageBase(profile), |
| 59 template_url_model_(NULL), | 58 template_url_model_(NULL), |
| 60 default_search_initializing_(true), | 59 default_search_initializing_(true), |
| 61 initializing_(true) { | 60 initializing_(true), |
| 61 default_browser_worker_( |
| 62 new ShellIntegration::DefaultBrowserWorker(this)) { |
| 62 OptionsLayoutBuilderGtk options_builder; | 63 OptionsLayoutBuilderGtk options_builder; |
| 63 options_builder.AddOptionGroup( | 64 options_builder.AddOptionGroup( |
| 64 l10n_util::GetStringUTF8(IDS_OPTIONS_STARTUP_GROUP_NAME), | 65 l10n_util::GetStringUTF8(IDS_OPTIONS_STARTUP_GROUP_NAME), |
| 65 InitStartupGroup(), true); | 66 InitStartupGroup(), true); |
| 66 options_builder.AddOptionGroup( | 67 options_builder.AddOptionGroup( |
| 67 l10n_util::GetStringUTF8(IDS_OPTIONS_HOMEPAGE_GROUP_NAME), | 68 l10n_util::GetStringUTF8(IDS_OPTIONS_HOMEPAGE_GROUP_NAME), |
| 68 InitHomepageGroup(), false); | 69 InitHomepageGroup(), false); |
| 69 options_builder.AddOptionGroup( | 70 options_builder.AddOptionGroup( |
| 70 l10n_util::GetStringUTF8(IDS_OPTIONS_DEFAULTSEARCH_GROUP_NAME), | 71 l10n_util::GetStringUTF8(IDS_OPTIONS_DEFAULTSEARCH_GROUP_NAME), |
| 71 InitDefaultSearchGroup(), false); | 72 InitDefaultSearchGroup(), false); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 86 NotifyPrefChanged(NULL); | 87 NotifyPrefChanged(NULL); |
| 87 } | 88 } |
| 88 | 89 |
| 89 GeneralPageGtk::~GeneralPageGtk() { | 90 GeneralPageGtk::~GeneralPageGtk() { |
| 90 profile()->GetPrefs()->RemovePrefObserver(prefs::kRestoreOnStartup, this); | 91 profile()->GetPrefs()->RemovePrefObserver(prefs::kRestoreOnStartup, this); |
| 91 profile()->GetPrefs()->RemovePrefObserver( | 92 profile()->GetPrefs()->RemovePrefObserver( |
| 92 prefs::kURLsToRestoreOnStartup, this); | 93 prefs::kURLsToRestoreOnStartup, this); |
| 93 | 94 |
| 94 if (template_url_model_) | 95 if (template_url_model_) |
| 95 template_url_model_->RemoveObserver(this); | 96 template_url_model_->RemoveObserver(this); |
| 97 |
| 98 default_browser_worker_->ObserverDestroyed(); |
| 96 } | 99 } |
| 97 | 100 |
| 98 /////////////////////////////////////////////////////////////////////////////// | 101 /////////////////////////////////////////////////////////////////////////////// |
| 99 // GeneralPageGtk, OptionsPageBase overrides: | 102 // GeneralPageGtk, OptionsPageBase overrides: |
| 100 | 103 |
| 101 void GeneralPageGtk::NotifyPrefChanged(const std::wstring* pref_name) { | 104 void GeneralPageGtk::NotifyPrefChanged(const std::wstring* pref_name) { |
| 102 initializing_ = true; | 105 initializing_ = true; |
| 103 if (!pref_name || *pref_name == prefs::kRestoreOnStartup) { | 106 if (!pref_name || *pref_name == prefs::kRestoreOnStartup) { |
| 104 PrefService* prefs = profile()->GetPrefs(); | 107 PrefService* prefs = profile()->GetPrefs(); |
| 105 const SessionStartupPref startup_pref = | 108 const SessionStartupPref startup_pref = |
| (...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 332 G_CALLBACK(OnDefaultSearchManageEnginesClicked), this); | 335 G_CALLBACK(OnDefaultSearchManageEnginesClicked), this); |
| 333 gtk_box_pack_end(GTK_BOX(hbox), default_search_manage_engines_button_, | 336 gtk_box_pack_end(GTK_BOX(hbox), default_search_manage_engines_button_, |
| 334 FALSE, FALSE, 0); | 337 FALSE, FALSE, 0); |
| 335 | 338 |
| 336 return hbox; | 339 return hbox; |
| 337 } | 340 } |
| 338 | 341 |
| 339 GtkWidget* GeneralPageGtk::InitDefaultBrowserGroup() { | 342 GtkWidget* GeneralPageGtk::InitDefaultBrowserGroup() { |
| 340 GtkWidget* vbox = gtk_vbox_new(FALSE, gtk_util::kControlSpacing); | 343 GtkWidget* vbox = gtk_vbox_new(FALSE, gtk_util::kControlSpacing); |
| 341 | 344 |
| 345 // TODO(mattm): the label should be created with a text like "checking for |
| 346 // default" to be displayed while we wait for the check to complete. |
| 342 default_browser_status_label_ = gtk_label_new(NULL); | 347 default_browser_status_label_ = gtk_label_new(NULL); |
| 343 gtk_box_pack_start(GTK_BOX(vbox), default_browser_status_label_, | 348 gtk_box_pack_start(GTK_BOX(vbox), default_browser_status_label_, |
| 344 FALSE, FALSE, 0); | 349 FALSE, FALSE, 0); |
| 345 | 350 |
| 346 default_browser_use_as_default_button_ = gtk_button_new_with_label( | 351 default_browser_use_as_default_button_ = gtk_button_new_with_label( |
| 347 l10n_util::GetStringFUTF8(IDS_OPTIONS_DEFAULTBROWSER_USEASDEFAULT, | 352 l10n_util::GetStringFUTF8(IDS_OPTIONS_DEFAULTBROWSER_USEASDEFAULT, |
| 348 l10n_util::GetStringUTF16(IDS_PRODUCT_NAME)).c_str()); | 353 l10n_util::GetStringUTF16(IDS_PRODUCT_NAME)).c_str()); |
| 349 g_signal_connect(G_OBJECT(default_browser_use_as_default_button_), "clicked", | 354 g_signal_connect(G_OBJECT(default_browser_use_as_default_button_), "clicked", |
| 350 G_CALLBACK(OnBrowserUseAsDefaultClicked), this); | 355 G_CALLBACK(OnBrowserUseAsDefaultClicked), this); |
| 351 gtk_box_pack_start(GTK_BOX(vbox), default_browser_use_as_default_button_, | 356 gtk_box_pack_start(GTK_BOX(vbox), default_browser_use_as_default_button_, |
| 352 FALSE, FALSE, 0); | 357 FALSE, FALSE, 0); |
| 353 | 358 |
| 354 GtkWidget* vbox_alignment = gtk_alignment_new(0.0, 0.5, 0.0, 0.0); | 359 GtkWidget* vbox_alignment = gtk_alignment_new(0.0, 0.5, 0.0, 0.0); |
| 355 gtk_container_add(GTK_CONTAINER(vbox_alignment), vbox); | 360 gtk_container_add(GTK_CONTAINER(vbox_alignment), vbox); |
| 356 | 361 |
| 357 SetDefaultBrowserUIState(ShellIntegration::IsDefaultBrowser()); | 362 default_browser_worker_->StartCheckDefaultBrowser(); |
| 358 | 363 |
| 359 return vbox_alignment; | 364 return vbox_alignment; |
| 360 } | 365 } |
| 361 | 366 |
| 362 // static | 367 // static |
| 363 void GeneralPageGtk::OnStartupRadioToggled(GtkToggleButton* toggle_button, | 368 void GeneralPageGtk::OnStartupRadioToggled(GtkToggleButton* toggle_button, |
| 364 GeneralPageGtk* general_page) { | 369 GeneralPageGtk* general_page) { |
| 365 if (general_page->initializing_) | 370 if (general_page->initializing_) |
| 366 return; | 371 return; |
| 367 if (!gtk_toggle_button_get_active(toggle_button)) { | 372 if (!gtk_toggle_button_get_active(toggle_button)) { |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 471 // static | 476 // static |
| 472 void GeneralPageGtk::OnDefaultSearchManageEnginesClicked( | 477 void GeneralPageGtk::OnDefaultSearchManageEnginesClicked( |
| 473 GtkButton* button, GeneralPageGtk* general_page) { | 478 GtkButton* button, GeneralPageGtk* general_page) { |
| 474 KeywordEditorView::Show(general_page->profile()); | 479 KeywordEditorView::Show(general_page->profile()); |
| 475 } | 480 } |
| 476 | 481 |
| 477 // static | 482 // static |
| 478 void GeneralPageGtk::OnBrowserUseAsDefaultClicked( | 483 void GeneralPageGtk::OnBrowserUseAsDefaultClicked( |
| 479 GtkButton* button, | 484 GtkButton* button, |
| 480 GeneralPageGtk* general_page) { | 485 GeneralPageGtk* general_page) { |
| 481 general_page->SetDefaultBrowserUIState( | 486 general_page->default_browser_worker_->StartSetAsDefaultBrowser(); |
| 482 ShellIntegration::SetAsDefaultBrowser()); | |
| 483 // If the user made Chrome the default browser, then he/she arguably wants | 487 // If the user made Chrome the default browser, then he/she arguably wants |
| 484 // to be notified when that changes. | 488 // to be notified when that changes. |
| 485 general_page->profile()->GetPrefs()->SetBoolean(prefs::kCheckDefaultBrowser, | 489 general_page->profile()->GetPrefs()->SetBoolean(prefs::kCheckDefaultBrowser, |
| 486 true); | 490 true); |
| 487 general_page->UserMetricsRecordAction(L"Options_SetAsDefaultBrowser", | 491 general_page->UserMetricsRecordAction(L"Options_SetAsDefaultBrowser", |
| 488 general_page->profile()->GetPrefs()); | 492 general_page->profile()->GetPrefs()); |
| 489 } | 493 } |
| 490 | 494 |
| 491 void GeneralPageGtk::SaveStartupPref() { | 495 void GeneralPageGtk::SaveStartupPref() { |
| 492 SessionStartupPref pref; | 496 SessionStartupPref pref; |
| (...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 673 | 677 |
| 674 void GeneralPageGtk::EnableCustomHomepagesControls(bool enable) { | 678 void GeneralPageGtk::EnableCustomHomepagesControls(bool enable) { |
| 675 gtk_widget_set_sensitive(startup_add_custom_page_button_, enable); | 679 gtk_widget_set_sensitive(startup_add_custom_page_button_, enable); |
| 676 gtk_widget_set_sensitive(startup_remove_custom_page_button_, | 680 gtk_widget_set_sensitive(startup_remove_custom_page_button_, |
| 677 enable && | 681 enable && |
| 678 gtk_tree_selection_count_selected_rows(startup_custom_pages_selection_)); | 682 gtk_tree_selection_count_selected_rows(startup_custom_pages_selection_)); |
| 679 gtk_widget_set_sensitive(startup_use_current_page_button_, enable); | 683 gtk_widget_set_sensitive(startup_use_current_page_button_, enable); |
| 680 gtk_widget_set_sensitive(startup_custom_pages_tree_, enable); | 684 gtk_widget_set_sensitive(startup_custom_pages_tree_, enable); |
| 681 } | 685 } |
| 682 | 686 |
| 683 void GeneralPageGtk::SetDefaultBrowserUIState(bool is_default) { | 687 void GeneralPageGtk::SetDefaultBrowserUIState( |
| 684 const char* color; | 688 ShellIntegration::DefaultBrowserUIState state) { |
| 689 const char* color = NULL; |
| 685 std::string text; | 690 std::string text; |
| 686 if (is_default) { | 691 if (state == ShellIntegration::STATE_DEFAULT) { |
| 687 color = kDefaultBrowserLabelColor; | 692 color = kDefaultBrowserLabelColor; |
| 688 text = l10n_util::GetStringFUTF8(IDS_OPTIONS_DEFAULTBROWSER_DEFAULT, | 693 text = l10n_util::GetStringFUTF8(IDS_OPTIONS_DEFAULTBROWSER_DEFAULT, |
| 689 l10n_util::GetStringUTF16(IDS_PRODUCT_NAME)); | 694 l10n_util::GetStringUTF16(IDS_PRODUCT_NAME)); |
| 690 } else { | 695 } else if (state == ShellIntegration::STATE_NOT_DEFAULT) { |
| 691 color = kNotDefaultBrowserLabelColor; | 696 color = kNotDefaultBrowserLabelColor; |
| 692 text = l10n_util::GetStringFUTF8(IDS_OPTIONS_DEFAULTBROWSER_NOTDEFAULT, | 697 text = l10n_util::GetStringFUTF8(IDS_OPTIONS_DEFAULTBROWSER_NOTDEFAULT, |
| 693 l10n_util::GetStringUTF16(IDS_PRODUCT_NAME)); | 698 l10n_util::GetStringUTF16(IDS_PRODUCT_NAME)); |
| 694 } | 699 } |
| 695 char* markup = g_markup_printf_escaped(kDefaultBrowserLabelMarkup, | 700 if (color) { |
| 696 color, text.c_str()); | 701 char* markup = g_markup_printf_escaped(kDefaultBrowserLabelMarkup, |
| 697 gtk_label_set_markup(GTK_LABEL(default_browser_status_label_), markup); | 702 color, text.c_str()); |
| 698 g_free(markup); | 703 gtk_label_set_markup(GTK_LABEL(default_browser_status_label_), markup); |
| 704 g_free(markup); |
| 705 } |
| 699 | 706 |
| 700 gtk_widget_set_sensitive(default_browser_use_as_default_button_, !is_default); | 707 gtk_widget_set_sensitive(default_browser_use_as_default_button_, |
| 708 state == ShellIntegration::STATE_NOT_DEFAULT); |
| 701 } | 709 } |
| OLD | NEW |