| Index: chrome/browser/ui/gtk/gtk_theme_service.cc
|
| diff --git a/chrome/browser/ui/gtk/gtk_theme_service.cc b/chrome/browser/ui/gtk/gtk_theme_service.cc
|
| index a9123a9deacfcfdf5cfe4b41b1aeab971ba05cd5..3657a0efcc714b007b4d23b53351666246377c6f 100644
|
| --- a/chrome/browser/ui/gtk/gtk_theme_service.cc
|
| +++ b/chrome/browser/ui/gtk/gtk_theme_service.cc
|
| @@ -246,8 +246,10 @@ void GdkColorHSLShift(const color_utils::HSL& shift, GdkColor* frame_color) {
|
| } // namespace
|
|
|
| GtkWidget* GtkThemeService::icon_widget_ = NULL;
|
| -gfx::Image* GtkThemeService::default_folder_icon_ = NULL;
|
| -gfx::Image* GtkThemeService::default_bookmark_icon_ = NULL;
|
| +base::LazyInstance<gfx::Image> GtkThemeService::default_folder_icon_ =
|
| + LAZY_INSTANCE_INITIALIZER;
|
| +base::LazyInstance<gfx::Image> GtkThemeService::default_bookmark_icon_ =
|
| + LAZY_INSTANCE_INITIALIZER;
|
|
|
| // static
|
| GtkThemeService* GtkThemeService::GetFrom(Profile* profile) {
|
| @@ -569,42 +571,48 @@ void GtkThemeService::GetScrollbarColors(GdkColor* thumb_active_color,
|
| }
|
|
|
| // static
|
| -gfx::Image* GtkThemeService::GetFolderIcon(bool native) {
|
| +gfx::Image GtkThemeService::GetFolderIcon(bool native) {
|
| if (native) {
|
| if (!icon_widget_)
|
| icon_widget_ = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
| - // We never release our ref, so we will leak this on program shutdown.
|
| - if (!default_folder_icon_) {
|
| +
|
| + if (default_folder_icon_.Get().IsEmpty()) {
|
| + // This seems to leak.
|
| GdkPixbuf* pixbuf = gtk_widget_render_icon(
|
| icon_widget_, GTK_STOCK_DIRECTORY, GTK_ICON_SIZE_MENU, NULL);
|
| - if (pixbuf)
|
| - default_folder_icon_ = new gfx::Image(pixbuf);
|
| + if (pixbuf) {
|
| + default_folder_icon_.Get() = gfx::Image(pixbuf);
|
| + g_object_unref(pixbuf);
|
| + }
|
| }
|
| - if (default_folder_icon_)
|
| - return default_folder_icon_;
|
| + if (!default_folder_icon_.Get().IsEmpty())
|
| + return default_folder_icon_.Get();
|
| }
|
|
|
| - return &ui::ResourceBundle::GetSharedInstance().GetNativeImageNamed(
|
| + return ui::ResourceBundle::GetSharedInstance().GetNativeImageNamed(
|
| IDR_BOOKMARK_BAR_FOLDER);
|
| }
|
|
|
| // static
|
| -gfx::Image* GtkThemeService::GetDefaultFavicon(bool native) {
|
| +gfx::Image GtkThemeService::GetDefaultFavicon(bool native) {
|
| if (native) {
|
| if (!icon_widget_)
|
| icon_widget_ = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
| - // We never release our ref, so we will leak this on program shutdown.
|
| - if (!default_bookmark_icon_) {
|
| +
|
| + if (default_bookmark_icon_.Get().IsEmpty()) {
|
| + // This seems to leak.
|
| GdkPixbuf* pixbuf = gtk_widget_render_icon(
|
| icon_widget_, GTK_STOCK_FILE, GTK_ICON_SIZE_MENU, NULL);
|
| - if (pixbuf)
|
| - default_bookmark_icon_ = new gfx::Image(pixbuf);
|
| + if (pixbuf) {
|
| + default_bookmark_icon_.Get() = gfx::Image(pixbuf);
|
| + g_object_unref(pixbuf);
|
| + }
|
| }
|
| - if (default_bookmark_icon_)
|
| - return default_bookmark_icon_;
|
| + if (!default_bookmark_icon_.Get().IsEmpty())
|
| + return default_bookmark_icon_.Get();
|
| }
|
|
|
| - return &ui::ResourceBundle::GetSharedInstance().GetNativeImageNamed(
|
| + return ui::ResourceBundle::GetSharedInstance().GetNativeImageNamed(
|
| IDR_DEFAULT_FAVICON);
|
| }
|
|
|
| @@ -676,10 +684,8 @@ void GtkThemeService::FreePlatformCaches() {
|
|
|
| void GtkThemeService::OnStyleSet(GtkWidget* widget,
|
| GtkStyle* previous_style) {
|
| - gfx::Image* default_folder_icon = default_folder_icon_;
|
| - gfx::Image* default_bookmark_icon = default_bookmark_icon_;
|
| - default_folder_icon_ = NULL;
|
| - default_bookmark_icon_ = NULL;
|
| + default_folder_icon_.Get() = gfx::Image();
|
| + default_bookmark_icon_.Get() = gfx::Image();
|
|
|
| if (profile()->GetPrefs()->GetBoolean(prefs::kUsesSystemTheme)) {
|
| ClearAllThemeData();
|
| @@ -688,13 +694,6 @@ void GtkThemeService::OnStyleSet(GtkWidget* widget,
|
| }
|
|
|
| RebuildMenuIconSets();
|
| -
|
| - // Free the old icons only after the theme change notification has gone
|
| - // through.
|
| - if (default_folder_icon)
|
| - delete default_folder_icon;
|
| - if (default_bookmark_icon)
|
| - delete default_bookmark_icon;
|
| }
|
|
|
| void GtkThemeService::LoadGtkValues() {
|
|
|