Index: chrome/browser/ui/gtk/infobars/extension_infobar_gtk.cc |
=================================================================== |
--- chrome/browser/ui/gtk/infobars/extension_infobar_gtk.cc (revision 194662) |
+++ chrome/browser/ui/gtk/infobars/extension_infobar_gtk.cc (working copy) |
@@ -35,20 +35,12 @@ |
view_(NULL), |
button_(NULL), |
icon_(NULL), |
+ alignment_(NULL), |
ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_(this)) { |
delegate->set_observer(this); |
- // Always render the close button as if we were doing chrome style widget |
- // rendering. For extension infobars, we force chrome style rendering because |
- // extension authors are going to expect to match the declared gradient in |
- // extensions_infobar.css, and the close button provided by some GTK+ themes |
- // won't look good on this background. |
- close_button_->ForceChromeTheme(); |
- |
int height = delegate->height(); |
SetBarTargetHeight((height > 0) ? (height + kSeparatorLineHeight) : 0); |
- |
- BuildWidgets(); |
} |
ExtensionInfoBarGtk::~ExtensionInfoBarGtk() { |
@@ -57,8 +49,7 @@ |
} |
void ExtensionInfoBarGtk::PlatformSpecificHide(bool animate) { |
- // This view is not owned by us; we can't unparent it because we aren't the |
- // owning container. |
+ DCHECK(alignment_); |
gtk_util::RemoveAllChildren(alignment_); |
} |
@@ -77,6 +68,7 @@ |
if (!delegate_) |
return; // The delegate can go away while we asynchronously load images. |
+ DCHECK(icon_); |
// TODO(erg): IDR_EXTENSIONS_SECTION should have an IDR_INFOBAR_EXTENSIONS |
// icon of the correct size with real subpixel shading and such. |
const gfx::ImageSkia* icon = NULL; |
@@ -110,7 +102,16 @@ |
g_object_unref(pixbuf); |
} |
-void ExtensionInfoBarGtk::BuildWidgets() { |
+void ExtensionInfoBarGtk::InitWidgets() { |
+ InfoBarGtk::InitWidgets(); |
+ |
+ // Always render the close button as if we were doing chrome style widget |
+ // rendering. For extension infobars, we force chrome style rendering because |
+ // extension authors are going to expect to match the declared gradient in |
+ // extensions_infobar.css, and the close button provided by some GTK+ themes |
+ // won't look good on this background. |
+ close_button_->ForceChromeTheme(); |
+ |
icon_ = gtk_image_new(); |
gtk_misc_set_alignment(GTK_MISC(icon_), 0.5, 0.5); |
@@ -178,6 +179,7 @@ |
} |
Browser* ExtensionInfoBarGtk::GetBrowser() { |
+ DCHECK(icon_); |
// Get the Browser object this infobar is attached to. |
GtkWindow* parent = platform_util::GetTopLevel(icon_); |
if (!parent) |