Index: chrome/browser/gtk/bookmark_bar_gtk.cc |
diff --git a/chrome/browser/gtk/bookmark_bar_gtk.cc b/chrome/browser/gtk/bookmark_bar_gtk.cc |
index 1965a1bb7743247d167e9d15a961c97cbb04280b..29ee5a150f0e2ab2476aea8602a73dc625bced8c 100644 |
--- a/chrome/browser/gtk/bookmark_bar_gtk.cc |
+++ b/chrome/browser/gtk/bookmark_bar_gtk.cc |
@@ -22,6 +22,7 @@ |
#include "chrome/browser/gtk/custom_button.h" |
#include "chrome/browser/gtk/gtk_chrome_button.h" |
#include "chrome/browser/gtk/gtk_dnd_util.h" |
+#include "chrome/browser/gtk/gtk_theme_provider.h" |
#include "chrome/browser/gtk/nine_box.h" |
#include "chrome/browser/gtk/tabs/tab_strip_gtk.h" |
#include "chrome/browser/metrics/user_metrics.h" |
@@ -45,6 +46,13 @@ const int kInstructionsPadding = 6; |
// Color of the instructional text. |
const GdkColor kInstructionsColor = GDK_COLOR_RGB(128, 128, 142); |
+void SetUseSystemThemeGraphicsOnToolbarItems(GtkToolItem* item, bool use_gtk) { |
+ GtkWidget* child = gtk_bin_get_child(GTK_BIN(item)); |
+ if (GTK_IS_CHROME_BUTTON(child)) { |
+ gtk_chrome_button_set_use_gtk_rendering(GTK_CHROME_BUTTON(child), use_gtk); |
+ } |
+} |
+ |
} // namespace |
BookmarkBarGtk::BookmarkBarGtk(Profile* profile, Browser* browser, |
@@ -162,6 +170,9 @@ void BookmarkBarGtk::Init(Profile* profile) { |
gtk_box_pack_start(GTK_BOX(bookmark_hbox_.get()), other_bookmarks_button_, |
FALSE, FALSE, 0); |
+ |
+ // Set the current theme state for all the buttons. |
+ UserChangedTheme(profile); |
gtk_widget_set_size_request(bookmark_hbox_.get(), -1, 0); |
slide_animation_.reset(new SlideAnimation(this)); |
@@ -255,9 +266,11 @@ void BookmarkBarGtk::BookmarkNodeAdded(BookmarkModel* model, |
} |
DCHECK(index >= 0 && index <= GetBookmarkButtonCount()); |
+ GtkToolItem* item = CreateBookmarkToolItem(parent->GetChild(index)); |
gtk_toolbar_insert(GTK_TOOLBAR(bookmark_toolbar_.get()), |
- CreateBookmarkToolItem(parent->GetChild(index)), |
- index); |
+ item, index); |
+ bool use_gtk = GtkThemeProvider::UseSystemThemeGraphics(profile_); |
+ SetUseSystemThemeGraphicsOnToolbarItems(item, use_gtk); |
SetInstructionState(parent); |
} |
@@ -316,6 +329,10 @@ void BookmarkBarGtk::CreateAllBookmarkButtons(const BookmarkNode* node) { |
gtk_toolbar_insert(GTK_TOOLBAR(bookmark_toolbar_.get()), item, -1); |
} |
+ // Now that we've made a bunch of toolbar items, we need to make sure they |
+ // have the correct theme state. |
+ UserChangedTheme(profile_); |
+ |
SetInstructionState(node); |
} |
@@ -345,6 +362,19 @@ bool BookmarkBarGtk::IsAlwaysShown() { |
return profile_->GetPrefs()->GetBoolean(prefs::kShowBookmarkBar); |
} |
+void BookmarkBarGtk::UserChangedTheme(Profile* profile) { |
+ bool use_gtk = GtkThemeProvider::UseSystemThemeGraphics(profile); |
+ |
+ gtk_chrome_button_set_use_gtk_rendering( |
+ GTK_CHROME_BUTTON(other_bookmarks_button_), use_gtk); |
+ |
+ gtk_container_foreach( |
+ GTK_CONTAINER(bookmark_toolbar_.get()), |
+ reinterpret_cast<void (*)(GtkWidget*, void*)>( |
+ SetUseSystemThemeGraphicsOnToolbarItems), |
+ reinterpret_cast<void*>(use_gtk)); |
+} |
+ |
void BookmarkBarGtk::AnimationProgressed(const Animation* animation) { |
DCHECK_EQ(animation, slide_animation_.get()); |