| Index: chrome/browser/themes/theme_service_aurax11.cc
|
| diff --git a/chrome/browser/themes/theme_service_aurax11.cc b/chrome/browser/themes/theme_service_aurax11.cc
|
| index fe1c3de8d4deac2e0b02877a185ecdcc17888704..96518b246871688882d61033e321ca138230e296 100644
|
| --- a/chrome/browser/themes/theme_service_aurax11.cc
|
| +++ b/chrome/browser/themes/theme_service_aurax11.cc
|
| @@ -7,79 +7,81 @@
|
| #include "base/bind.h"
|
| #include "base/prefs/pref_service.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| +#include "chrome/browser/themes/custom_theme_supplier.h"
|
| #include "chrome/common/pref_names.h"
|
| #include "ui/gfx/image/image.h"
|
| #include "ui/linux_ui/linux_ui.h"
|
|
|
| -ThemeServiceAuraX11::ThemeServiceAuraX11()
|
| - : use_system_theme_(false) {
|
| -}
|
| +namespace {
|
|
|
| -ThemeServiceAuraX11::~ThemeServiceAuraX11() {}
|
| +class NativeThemeX11 : public CustomThemeSupplier {
|
| + public:
|
| + explicit NativeThemeX11(PrefService* pref_service);
|
|
|
| -void ThemeServiceAuraX11::Init(Profile* profile) {
|
| - registrar_.Init(profile->GetPrefs());
|
| - registrar_.Add(prefs::kUsesSystemTheme,
|
| - base::Bind(&ThemeServiceAuraX11::OnUsesSystemThemeChanged,
|
| - base::Unretained(this)));
|
| - use_system_theme_ = profile->GetPrefs()->GetBoolean(prefs::kUsesSystemTheme);
|
| + // Overridden from CustomThemeSupplier:
|
| + virtual void StartUsingTheme() OVERRIDE;
|
| + virtual void StopUsingTheme() OVERRIDE;
|
| + virtual bool GetColor(int id, SkColor* color) const OVERRIDE;
|
| + virtual gfx::Image GetImageNamed(int id) OVERRIDE;
|
| + virtual bool HasCustomImage(int id) const OVERRIDE;
|
|
|
| - ThemeService::Init(profile);
|
| -}
|
| + private:
|
| + virtual ~NativeThemeX11();
|
|
|
| -gfx::Image ThemeServiceAuraX11::GetImageNamed(int id) const {
|
| - const ui::LinuxUI* linux_ui = ui::LinuxUI::instance();
|
| - if (use_system_theme_ && linux_ui) {
|
| - gfx::Image image = linux_ui->GetThemeImageNamed(id);
|
| - if (!image.IsEmpty())
|
| - return image;
|
| - }
|
| + // These pointers are not owned by us.
|
| + const ui::LinuxUI* const linux_ui_;
|
| + PrefService* const pref_service_;
|
|
|
| - return ThemeService::GetImageNamed(id);
|
| -}
|
| + DISALLOW_COPY_AND_ASSIGN(NativeThemeX11);
|
| +};
|
|
|
| -SkColor ThemeServiceAuraX11::GetColor(int id) const {
|
| - const ui::LinuxUI* linux_ui = ui::LinuxUI::instance();
|
| - SkColor color;
|
| - if (use_system_theme_ && linux_ui && linux_ui->GetColor(id, &color))
|
| - return color;
|
| +NativeThemeX11::NativeThemeX11(PrefService* pref_service)
|
| + : CustomThemeSupplier(NATIVE_X11),
|
| + linux_ui_(ui::LinuxUI::instance()),
|
| + pref_service_(pref_service) {}
|
|
|
| - return ThemeService::GetColor(id);
|
| +void NativeThemeX11::StartUsingTheme() {
|
| + pref_service_->SetBoolean(prefs::kUsesSystemTheme, true);
|
| }
|
|
|
| -bool ThemeServiceAuraX11::HasCustomImage(int id) const {
|
| - const ui::LinuxUI* linux_ui = ui::LinuxUI::instance();
|
| - if (use_system_theme_ && linux_ui)
|
| - return linux_ui->HasCustomImage(id);
|
| +void NativeThemeX11::StopUsingTheme() {
|
| + pref_service_->SetBoolean(prefs::kUsesSystemTheme, false);
|
| +}
|
| +
|
| +bool NativeThemeX11::GetColor(int id, SkColor* color) const {
|
| + return linux_ui_ && linux_ui_->GetColor(id, color);
|
| +}
|
|
|
| - return ThemeService::HasCustomImage(id);
|
| +gfx::Image NativeThemeX11::GetImageNamed(int id) {
|
| + return linux_ui_ ? linux_ui_->GetThemeImageNamed(id) : gfx::Image();
|
| }
|
|
|
| -void ThemeServiceAuraX11::SetTheme(const extensions::Extension* extension) {
|
| - profile()->GetPrefs()->SetBoolean(prefs::kUsesSystemTheme, false);
|
| - ThemeService::SetTheme(extension);
|
| +bool NativeThemeX11::HasCustomImage(int id) const {
|
| + return linux_ui_ && linux_ui_->HasCustomImage(id);
|
| }
|
|
|
| -void ThemeServiceAuraX11::UseDefaultTheme() {
|
| - profile()->GetPrefs()->SetBoolean(prefs::kUsesSystemTheme, false);
|
| - ThemeService::UseDefaultTheme();
|
| +NativeThemeX11::~NativeThemeX11() {}
|
| +
|
| +} // namespace
|
| +
|
| +ThemeServiceAuraX11::ThemeServiceAuraX11() {}
|
| +
|
| +ThemeServiceAuraX11::~ThemeServiceAuraX11() {}
|
| +
|
| +bool ThemeServiceAuraX11::ShouldInitWithNativeTheme() const {
|
| + return profile()->GetPrefs()->GetBoolean(prefs::kUsesSystemTheme);
|
| }
|
|
|
| void ThemeServiceAuraX11::SetNativeTheme() {
|
| - profile()->GetPrefs()->SetBoolean(prefs::kUsesSystemTheme, true);
|
| - ClearAllThemeData();
|
| - NotifyThemeChanged();
|
| + SetCustomDefaultTheme(new NativeThemeX11(profile()->GetPrefs()));
|
| }
|
|
|
| bool ThemeServiceAuraX11::UsingDefaultTheme() const {
|
| - return !use_system_theme_ && ThemeService::UsingDefaultTheme();
|
| + return ThemeService::UsingDefaultTheme() && !UsingNativeTheme();
|
| }
|
|
|
| bool ThemeServiceAuraX11::UsingNativeTheme() const {
|
| - return use_system_theme_;
|
| -}
|
| -
|
| -void ThemeServiceAuraX11::OnUsesSystemThemeChanged() {
|
| - use_system_theme_ =
|
| - profile()->GetPrefs()->GetBoolean(prefs::kUsesSystemTheme);
|
| + const CustomThemeSupplier* theme_supplier = get_theme_supplier();
|
| + return theme_supplier &&
|
| + theme_supplier->get_theme_type() == CustomThemeSupplier::NATIVE_X11;
|
| }
|
|
|