| Index: chrome/browser/ui/views/frame/browser_desktop_window_tree_host_x11.cc
|
| diff --git a/chrome/browser/ui/views/frame/browser_desktop_window_tree_host_x11.cc b/chrome/browser/ui/views/frame/browser_desktop_window_tree_host_x11.cc
|
| index 49f9ae2e4166716971f2b1edf6a3551926d30e4c..4641c8301ad57d09bd7648764c6d442a47343fc1 100644
|
| --- a/chrome/browser/ui/views/frame/browser_desktop_window_tree_host_x11.cc
|
| +++ b/chrome/browser/ui/views/frame/browser_desktop_window_tree_host_x11.cc
|
| @@ -4,16 +4,78 @@
|
|
|
| #include "chrome/browser/ui/views/frame/browser_desktop_window_tree_host_x11.h"
|
|
|
| +#include "chrome/browser/themes/theme_service.h"
|
| +#include "chrome/browser/themes/theme_service_factory.h"
|
| +#include "chrome/browser/ui/views/frame/browser_frame.h"
|
| +#include "chrome/browser/ui/views/frame/browser_view.h"
|
| +#include "chrome/browser/ui/views/theme_image_mapper.h"
|
| +
|
| +namespace {
|
| +
|
| +// DesktopThemeProvider maps resource ids using MapThemeImage(). This is
|
| +// necessary for BrowserDesktopWindowTreeHostWin so that it uses the windows
|
| +// theme images rather than the ash theme images.
|
| +//
|
| +// This differs from the version in browser_desktop_window_tree_host_win.cc
|
| +// because we need to also look up whether we're using the native theme.
|
| +class DesktopThemeProvider : public ui::ThemeProvider {
|
| + public:
|
| + explicit DesktopThemeProvider(ThemeService* delegate)
|
| + : delegate_(delegate) {
|
| + }
|
| +
|
| + virtual bool UsingSystemTheme() const OVERRIDE {
|
| + return delegate_->UsingSystemTheme();
|
| + }
|
| + virtual gfx::ImageSkia* GetImageSkiaNamed(int id) const OVERRIDE {
|
| + if (delegate_->UsingSystemTheme())
|
| + return delegate_->GetImageSkiaNamed(id);
|
| +
|
| + return delegate_->GetImageSkiaNamed(
|
| + chrome::MapThemeImage(chrome::HOST_DESKTOP_TYPE_NATIVE, id));
|
| + }
|
| + virtual SkColor GetColor(int id) const OVERRIDE {
|
| + return delegate_->GetColor(id);
|
| + }
|
| + virtual int GetDisplayProperty(int id) const OVERRIDE {
|
| + return delegate_->GetDisplayProperty(id);
|
| + }
|
| + virtual bool ShouldUseNativeFrame() const OVERRIDE {
|
| + return delegate_->ShouldUseNativeFrame();
|
| + }
|
| + virtual bool HasCustomImage(int id) const OVERRIDE {
|
| + return delegate_->HasCustomImage(
|
| + chrome::MapThemeImage(chrome::HOST_DESKTOP_TYPE_NATIVE, id));
|
| + }
|
| + virtual base::RefCountedMemory* GetRawData(
|
| + int id,
|
| + ui::ScaleFactor scale_factor) const OVERRIDE {
|
| + return delegate_->GetRawData(id, scale_factor);
|
| + }
|
| +
|
| + private:
|
| + ThemeService* delegate_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(DesktopThemeProvider);
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| ////////////////////////////////////////////////////////////////////////////////
|
| // BrowserDesktopWindowTreeHostX11, public:
|
|
|
| BrowserDesktopWindowTreeHostX11::BrowserDesktopWindowTreeHostX11(
|
| views::internal::NativeWidgetDelegate* native_widget_delegate,
|
| views::DesktopNativeWidgetAura* desktop_native_widget_aura,
|
| - BrowserView* browser_view)
|
| + BrowserView* browser_view,
|
| + BrowserFrame* browser_frame)
|
| : DesktopWindowTreeHostX11(native_widget_delegate,
|
| desktop_native_widget_aura),
|
| browser_view_(browser_view) {
|
| + scoped_ptr<ui::ThemeProvider> theme_provider(
|
| + new DesktopThemeProvider(ThemeServiceFactory::GetForProfile(
|
| + browser_view->browser()->profile())));
|
| + browser_frame->SetThemeProvider(theme_provider.Pass());
|
| }
|
|
|
| BrowserDesktopWindowTreeHostX11::~BrowserDesktopWindowTreeHostX11() {
|
| @@ -67,5 +129,6 @@ BrowserDesktopWindowTreeHost*
|
| BrowserFrame* browser_frame) {
|
| return new BrowserDesktopWindowTreeHostX11(native_widget_delegate,
|
| desktop_native_widget_aura,
|
| - browser_view);
|
| + browser_view,
|
| + browser_frame);
|
| }
|
|
|