mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-02-21 06:30:54 +01:00
mac: Add support for force-[light|dark]-mode flags (see #3534)
This commit is contained in:
parent
e5339214b0
commit
0cae6e9bbe
@ -652,8 +652,9 @@ patches = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
# win: Add support for "force-light-mode" command-line option.
|
# win: Add support for "force-light-mode" command-line option.
|
||||||
|
# mac: Add support for "force-light-mode" and "force-dark-mode".
|
||||||
# https://github.com/chromiumembedded/cef/issues/3534
|
# https://github.com/chromiumembedded/cef/issues/3534
|
||||||
# https://chromium-review.googlesource.com/c/chromium/src/+/4766248
|
# https://chromium-review.googlesource.com/c/chromium/src/+/4766248
|
||||||
'name': 'win_light_mode_3534'
|
'name': 'light_mode_3534'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
103
patch/patches/light_mode_3534.patch
Normal file
103
patch/patches/light_mode_3534.patch
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
diff --git base/win/dark_mode_support.cc base/win/dark_mode_support.cc
|
||||||
|
index 325bc70b6ba97..d4117dbb1d4d8 100644
|
||||||
|
--- base/win/dark_mode_support.cc
|
||||||
|
+++ base/win/dark_mode_support.cc
|
||||||
|
@@ -6,6 +6,7 @@
|
||||||
|
|
||||||
|
#include <windows.h>
|
||||||
|
|
||||||
|
+#include "base/command_line.h"
|
||||||
|
#include "base/native_library.h"
|
||||||
|
#include "base/win/windows_version.h"
|
||||||
|
|
||||||
|
@@ -85,11 +86,20 @@ const DarkModeSupport& GetDarkModeSupport() {
|
||||||
|
return dark_mode_support;
|
||||||
|
}
|
||||||
|
|
||||||
|
+bool IsForcedLightMode() {
|
||||||
|
+ static bool kIsForcedLightMode =
|
||||||
|
+ base::CommandLine::ForCurrentProcess()->HasSwitch(
|
||||||
|
+ "force-light-mode");
|
||||||
|
+ return kIsForcedLightMode;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
} // namespace
|
||||||
|
|
||||||
|
namespace base::win {
|
||||||
|
|
||||||
|
bool IsDarkModeAvailable() {
|
||||||
|
+ if (IsForcedLightMode())
|
||||||
|
+ return false;
|
||||||
|
auto& dark_mode_support = GetDarkModeSupport();
|
||||||
|
return (dark_mode_support.allow_dark_mode_for_app ||
|
||||||
|
dark_mode_support.set_preferred_app_mode) &&
|
||||||
|
diff --git ui/native_theme/native_theme_mac.mm ui/native_theme/native_theme_mac.mm
|
||||||
|
index 604ef6b4771e3..0011a095f8a66 100644
|
||||||
|
--- ui/native_theme/native_theme_mac.mm
|
||||||
|
+++ ui/native_theme/native_theme_mac.mm
|
||||||
|
@@ -45,6 +45,14 @@ bool PrefersReducedTransparency() {
|
||||||
|
bool IsHighContrast() {
|
||||||
|
return NSWorkspace.sharedWorkspace.accessibilityDisplayShouldIncreaseContrast;
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+bool IsForcedLightMode() {
|
||||||
|
+ static bool kIsForcedLightMode =
|
||||||
|
+ base::CommandLine::ForCurrentProcess()->HasSwitch(
|
||||||
|
+ "force-light-mode");
|
||||||
|
+ return kIsForcedLightMode;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
} // namespace
|
||||||
|
|
||||||
|
// Helper object to respond to light mode/dark mode changeovers.
|
||||||
|
@@ -567,11 +575,15 @@ static void CaptionSettingsChangedNotificationCallback(CFNotificationCenterRef,
|
||||||
|
|
||||||
|
void NativeThemeMac::InitializeDarkModeStateAndObserver() {
|
||||||
|
__block auto theme = this;
|
||||||
|
- set_use_dark_colors(IsDarkMode());
|
||||||
|
+ if (!IsForcedLightMode()) {
|
||||||
|
+ set_use_dark_colors(IsForcedDarkMode() || IsDarkMode());
|
||||||
|
+ }
|
||||||
|
set_preferred_color_scheme(CalculatePreferredColorScheme());
|
||||||
|
appearance_observer_ =
|
||||||
|
[[NativeThemeEffectiveAppearanceObserver alloc] initWithHandler:^{
|
||||||
|
- theme->set_use_dark_colors(IsDarkMode());
|
||||||
|
+ if (!IsForcedLightMode()) {
|
||||||
|
+ theme->set_use_dark_colors(IsForcedDarkMode() || IsDarkMode());
|
||||||
|
+ }
|
||||||
|
theme->set_preferred_color_scheme(CalculatePreferredColorScheme());
|
||||||
|
theme->NotifyOnNativeThemeUpdated();
|
||||||
|
}];
|
||||||
|
@@ -580,7 +592,9 @@ static void CaptionSettingsChangedNotificationCallback(CFNotificationCenterRef,
|
||||||
|
void NativeThemeMac::ConfigureWebInstance() {
|
||||||
|
// NativeThemeAura is used as web instance so we need to initialize its state.
|
||||||
|
NativeTheme* web_instance = NativeTheme::GetInstanceForWeb();
|
||||||
|
- web_instance->set_use_dark_colors(IsDarkMode());
|
||||||
|
+ if (!IsForcedLightMode()) {
|
||||||
|
+ web_instance->set_use_dark_colors(IsForcedDarkMode() || IsDarkMode());
|
||||||
|
+ }
|
||||||
|
web_instance->set_preferred_color_scheme(CalculatePreferredColorScheme());
|
||||||
|
web_instance->SetPreferredContrast(CalculatePreferredContrast());
|
||||||
|
web_instance->set_prefers_reduced_transparency(PrefersReducedTransparency());
|
||||||
|
diff --git ui/native_theme/native_theme_win.cc ui/native_theme/native_theme_win.cc
|
||||||
|
index d3f9fcbed28f9..94673728a3e11 100644
|
||||||
|
--- ui/native_theme/native_theme_win.cc
|
||||||
|
+++ ui/native_theme/native_theme_win.cc
|
||||||
|
@@ -637,7 +637,7 @@ bool NativeThemeWin::ShouldUseDarkColors() const {
|
||||||
|
|
||||||
|
NativeTheme::PreferredColorScheme
|
||||||
|
NativeThemeWin::CalculatePreferredColorScheme() const {
|
||||||
|
- if (!InForcedColorsMode())
|
||||||
|
+ if (!InForcedColorsMode() || !supports_windows_dark_mode_)
|
||||||
|
return NativeTheme::CalculatePreferredColorScheme();
|
||||||
|
|
||||||
|
// According to the spec, the preferred color scheme for web content is 'dark'
|
||||||
|
@@ -1591,7 +1591,7 @@ void NativeThemeWin::RegisterThemeRegkeyObserver() {
|
||||||
|
|
||||||
|
void NativeThemeWin::UpdateDarkModeStatus() {
|
||||||
|
bool dark_mode_enabled = false;
|
||||||
|
- if (hkcu_themes_regkey_.Valid()) {
|
||||||
|
+ if (supports_windows_dark_mode_ && hkcu_themes_regkey_.Valid()) {
|
||||||
|
DWORD apps_use_light_theme = 1;
|
||||||
|
hkcu_themes_regkey_.ReadValueDW(L"AppsUseLightTheme",
|
||||||
|
&apps_use_light_theme);
|
@ -1,55 +0,0 @@
|
|||||||
diff --git base/win/dark_mode_support.cc base/win/dark_mode_support.cc
|
|
||||||
index 325bc70b6ba97..6ba7f2f2becf6 100644
|
|
||||||
--- base/win/dark_mode_support.cc
|
|
||||||
+++ base/win/dark_mode_support.cc
|
|
||||||
@@ -6,6 +6,7 @@
|
|
||||||
|
|
||||||
#include <windows.h>
|
|
||||||
|
|
||||||
+#include "base/command_line.h"
|
|
||||||
#include "base/native_library.h"
|
|
||||||
#include "base/win/windows_version.h"
|
|
||||||
|
|
||||||
@@ -85,11 +86,20 @@ const DarkModeSupport& GetDarkModeSupport() {
|
|
||||||
return dark_mode_support;
|
|
||||||
}
|
|
||||||
|
|
||||||
+bool IsForcedLightMode() {
|
|
||||||
+ static bool kIsForcedDarkMode =
|
|
||||||
+ base::CommandLine::ForCurrentProcess()->HasSwitch(
|
|
||||||
+ "force-light-mode");
|
|
||||||
+ return kIsForcedDarkMode;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
} // namespace
|
|
||||||
|
|
||||||
namespace base::win {
|
|
||||||
|
|
||||||
bool IsDarkModeAvailable() {
|
|
||||||
+ if (IsForcedLightMode())
|
|
||||||
+ return false;
|
|
||||||
auto& dark_mode_support = GetDarkModeSupport();
|
|
||||||
return (dark_mode_support.allow_dark_mode_for_app ||
|
|
||||||
dark_mode_support.set_preferred_app_mode) &&
|
|
||||||
diff --git ui/native_theme/native_theme_win.cc ui/native_theme/native_theme_win.cc
|
|
||||||
index d3f9fcbed28f9..94673728a3e11 100644
|
|
||||||
--- ui/native_theme/native_theme_win.cc
|
|
||||||
+++ ui/native_theme/native_theme_win.cc
|
|
||||||
@@ -637,7 +637,7 @@ bool NativeThemeWin::ShouldUseDarkColors() const {
|
|
||||||
|
|
||||||
NativeTheme::PreferredColorScheme
|
|
||||||
NativeThemeWin::CalculatePreferredColorScheme() const {
|
|
||||||
- if (!InForcedColorsMode())
|
|
||||||
+ if (!InForcedColorsMode() || !supports_windows_dark_mode_)
|
|
||||||
return NativeTheme::CalculatePreferredColorScheme();
|
|
||||||
|
|
||||||
// According to the spec, the preferred color scheme for web content is 'dark'
|
|
||||||
@@ -1591,7 +1591,7 @@ void NativeThemeWin::RegisterThemeRegkeyObserver() {
|
|
||||||
|
|
||||||
void NativeThemeWin::UpdateDarkModeStatus() {
|
|
||||||
bool dark_mode_enabled = false;
|
|
||||||
- if (hkcu_themes_regkey_.Valid()) {
|
|
||||||
+ if (supports_windows_dark_mode_ && hkcu_themes_regkey_.Valid()) {
|
|
||||||
DWORD apps_use_light_theme = 1;
|
|
||||||
hkcu_themes_regkey_.ReadValueDW(L"AppsUseLightTheme",
|
|
||||||
&apps_use_light_theme);
|
|
@ -135,6 +135,9 @@ MainContextImpl::MainContextImpl(CefRefPtr<CefCommandLine> command_line,
|
|||||||
// Parse the background color value.
|
// Parse the background color value.
|
||||||
background_color_ =
|
background_color_ =
|
||||||
ParseColor(command_line_->GetSwitchValue(switches::kBackgroundColor));
|
ParseColor(command_line_->GetSwitchValue(switches::kBackgroundColor));
|
||||||
|
} else if (command_line_->HasSwitch("force-dark-mode")) {
|
||||||
|
// Use black background color by default with dark mode.
|
||||||
|
background_color_ = ParseColor("black");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (background_color_ == 0 && !use_views_) {
|
if (background_color_ == 0 && !use_views_) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user