Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7)

Side by Side Diff: chrome/browser/gtk/options/general_page_gtk.cc

Issue 160218: Fix running default browser check/setting in UI thread on Linux.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/gtk/options/general_page_gtk.h ('k') | chrome/browser/shell_integration.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Property Changes:
Name: svn:eol-style
+ LF
OLDNEW
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
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
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
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
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
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 }
OLDNEW
« no previous file with comments | « chrome/browser/gtk/options/general_page_gtk.h ('k') | chrome/browser/shell_integration.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698