diff options
author | zork@chromium.org <zork@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-11-24 03:42:23 +0000 |
---|---|---|
committer | zork@chromium.org <zork@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-11-24 03:42:23 +0000 |
commit | 24ac9f16048cd62ff769261f8204163bba922579 (patch) | |
tree | d617fcc468ec94e2588ca37aa73c1b4dce6a420c | |
parent | 5f5d58a9635023d87a8acbe11c4aacc4fb387e14 (diff) | |
download | chromium_src-24ac9f16048cd62ff769261f8204163bba922579.zip chromium_src-24ac9f16048cd62ff769261f8204163bba922579.tar.gz chromium_src-24ac9f16048cd62ff769261f8204163bba922579.tar.bz2 |
Determine the theme for a widget in gtk from its parent,
instead of just using the defaul
BUG=chromium-os:4890
TEST=On ChromeOS, enable a theme, and open the find box. Check that the theme is applied.
Review URL: http://codereview.chromium.org/4705005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@67210 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | views/views.gyp | 2 | ||||
-rw-r--r-- | views/widget/widget_gtk.cc | 3 | ||||
-rw-r--r-- | views/widget/widget_utils.cc | 29 | ||||
-rw-r--r-- | views/widget/widget_utils.h | 19 | ||||
-rw-r--r-- | views/widget/widget_win.cc | 15 |
5 files changed, 54 insertions, 14 deletions
diff --git a/views/views.gyp b/views/views.gyp index eac9966..d523633 100644 --- a/views/views.gyp +++ b/views/views.gyp @@ -311,6 +311,8 @@ 'widget/widget.h', 'widget/widget_gtk.cc', 'widget/widget_gtk.h', + 'widget/widget_utils.cc', + 'widget/widget_utils.h', 'widget/widget_win.cc', 'widget/widget_win.h', 'window/client_view.cc', diff --git a/views/widget/widget_gtk.cc b/views/widget/widget_gtk.cc index dcb6fb3..b56a03d 100644 --- a/views/widget/widget_gtk.cc +++ b/views/widget/widget_gtk.cc @@ -26,6 +26,7 @@ #include "views/widget/root_view.h" #include "views/widget/tooltip_manager_gtk.h" #include "views/widget/widget_delegate.h" +#include "views/widget/widget_utils.h" #include "views/window/window_gtk.h" namespace { @@ -811,7 +812,7 @@ void* WidgetGtk::GetNativeWindowProperty(const char* name) { } ThemeProvider* WidgetGtk::GetThemeProvider() const { - return default_theme_provider_.get(); + return GetWidgetThemeProvider(this); } ThemeProvider* WidgetGtk::GetDefaultThemeProvider() const { diff --git a/views/widget/widget_utils.cc b/views/widget/widget_utils.cc new file mode 100644 index 0000000..70b946d --- /dev/null +++ b/views/widget/widget_utils.cc @@ -0,0 +1,29 @@ +// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "views/widget/widget_utils.h" + +#include <string> + +#include "views/widget/widget.h" + +namespace views { + +ThemeProvider* GetWidgetThemeProvider(const Widget* widget) { + Widget* root_widget = widget->GetRootWidget(); + if (root_widget && root_widget != widget) { + // Attempt to get the theme provider, and fall back to the default theme + // provider if not found. + ThemeProvider* provider = root_widget->GetThemeProvider(); + if (provider) + return provider; + + provider = root_widget->GetDefaultThemeProvider(); + if (provider) + return provider; + } + return widget->GetDefaultThemeProvider(); +} + +} // namespace views diff --git a/views/widget/widget_utils.h b/views/widget/widget_utils.h new file mode 100644 index 0000000..78fdba9 --- /dev/null +++ b/views/widget/widget_utils.h @@ -0,0 +1,19 @@ +// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef VIEWS_WIDGET_WIDGET_UTILS_H_ +#define VIEWS_WIDGET_WIDGET_UTILS_H_ +#pragma once + +class ThemeProvider; + +namespace views { + +class Widget; + +ThemeProvider* GetWidgetThemeProvider(const Widget* widget); + +} // namespace views + +#endif // VIEWS_WIDGET_WIDGET_UTILS_H_ diff --git a/views/widget/widget_win.cc b/views/widget/widget_win.cc index 62643b2..9b30754 100644 --- a/views/widget/widget_win.cc +++ b/views/widget/widget_win.cc @@ -24,6 +24,7 @@ #include "views/widget/drop_target_win.h" #include "views/widget/root_view.h" #include "views/widget/widget_delegate.h" +#include "views/widget/widget_utils.h" #include "views/window/window_win.h" using app::ViewProp; @@ -437,19 +438,7 @@ void* WidgetWin::GetNativeWindowProperty(const char* name) { } ThemeProvider* WidgetWin::GetThemeProvider() const { - Widget* widget = GetRootWidget(); - if (widget && widget != this) { - // Attempt to get the theme provider, and fall back to the default theme - // provider if not found. - ThemeProvider* provider = widget->GetThemeProvider(); - if (provider) - return provider; - - provider = widget->GetDefaultThemeProvider(); - if (provider) - return provider; - } - return default_theme_provider_.get(); + return GetWidgetThemeProvider(this); } ThemeProvider* WidgetWin::GetDefaultThemeProvider() const { |