OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/ui/gtk/gtk_theme_service.h" | 5 #include "chrome/browser/ui/gtk/gtk_theme_service.h" |
6 | 6 |
7 #include <gtk/gtk.h> | 7 #include <gtk/gtk.h> |
8 | 8 |
9 #include <set> | 9 #include <set> |
10 #include <string> | 10 #include <string> |
11 | 11 |
12 #include "base/debug/trace_event.h" | 12 #include "base/debug/trace_event.h" |
13 #include "base/environment.h" | 13 #include "base/environment.h" |
| 14 #include "base/nix/mime_util_xdg.h" |
14 #include "base/nix/xdg_util.h" | 15 #include "base/nix/xdg_util.h" |
15 #include "base/prefs/pref_service.h" | 16 #include "base/prefs/pref_service.h" |
16 #include "base/stl_util.h" | 17 #include "base/stl_util.h" |
17 #include "chrome/browser/profiles/profile.h" | 18 #include "chrome/browser/profiles/profile.h" |
18 #include "chrome/browser/themes/theme_service_factory.h" | 19 #include "chrome/browser/themes/theme_service_factory.h" |
19 #include "chrome/browser/ui/browser.h" | 20 #include "chrome/browser/ui/browser.h" |
20 #include "chrome/browser/ui/browser_iterator.h" | 21 #include "chrome/browser/ui/browser_iterator.h" |
21 #include "chrome/browser/ui/browser_window.h" | 22 #include "chrome/browser/ui/browser_window.h" |
22 #include "chrome/browser/ui/gtk/chrome_gtk_frame.h" | 23 #include "chrome/browser/ui/gtk/chrome_gtk_frame.h" |
23 #include "chrome/browser/ui/gtk/gtk_chrome_button.h" | 24 #include "chrome/browser/ui/gtk/gtk_chrome_button.h" |
(...skipping 597 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
621 } | 622 } |
622 | 623 |
623 void GtkThemeService::LoadThemePrefs() { | 624 void GtkThemeService::LoadThemePrefs() { |
624 if (use_gtk_) { | 625 if (use_gtk_) { |
625 LoadGtkValues(); | 626 LoadGtkValues(); |
626 } else { | 627 } else { |
627 LoadDefaultValues(); | 628 LoadDefaultValues(); |
628 ThemeService::LoadThemePrefs(); | 629 ThemeService::LoadThemePrefs(); |
629 } | 630 } |
630 | 631 |
| 632 SetXDGIconTheme(); |
631 RebuildMenuIconSets(); | 633 RebuildMenuIconSets(); |
632 } | 634 } |
633 | 635 |
634 void GtkThemeService::NotifyThemeChanged() { | 636 void GtkThemeService::NotifyThemeChanged() { |
635 ThemeService::NotifyThemeChanged(); | 637 ThemeService::NotifyThemeChanged(); |
636 | 638 |
637 // Notify all GtkChromeButtons of their new rendering mode: | 639 // Notify all GtkChromeButtons of their new rendering mode: |
638 for (std::vector<GtkWidget*>::iterator it = chrome_buttons_.begin(); | 640 for (std::vector<GtkWidget*>::iterator it = chrome_buttons_.begin(); |
639 it != chrome_buttons_.end(); ++it) { | 641 it != chrome_buttons_.end(); ++it) { |
640 gtk_chrome_button_set_use_gtk_rendering( | 642 gtk_chrome_button_set_use_gtk_rendering( |
(...skipping 28 matching lines...) Expand all Loading... |
669 } | 671 } |
670 | 672 |
671 void GtkThemeService::OnStyleSet(GtkWidget* widget, | 673 void GtkThemeService::OnStyleSet(GtkWidget* widget, |
672 GtkStyle* previous_style) { | 674 GtkStyle* previous_style) { |
673 default_folder_icon_.Get() = gfx::Image(); | 675 default_folder_icon_.Get() = gfx::Image(); |
674 default_bookmark_icon_.Get() = gfx::Image(); | 676 default_bookmark_icon_.Get() = gfx::Image(); |
675 | 677 |
676 if (profile()->GetPrefs()->GetBoolean(prefs::kUsesSystemTheme)) { | 678 if (profile()->GetPrefs()->GetBoolean(prefs::kUsesSystemTheme)) { |
677 ClearAllThemeData(); | 679 ClearAllThemeData(); |
678 LoadGtkValues(); | 680 LoadGtkValues(); |
| 681 SetXDGIconTheme(); |
679 NotifyThemeChanged(); | 682 NotifyThemeChanged(); |
680 } | 683 } |
681 | 684 |
682 RebuildMenuIconSets(); | 685 RebuildMenuIconSets(); |
683 } | 686 } |
684 | 687 |
| 688 void GtkThemeService::SetXDGIconTheme() { |
| 689 gchar* gtk_theme_name; |
| 690 g_object_get(gtk_settings_get_default(), |
| 691 "gtk-icon-theme-name", |
| 692 >k_theme_name, NULL); |
| 693 base::nix::SetIconThemeName(gtk_theme_name); |
| 694 g_free(gtk_theme_name); |
| 695 } |
| 696 |
685 void GtkThemeService::LoadGtkValues() { | 697 void GtkThemeService::LoadGtkValues() { |
686 // Before we start setting images and values, we have to clear out old, stale | 698 // Before we start setting images and values, we have to clear out old, stale |
687 // values. (If we don't do this, we'll regress startup time in the case where | 699 // values. (If we don't do this, we'll regress startup time in the case where |
688 // someone installs a heavyweight theme, then goes back to GTK.) | 700 // someone installs a heavyweight theme, then goes back to GTK.) |
689 profile()->GetPrefs()->ClearPref(prefs::kCurrentThemeImages); | 701 profile()->GetPrefs()->ClearPref(prefs::kCurrentThemeImages); |
690 | 702 |
691 GtkStyle* frame_style = gtk_rc_get_style(fake_frame_); | 703 GtkStyle* frame_style = gtk_rc_get_style(fake_frame_); |
692 | 704 |
693 GtkStyle* window_style = gtk_rc_get_style(fake_window_); | 705 GtkStyle* window_style = gtk_rc_get_style(fake_window_); |
694 SetThemeColorFromGtk(ThemeService::COLOR_CONTROL_BACKGROUND, | 706 SetThemeColorFromGtk(ThemeService::COLOR_CONTROL_BACKGROUND, |
(...skipping 448 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1143 cairo_stroke(cr); | 1155 cairo_stroke(cr); |
1144 cairo_destroy(cr); | 1156 cairo_destroy(cr); |
1145 cairo_pattern_destroy(pattern); | 1157 cairo_pattern_destroy(pattern); |
1146 | 1158 |
1147 return TRUE; | 1159 return TRUE; |
1148 } | 1160 } |
1149 | 1161 |
1150 void GtkThemeService::OnUsesSystemThemeChanged() { | 1162 void GtkThemeService::OnUsesSystemThemeChanged() { |
1151 use_gtk_ = profile()->GetPrefs()->GetBoolean(prefs::kUsesSystemTheme); | 1163 use_gtk_ = profile()->GetPrefs()->GetBoolean(prefs::kUsesSystemTheme); |
1152 } | 1164 } |
OLD | NEW |