Chromium Code Reviews| Index: chrome/browser/gtk/infobar_gtk.cc |
| =================================================================== |
| --- chrome/browser/gtk/infobar_gtk.cc (revision 65711) |
| +++ chrome/browser/gtk/infobar_gtk.cc (working copy) |
| @@ -40,7 +40,8 @@ |
| : container_(NULL), |
| delegate_(delegate), |
| theme_provider_(NULL), |
| - arrow_model_(this) { |
| + arrow_model_(this), |
| + cached_infobar_type_(delegate->GetInfoBarType()) { |
| // Create |hbox_| and pad the sides. |
| hbox_ = gtk_hbox_new(FALSE, kElementPadding); |
| @@ -105,14 +106,12 @@ |
| } |
| void InfoBar::AnimateClose() { |
| + delegate_ = NULL; |
| slide_widget_->Close(); |
| } |
| void InfoBar::Close() { |
| - if (delegate_) { |
| - delegate_->InfoBarClosed(); |
| - delegate_ = NULL; |
| - } |
| + delegate_ = NULL; |
| delete this; |
| } |
| @@ -276,9 +275,10 @@ |
| } |
| void InfoBar::OnCloseButton(GtkWidget* button) { |
| - if (delegate_) |
| + if (delegate_) { |
| delegate_->InfoBarDismissed(); |
| - RemoveInfoBar(); |
| + RemoveInfoBar(); |
| + } |
| } |
| gboolean InfoBar::OnBackgroundExpose(GtkWidget* sender, |
| @@ -292,7 +292,7 @@ |
| cairo_pattern_t* pattern = cairo_pattern_create_linear(0, 0, 0, height); |
| double top_r, top_g, top_b; |
| - GetTopColor(delegate_->GetInfoBarType(), &top_r, &top_g, &top_b); |
| + GetTopColor(cached_infobar_type_, &top_r, &top_g, &top_b); |
| cairo_pattern_add_color_stop_rgb(pattern, 0.0, top_r, top_g, top_b); |
| double bottom_r, bottom_g, bottom_b; |
| @@ -355,10 +355,10 @@ |
| private: |
| static void OnLinkClick(GtkWidget* button, LinkInfoBar* link_info_bar) { |
| - if (link_info_bar->delegate_->AsLinkInfoBarDelegate()-> |
| - LinkClicked(gtk_util::DispositionForCurrentButtonPressEvent())) { |
|
Evan Stade
2010/11/11 22:39:47
I understand that leaving off the {} in this case
Peter Kasting
2010/11/11 22:47:58
Sorry! Reverted here and below.
|
| + if (link_info_bar->delegate_ && |
| + link_info_bar->delegate_->AsLinkInfoBarDelegate()-> |
| + LinkClicked(gtk_util::DispositionForCurrentButtonPressEvent())) |
| link_info_bar->RemoveInfoBar(); |
| - } |
| } |
| }; |
| @@ -426,20 +426,19 @@ |
| } |
| void ConfirmInfoBar::OnCancelButton(GtkWidget* widget) { |
| - if (delegate_->AsConfirmInfoBarDelegate()->Cancel()) |
| + if (delegate_ && delegate_->AsConfirmInfoBarDelegate()->Cancel()) |
| RemoveInfoBar(); |
| } |
| void ConfirmInfoBar::OnOkButton(GtkWidget* widget) { |
| - if (delegate_->AsConfirmInfoBarDelegate()->Accept()) |
| + if (delegate_ && delegate_->AsConfirmInfoBarDelegate()->Accept()) |
| RemoveInfoBar(); |
| } |
| void ConfirmInfoBar::OnLinkClicked(GtkWidget* widget) { |
| - if (delegate_->AsConfirmInfoBarDelegate()->LinkClicked( |
| - gtk_util::DispositionForCurrentButtonPressEvent())) { |
| + if (delegate_ && delegate_->AsConfirmInfoBarDelegate()->LinkClicked( |
| + gtk_util::DispositionForCurrentButtonPressEvent())) |
| RemoveInfoBar(); |
| - } |
| } |
| InfoBar* AlertInfoBarDelegate::CreateInfoBar() { |