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); |