| Index: chrome/browser/gtk/bookmark_bar_gtk.cc
 | 
| ===================================================================
 | 
| --- chrome/browser/gtk/bookmark_bar_gtk.cc	(revision 17339)
 | 
| +++ chrome/browser/gtk/bookmark_bar_gtk.cc	(working copy)
 | 
| @@ -49,9 +49,20 @@
 | 
|  // Left-padding for the instructional text.
 | 
|  const int kInstructionsPadding = 6;
 | 
|  
 | 
| +// Color of the button text, taken from TextButtonView.
 | 
| +const GdkColor kEnabledColor = GDK_COLOR_RGB(6, 45, 117);
 | 
| +const GdkColor kDisabledColor = GDK_COLOR_RGB(161, 161, 146);
 | 
| +// TextButtonView uses 255, 255, 255 with opacity of 200. We don't support
 | 
| +// transparent text though, so just use a slightly lighter version of
 | 
| +// kEnabledColor.
 | 
| +const GdkColor kHighlightColor = GDK_COLOR_RGB(56, 95, 167);
 | 
| +
 | 
|  // Color of the instructional text.
 | 
|  const GdkColor kInstructionsColor = GDK_COLOR_RGB(128, 128, 142);
 | 
|  
 | 
| +// Only used for the background of the drag widget.
 | 
| +const GdkColor kBackgroundColor = GDK_COLOR_RGB(0xe6, 0xed, 0xf4);
 | 
| +
 | 
|  // Table of the mime types that we accept with their options.
 | 
|  const GtkTargetEntry kTargetTable[] = {
 | 
|    { const_cast<char*>(kInternalURIType), GTK_TARGET_SAME_APP,
 | 
| @@ -61,6 +72,30 @@
 | 
|  
 | 
|  const int kTargetTableSize = G_N_ELEMENTS(kTargetTable);
 | 
|  
 | 
| +// Recursively search for label among the children of |widget|.
 | 
| +void SearchForLabel(GtkWidget* widget, gpointer data) {
 | 
| +  if (GTK_IS_LABEL(widget)) {
 | 
| +    *reinterpret_cast<GtkWidget**>(data) = widget;
 | 
| +  } else if (GTK_IS_CONTAINER(widget)) {
 | 
| +    gtk_container_foreach(GTK_CONTAINER(widget), SearchForLabel, data);
 | 
| +  }
 | 
| +}
 | 
| +
 | 
| +// This function is a temporary hack to fix fonts on dark system themes.
 | 
| +// NOTE: this makes assumptions about GtkButton internals. Also, it only works
 | 
| +// if you call it after the last time you edit the button.
 | 
| +// TODO(estade): remove this function.
 | 
| +void SetButtonTextColors(GtkWidget* button) {
 | 
| +  GtkWidget* label;
 | 
| +  gtk_container_foreach(GTK_CONTAINER(button), SearchForLabel, &label);
 | 
| +  if (label) {
 | 
| +    gtk_widget_modify_fg(label, GTK_STATE_NORMAL, &kEnabledColor);
 | 
| +    gtk_widget_modify_fg(label, GTK_STATE_ACTIVE, &kEnabledColor);
 | 
| +    gtk_widget_modify_fg(label, GTK_STATE_PRELIGHT, &kHighlightColor);
 | 
| +    gtk_widget_modify_fg(label, GTK_STATE_INSENSITIVE, &kDisabledColor);
 | 
| +  }
 | 
| +}
 | 
| +
 | 
|  }  // namespace
 | 
|  
 | 
|  BookmarkBarGtk::BookmarkBarGtk(Profile* profile, Browser* browser)
 | 
| @@ -163,8 +198,11 @@
 | 
|    gtk_button_set_label(
 | 
|        GTK_BUTTON(other_bookmarks_button_),
 | 
|        l10n_util::GetStringUTF8(IDS_BOOMARK_BAR_OTHER_BOOKMARKED).c_str());
 | 
| +
 | 
|    gtk_button_set_image(GTK_BUTTON(other_bookmarks_button_),
 | 
|                         gtk_image_new_from_pixbuf(folder_icon));
 | 
| +  // Set the proper text colors.
 | 
| +  SetButtonTextColors(other_bookmarks_button_);
 | 
|  
 | 
|    gtk_box_pack_start(GTK_BOX(bookmark_hbox_.get()), other_bookmarks_button_,
 | 
|                       FALSE, FALSE, 0);
 | 
| @@ -385,6 +423,7 @@
 | 
|                             gtk_image_new_from_pixbuf(default_bookmark_icon));
 | 
|    }
 | 
|  
 | 
| +  SetButtonTextColors(button);
 | 
|    g_object_set_data(G_OBJECT(button), kBookmarkNode,
 | 
|                      reinterpret_cast<void*>(node));
 | 
|  }
 | 
| @@ -581,6 +620,7 @@
 | 
|  
 | 
|    // Build a windowed representation for our button.
 | 
|    GtkWidget* window = gtk_window_new(GTK_WINDOW_POPUP);
 | 
| +  gtk_widget_modify_bg(window, GTK_STATE_NORMAL, &kBackgroundColor);
 | 
|    gtk_widget_realize(window);
 | 
|  
 | 
|    GtkWidget* frame = gtk_frame_new(NULL);
 | 
| 
 |