mirror of https://github.com/electron/electron
77 lines
3.2 KiB
Diff
77 lines
3.2 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Samuel Attard <sattard@slack-corp.com>
|
|
Date: Mon, 26 Aug 2019 14:32:41 -0700
|
|
Subject: feat: add set_theme_source to allow apps to override chromiums
|
|
internal theme choice
|
|
|
|
This patch is required as Chromium doesn't currently let folks using
|
|
//ui override the theme choice in NativeTheme. It defaults to
|
|
respecting the OS theme choice and some apps don't always want to do
|
|
that. With this patch we can override the theme value that Chromium
|
|
uses internally for things like menus and devtools.
|
|
|
|
We can remove this patch once it has in some shape been upstreamed.
|
|
|
|
diff --git a/ui/native_theme/native_theme.cc b/ui/native_theme/native_theme.cc
|
|
index f62df6eb7d12b9decea1b3c0f29f557aa0ccddac..c977daee5622f67013a52dc4e77a6fe482b153c8 100644
|
|
--- a/ui/native_theme/native_theme.cc
|
|
+++ b/ui/native_theme/native_theme.cc
|
|
@@ -209,6 +209,8 @@ NativeTheme::NativeTheme(bool should_use_dark_colors,
|
|
NativeTheme::~NativeTheme() = default;
|
|
|
|
bool NativeTheme::ShouldUseDarkColors() const {
|
|
+ if (theme_source() == ThemeSource::kForcedLight) return false;
|
|
+ if (theme_source() == ThemeSource::kForcedDark) return true;
|
|
return should_use_dark_colors_;
|
|
}
|
|
|
|
diff --git a/ui/native_theme/native_theme.h b/ui/native_theme/native_theme.h
|
|
index 5a8e817d2611bc9d82f2f9207616d03f7a4f8592..c944b4ea0cfceccf58f0a1f56b64ffc3d86be30a 100644
|
|
--- a/ui/native_theme/native_theme.h
|
|
+++ b/ui/native_theme/native_theme.h
|
|
@@ -444,6 +444,23 @@ class NATIVE_THEME_EXPORT NativeTheme {
|
|
scoped_refptr<ColorProviderKey::ThemeInitializerSupplier> custom_theme,
|
|
bool use_custom_frame = true) const;
|
|
|
|
+
|
|
+ enum ThemeSource {
|
|
+ kSystem,
|
|
+ kForcedDark,
|
|
+ kForcedLight,
|
|
+ };
|
|
+
|
|
+ ThemeSource theme_source() const {
|
|
+ return theme_source_;
|
|
+ }
|
|
+
|
|
+ void set_theme_source(ThemeSource theme_source) {
|
|
+ bool original = ShouldUseDarkColors();
|
|
+ theme_source_ = theme_source;
|
|
+ if (ShouldUseDarkColors() != original) NotifyOnNativeThemeUpdated();
|
|
+ }
|
|
+
|
|
// Returns a shared instance of the native theme that should be used for web
|
|
// rendering. Do not use it in a normal application context (i.e. browser).
|
|
// The returned object should not be deleted by the caller. This function is
|
|
@@ -666,6 +683,7 @@ class NATIVE_THEME_EXPORT NativeTheme {
|
|
PreferredColorScheme preferred_color_scheme_ = PreferredColorScheme::kLight;
|
|
PreferredContrast preferred_contrast_ = PreferredContrast::kNoPreference;
|
|
std::optional<base::TimeDelta> caret_blink_interval_;
|
|
+ ThemeSource theme_source_ = ThemeSource::kSystem;
|
|
|
|
SEQUENCE_CHECKER(sequence_checker_);
|
|
};
|
|
diff --git a/ui/native_theme/native_theme_win.cc b/ui/native_theme/native_theme_win.cc
|
|
index 547872076d126fe963650a74c0b8a72420c725a8..81f9904ac296351f9237376b79c0436050dcf98b 100644
|
|
--- a/ui/native_theme/native_theme_win.cc
|
|
+++ b/ui/native_theme/native_theme_win.cc
|
|
@@ -675,6 +675,8 @@ bool NativeThemeWin::ShouldUseDarkColors() const {
|
|
// ...unless --force-dark-mode was specified in which case caveat emptor.
|
|
if (InForcedColorsMode() && !IsForcedDarkMode())
|
|
return false;
|
|
+ if (theme_source() == ThemeSource::kForcedLight) return false;
|
|
+ if (theme_source() == ThemeSource::kForcedDark) return true;
|
|
return NativeTheme::ShouldUseDarkColors();
|
|
}
|
|
|