Index: chrome/browser/gtk/status_bubble_gtk.cc |
diff --git a/chrome/browser/gtk/status_bubble_gtk.cc b/chrome/browser/gtk/status_bubble_gtk.cc |
index f747570393fdac9a978c891aa45a7e5bc473a46a..920803e2d3018b5c90a8b665111f44c325038181 100644 |
--- a/chrome/browser/gtk/status_bubble_gtk.cc |
+++ b/chrome/browser/gtk/status_bubble_gtk.cc |
@@ -9,6 +9,7 @@ |
#include "base/gfx/gtk_util.h" |
#include "base/message_loop.h" |
#include "base/string_util.h" |
+#include "chrome/browser/gtk/gtk_theme_provider.h" |
#include "chrome/browser/gtk/slide_animator_gtk.h" |
#include "chrome/common/gtk_util.h" |
#include "googleurl/src/gurl.h" |
@@ -31,9 +32,12 @@ static const int kHideDelay = 250; |
} // namespace |
-StatusBubbleGtk::StatusBubbleGtk() |
+StatusBubbleGtk::StatusBubbleGtk(Profile* profile) |
: timer_factory_(this) { |
InitWidgets(); |
+ |
+ GtkThemeProperties properties(profile); |
+ UserChangedTheme(&properties); |
} |
StatusBubbleGtk::~StatusBubbleGtk() { |
@@ -113,7 +117,6 @@ void StatusBubbleGtk::MouseMoved() { |
void StatusBubbleGtk::InitWidgets() { |
label_ = gtk_label_new(NULL); |
- gtk_widget_modify_fg(label_, GTK_STATE_NORMAL, &kTextColor); |
GtkWidget* padding = gtk_alignment_new(0, 0, 1, 1); |
gtk_alignment_set_padding(GTK_ALIGNMENT(padding), |
@@ -121,12 +124,40 @@ void StatusBubbleGtk::InitWidgets() { |
kInternalLeftRightPadding, kInternalLeftRightPadding); |
gtk_container_add(GTK_CONTAINER(padding), label_); |
- GtkWidget* bg_box = gtk_event_box_new(); |
- gtk_container_add(GTK_CONTAINER(bg_box), padding); |
- gtk_widget_modify_bg(bg_box, GTK_STATE_NORMAL, &kBackgroundColor); |
+ bg_box_ = gtk_event_box_new(); |
+ gtk_container_add(GTK_CONTAINER(bg_box_), padding); |
- container_.Own(gtk_util::CreateGtkBorderBin(bg_box, &kFrameBorderColor, |
+ container_.Own(gtk_util::CreateGtkBorderBin(bg_box_, &kFrameBorderColor, |
kBorderPadding, kBorderPadding, kBorderPadding, kBorderPadding)); |
gtk_widget_set_name(container_.get(), "status-bubble"); |
gtk_widget_set_app_paintable(container_.get(), TRUE); |
} |
+ |
+void StatusBubbleGtk::UserChangedTheme(GtkThemeProperties* properties) { |
+ if (properties->use_gtk_rendering) { |
+ gtk_widget_modify_fg(label_, GTK_STATE_NORMAL, NULL); |
+ gtk_widget_modify_bg(bg_box_, GTK_STATE_NORMAL, NULL); |
+ } else { |
+ // TODO(erg): This is the closest to "text that will look good on a |
+ // toolbar" that I can find. Maybe in later iterations of the theme system, |
+ // there will be a better color to pick. |
+ GdkColor bookmark_text = |
+ properties->GetGdkColor(BrowserThemeProvider::COLOR_BOOKMARK_TEXT); |
+ gtk_widget_modify_fg(label_, GTK_STATE_NORMAL, &bookmark_text); |
+ |
+ GdkColor toolbar_color = |
+ properties->GetGdkColor(BrowserThemeProvider::COLOR_TOOLBAR); |
+ gtk_widget_modify_bg(bg_box_, GTK_STATE_NORMAL, &toolbar_color); |
+ } |
+ |
+ // TODO(erg): I don't know what to do with the status bubble border |
+ // (|container_|). There needs to be a border in GTK mode, and I'm not sure |
+ // which BrowserThemeProvider::COLOR I'm supposed to use here since the Views |
+ // implementation still uses constants in the equivalent, and it's used for |
+ // alpha blending instead of drawing a real border. |
+ // |
+ // This doesn't really matter because this part of the UI needs to be |
+ // rewritten per the UI review anyway; we should be matching windows with a |
+ // semi-transparent, rounded border instead of our constantly |
+ // CreateGtkBorderBin() usage. |
+} |