diff --git a/ui/gtk/native_theme_gtk.cc b/ui/gtk/native_theme_gtk.cc index 4afa399..fbaaf06e 100644 --- a/ui/gtk/native_theme_gtk.cc +++ b/ui/gtk/native_theme_gtk.cc @@ -116,6 +116,13 @@ ui::ColorProviderManager::Get().AppendColorProviderInitializer( base::BindRepeating(AddGtkNativeCoreColorMixer)); + // Add the web native theme as an observer to stay in sync with dark mode, + // high contrast, and preferred color scheme changes. + color_scheme_observer_ = + std::make_unique( + NativeTheme::GetInstanceForWeb()); + AddObserver(color_scheme_observer_.get()); + OnThemeChanged(gtk_settings_get_default(), nullptr); } diff --git a/ui/gtk/native_theme_gtk.h b/ui/gtk/native_theme_gtk.h index 876a738..ad3b88d41 100644 --- a/ui/gtk/native_theme_gtk.h +++ b/ui/gtk/native_theme_gtk.h @@ -93,6 +93,11 @@ mutable absl::optional color_cache_[kColorId_NumColors]; ScopedCssProvider theme_css_override_; + + // Used to notify the web native theme of changes to dark mode, high + // contrast, and preferred color scheme. + std::unique_ptr + color_scheme_observer_; }; } // namespace gtk