Index: chrome/browser/ui/aura/chrome_browser_main_extra_parts_aura.cc |
diff --git a/chrome/browser/ui/aura/chrome_browser_main_extra_parts_aura.cc b/chrome/browser/ui/aura/chrome_browser_main_extra_parts_aura.cc |
index c04caff3cce768052aad98866030fda5068da08a..f22e58c5adaeec96b2d8528f90da2d952dd96617 100644 |
--- a/chrome/browser/ui/aura/chrome_browser_main_extra_parts_aura.cc |
+++ b/chrome/browser/ui/aura/chrome_browser_main_extra_parts_aura.cc |
@@ -19,9 +19,13 @@ |
#include "ui/views/widget/native_widget_aura.h" |
#if defined(OS_LINUX) && !defined(OS_CHROMEOS) |
+#include "base/prefs/pref_service.h" |
+#include "chrome/browser/profiles/profile.h" |
#include "chrome/browser/ui/libgtk2ui/gtk2_ui.h" |
+#include "chrome/common/pref_names.h" |
+#include "ui/aura/window.h" |
+#include "ui/native_theme/native_theme_aura.h" |
#include "ui/views/linux_ui/linux_ui.h" |
-#else |
#endif |
#if defined(USE_ASH) |
@@ -38,6 +42,22 @@ |
namespace { |
+#if defined(OS_LINUX) && !defined(OS_CHROMEOS) |
+ui::NativeTheme* GetNativeThemeForWindow(aura::Window* window) { |
+ Profile* profile = NULL; |
+ if (window->type() == ui::wm::WINDOW_TYPE_NORMAL || |
+ window->type() == ui::wm::WINDOW_TYPE_POPUP) { |
+ profile = reinterpret_cast<Profile*>( |
+ window->GetNativeWindowProperty(Profile::kProfileKey)); |
+ } |
+ |
+ if (profile && !profile->GetPrefs()->GetBoolean(prefs::kUsesSystemTheme)) |
+ return ui::NativeThemeAura::instance(); |
+ |
+ return NULL; |
+} |
+#endif |
+ |
#if !defined(OS_CHROMEOS) && defined(USE_ASH) |
// Returns the desktop this process was initially launched in. |
chrome::HostDesktopType GetInitialDesktop() { |
@@ -61,9 +81,11 @@ ChromeBrowserMainExtraPartsAura::~ChromeBrowserMainExtraPartsAura() { |
} |
void ChromeBrowserMainExtraPartsAura::PreEarlyInitialization() { |
-#if !defined(USE_ASH) && defined(OS_LINUX) && defined(USE_X11) |
+#if defined(OS_LINUX) && !defined(OS_CHROMEOS) |
// TODO(erg): Refactor this into a dlopen call when we add a GTK3 port. |
- views::LinuxUI::SetInstance(BuildGtk2UI()); |
+ views::LinuxUI* gtk2_ui = BuildGtk2UI(); |
+ gtk2_ui->SetNativeThemeOverride(base::Bind(&GetNativeThemeForWindow)); |
+ views::LinuxUI::SetInstance(gtk2_ui); |
#endif |
} |