diff options
author | mattm@chromium.org <mattm@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-02-02 04:43:14 +0000 |
---|---|---|
committer | mattm@chromium.org <mattm@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-02-02 04:43:14 +0000 |
commit | 96acdf132ef5c70a39cb79f41c58beca6167dd82 (patch) | |
tree | c9baa9289dc7372705a95a1d87254bd5fa7fa55b /chrome/browser/gtk | |
parent | 582fab735a08f7eba5c5ccdbf5f62d5bdb4ff09a (diff) | |
download | chromium_src-96acdf132ef5c70a39cb79f41c58beca6167dd82.zip chromium_src-96acdf132ef5c70a39cb79f41c58beca6167dd82.tar.gz chromium_src-96acdf132ef5c70a39cb79f41c58beca6167dd82.tar.bz2 |
Fix bookmark bar observer callbacks accessing gtk widgets after they are destroyed.
BUG=none
TEST=run browser_tests, look for Gtk-CRITICAL errors.
Review URL: http://codereview.chromium.org/562009
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@37795 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/gtk')
-rw-r--r-- | chrome/browser/gtk/bookmark_bar_gtk.cc | 18 | ||||
-rw-r--r-- | chrome/browser/gtk/bookmark_bar_gtk.h | 1 |
2 files changed, 13 insertions, 6 deletions
diff --git a/chrome/browser/gtk/bookmark_bar_gtk.cc b/chrome/browser/gtk/bookmark_bar_gtk.cc index ed9cffb..f2f6c73 100644 --- a/chrome/browser/gtk/bookmark_bar_gtk.cc +++ b/chrome/browser/gtk/bookmark_bar_gtk.cc @@ -154,15 +154,9 @@ BookmarkBarGtk::BookmarkBarGtk(BrowserWindowGtk* window, } BookmarkBarGtk::~BookmarkBarGtk() { - if (model_) - model_->RemoveObserver(this); - RemoveAllBookmarkButtons(); bookmark_toolbar_.Destroy(); event_box_.Destroy(); - - if (sync_service_) - sync_service_->RemoveObserver(this); } void BookmarkBarGtk::SetProfile(Profile* profile) { @@ -194,6 +188,8 @@ void BookmarkBarGtk::SetPageNavigator(PageNavigator* navigator) { void BookmarkBarGtk::Init(Profile* profile) { event_box_.Own(gtk_event_box_new()); + g_signal_connect(event_box_.get(), "destroy", + G_CALLBACK(&OnEventBoxDestroy), this); g_signal_connect(event_box_.get(), "button-press-event", G_CALLBACK(&OnButtonPressed), this); @@ -1223,6 +1219,16 @@ gboolean BookmarkBarGtk::OnEventBoxExpose(GtkWidget* widget, } // static +void BookmarkBarGtk::OnEventBoxDestroy(GtkWidget* widget, + BookmarkBarGtk* bar) { + if (bar->model_) + bar->model_->RemoveObserver(bar); + + if (bar->sync_service_) + bar->sync_service_->RemoveObserver(bar); +} + +// static void BookmarkBarGtk::OnParentSizeAllocate(GtkWidget* widget, GtkAllocation* allocation, BookmarkBarGtk* bar) { diff --git a/chrome/browser/gtk/bookmark_bar_gtk.h b/chrome/browser/gtk/bookmark_bar_gtk.h index 68a0e4a..2770fc5 100644 --- a/chrome/browser/gtk/bookmark_bar_gtk.h +++ b/chrome/browser/gtk/bookmark_bar_gtk.h @@ -261,6 +261,7 @@ class BookmarkBarGtk : public AnimationDelegate, // GtkEventBox callbacks. static gboolean OnEventBoxExpose(GtkWidget* widget, GdkEventExpose* event, BookmarkBarGtk* bar); + static void OnEventBoxDestroy(GtkWidget* widget, BookmarkBarGtk* bar); // GtkVSeparator callbacks. static gboolean OnSeparatorExpose(GtkWidget* widget, GdkEventExpose* event, |