Index: chrome/browser/ui/gtk/theme_service_gtk.cc |
diff --git a/chrome/browser/ui/gtk/theme_service_gtk.cc b/chrome/browser/ui/gtk/theme_service_gtk.cc |
index 7c50f6e888fc95ca30898d03d4b87433edf5ff1a..733eaf3feb56edd1203d59b12c69c14455ba8a8f 100644 |
--- a/chrome/browser/ui/gtk/theme_service_gtk.cc |
+++ b/chrome/browser/ui/gtk/theme_service_gtk.cc |
@@ -766,8 +766,12 @@ void ThemeServiceGtk::LoadGtkValues() { |
const GdkColor* link_color = NULL; |
gtk_widget_style_get(GTK_WIDGET(fake_window_), |
"link-color", &link_color, NULL); |
- if (!link_color) |
+ |
+ bool is_default_link_color = false; |
+ if (!link_color) { |
link_color = &kDefaultLinkColor; |
+ is_default_link_color = true; |
+ } |
SetThemeColorFromGtk(ThemeService::COLOR_NTP_LINK, |
link_color); |
@@ -778,6 +782,9 @@ void ThemeServiceGtk::LoadGtkValues() { |
SetThemeColorFromGtk(ThemeService::COLOR_NTP_SECTION_LINK_UNDERLINE, |
link_color); |
+ if (link_color && !is_default_link_color) |
+ gdk_color_free(const_cast<GdkColor*>(link_color)); |
+ |
// Generate the colors that we pass to WebKit. |
focus_ring_color_ = gfx::GdkColorToSkColor(frame_color); |
GdkColor thumb_active_color, thumb_inactive_color, track_color; |
@@ -801,10 +808,10 @@ void ThemeServiceGtk::LoadGtkValues() { |
} |
GdkColor ThemeServiceGtk::BuildFrameColors(GtkStyle* frame_style) { |
- const GdkColor* theme_frame = NULL; |
- const GdkColor* theme_inactive_frame = NULL; |
- const GdkColor* theme_incognito_frame = NULL; |
- const GdkColor* theme_incognito_inactive_frame = NULL; |
+ GdkColor* theme_frame = NULL; |
+ GdkColor* theme_inactive_frame = NULL; |
+ GdkColor* theme_incognito_frame = NULL; |
+ GdkColor* theme_incognito_inactive_frame = NULL; |
gtk_widget_style_get(GTK_WIDGET(fake_frame_), |
"frame-color", &theme_frame, |
"inactive-frame-color", &theme_inactive_frame, |
@@ -819,6 +826,8 @@ GdkColor ThemeServiceGtk::BuildFrameColors(GtkStyle* frame_style) { |
kDefaultFrameShift, |
ThemeService::COLOR_FRAME, |
ThemeService::TINT_FRAME); |
+ if (theme_frame) |
+ gdk_color_free(theme_frame); |
SetThemeTintFromGtk(ThemeService::TINT_BACKGROUND_TAB, &frame_color); |
BuildAndSetFrameColor( |
@@ -827,6 +836,8 @@ GdkColor ThemeServiceGtk::BuildFrameColors(GtkStyle* frame_style) { |
kDefaultFrameShift, |
ThemeService::COLOR_FRAME_INACTIVE, |
ThemeService::TINT_FRAME_INACTIVE); |
+ if (theme_inactive_frame) |
+ gdk_color_free(theme_inactive_frame); |
BuildAndSetFrameColor( |
&frame_color, |
@@ -834,6 +845,8 @@ GdkColor ThemeServiceGtk::BuildFrameColors(GtkStyle* frame_style) { |
GetDefaultTint(ThemeService::TINT_FRAME_INCOGNITO), |
ThemeService::COLOR_FRAME_INCOGNITO, |
ThemeService::TINT_FRAME_INCOGNITO); |
+ if (theme_incognito_frame) |
+ gdk_color_free(theme_incognito_frame); |
BuildAndSetFrameColor( |
&frame_color, |
@@ -841,6 +854,8 @@ GdkColor ThemeServiceGtk::BuildFrameColors(GtkStyle* frame_style) { |
GetDefaultTint(ThemeService::TINT_FRAME_INCOGNITO_INACTIVE), |
ThemeService::COLOR_FRAME_INCOGNITO_INACTIVE, |
ThemeService::TINT_FRAME_INCOGNITO_INACTIVE); |
+ if (theme_incognito_inactive_frame) |
+ gdk_color_free(theme_incognito_inactive_frame); |
return frame_color; |
} |
@@ -993,7 +1008,7 @@ SkBitmap* ThemeServiceGtk::GenerateFrameImage( |
gfx::Canvas canvas(gfx::Size(kToolbarImageWidth, kToolbarImageHeight), true); |
int gradient_size; |
- const GdkColor* gradient_top_color = NULL; |
+ GdkColor* gradient_top_color = NULL; |
gtk_widget_style_get(GTK_WIDGET(fake_frame_), |
"frame-gradient-size", &gradient_size, |
gradient_name, &gradient_top_color, |
@@ -1002,6 +1017,8 @@ SkBitmap* ThemeServiceGtk::GenerateFrameImage( |
SkColor lighter = gradient_top_color ? |
gfx::GdkColorToSkColor(*gradient_top_color) : |
color_utils::HSLShift(base, kGtkFrameShift); |
+ if (gradient_top_color) |
+ gdk_color_free(gradient_top_color); |
SkShader* shader = gfx::CreateGradientShader( |
0, gradient_size, lighter, base); |
SkPaint paint; |