diff --git a/shell/browser/api/atom_api_top_level_window.cc b/shell/browser/api/atom_api_top_level_window.cc index 68126ace0d31..e370df4d4755 100644 --- a/shell/browser/api/atom_api_top_level_window.cc +++ b/shell/browser/api/atom_api_top_level_window.cc @@ -889,6 +889,10 @@ void TopLevelWindow::CloseFilePreview() { window_->CloseFilePreview(); } +void TopLevelWindow::SetGTKDarkThemeEnabled(bool use_dark_theme) { + window_->SetGTKDarkThemeEnabled(use_dark_theme); +} + v8::Local TopLevelWindow::GetContentView() const { if (content_view_.IsEmpty()) return v8::Null(isolate()); diff --git a/shell/browser/api/atom_api_top_level_window.h b/shell/browser/api/atom_api_top_level_window.h index cc133c19cb16..527608aef2da 100644 --- a/shell/browser/api/atom_api_top_level_window.h +++ b/shell/browser/api/atom_api_top_level_window.h @@ -202,6 +202,7 @@ class TopLevelWindow : public mate::TrackableObject, void SetAspectRatio(double aspect_ratio, mate::Arguments* args); void PreviewFile(const std::string& path, mate::Arguments* args); void CloseFilePreview(); + void SetGTKDarkThemeEnabled(bool use_dark_theme); // Public getters of NativeWindow. v8::Local GetContentView() const; diff --git a/shell/browser/native_window.h b/shell/browser/native_window.h index 823104d49748..4f54894e69ac 100644 --- a/shell/browser/native_window.h +++ b/shell/browser/native_window.h @@ -228,6 +228,8 @@ class NativeWindow : public base::SupportsUserData, const std::string& display_name); virtual void CloseFilePreview(); + virtual void SetGTKDarkThemeEnabled(bool use_dark_theme) = 0; + // Converts between content bounds and window bounds. virtual gfx::Rect ContentBoundsToWindowBounds( const gfx::Rect& bounds) const = 0; diff --git a/shell/browser/native_window_mac.h b/shell/browser/native_window_mac.h index 9ce9fc105a65..6adf92e697a4 100644 --- a/shell/browser/native_window_mac.h +++ b/shell/browser/native_window_mac.h @@ -137,6 +137,7 @@ class NativeWindowMac : public NativeWindow { const std::vector& items) override; void RefreshTouchBarItem(const std::string& item_id) override; void SetEscapeTouchBarItem(const mate::PersistentDictionary& item) override; + void SetGTKDarkThemeEnabled(bool use_dark_theme) override {} gfx::Rect ContentBoundsToWindowBounds(const gfx::Rect& bounds) const override; gfx::Rect WindowBoundsToContentBounds(const gfx::Rect& bounds) const override; diff --git a/shell/browser/native_window_views.cc b/shell/browser/native_window_views.cc index 63334e64bbf3..cc77090adb25 100644 --- a/shell/browser/native_window_views.cc +++ b/shell/browser/native_window_views.cc @@ -214,12 +214,7 @@ NativeWindowViews::NativeWindowViews(const mate::Dictionary& options, // Set _GTK_THEME_VARIANT to dark if we have "dark-theme" option set. bool use_dark_theme = false; if (options.Get(options::kDarkTheme, &use_dark_theme) && use_dark_theme) { - XDisplay* xdisplay = gfx::GetXDisplay(); - XChangeProperty(xdisplay, GetAcceleratedWidget(), - XInternAtom(xdisplay, "_GTK_THEME_VARIANT", x11::False), - XInternAtom(xdisplay, "UTF8_STRING", x11::False), 8, - PropModeReplace, - reinterpret_cast("dark"), 4); + SetGTKDarkThemeEnabled(use_dark_theme); } // Before the window is mapped the SetWMSpecState can not work, so we have @@ -330,6 +325,25 @@ NativeWindowViews::~NativeWindowViews() { #endif } +void NativeWindowViews::SetGTKDarkThemeEnabled(bool use_dark_theme) { +#if defined(USE_X11) + XDisplay* xdisplay = gfx::GetXDisplay(); + if (use_dark_theme) { + XChangeProperty(xdisplay, GetAcceleratedWidget(), + XInternAtom(xdisplay, "_GTK_THEME_VARIANT", x11::False), + XInternAtom(xdisplay, "UTF8_STRING", x11::False), 8, + PropModeReplace, + reinterpret_cast("dark"), 4); + } else { + XChangeProperty(xdisplay, GetAcceleratedWidget(), + XInternAtom(xdisplay, "_GTK_THEME_VARIANT", x11::False), + XInternAtom(xdisplay, "UTF8_STRING", x11::False), 8, + PropModeReplace, + reinterpret_cast("light"), 5); + } +#endif +} + void NativeWindowViews::SetContentView(views::View* view) { if (content_view()) { root_view_->RemoveChildView(content_view()); diff --git a/shell/browser/native_window_views.h b/shell/browser/native_window_views.h index afa524176342..7bb6e7b4d0f0 100644 --- a/shell/browser/native_window_views.h +++ b/shell/browser/native_window_views.h @@ -125,6 +125,8 @@ class NativeWindowViews : public NativeWindow, bool IsVisibleOnAllWorkspaces() override; + void SetGTKDarkThemeEnabled(bool use_dark_theme) override; + content::DesktopMediaID GetDesktopMediaID() const override; gfx::AcceleratedWidget GetAcceleratedWidget() const override; NativeWindowHandle GetNativeWindowHandle() const override;