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

Unified Diff: chrome/browser/themes/theme_service_aurax11.cc

Issue 19471005: Add custom default theme support and create a managed user default theme. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Don't call NotifyThemeChanged if not ready. Created 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/themes/theme_service_aurax11.h ('k') | chrome/browser/themes/theme_service_mac.mm » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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;
}
« no previous file with comments | « chrome/browser/themes/theme_service_aurax11.h ('k') | chrome/browser/themes/theme_service_mac.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698