diff options
author | Shaun McCance <shaunm@gnome.org> | 2014-02-25 10:25:47 -0500 |
---|---|---|
committer | Shaun McCance <shaunm@gnome.org> | 2014-02-25 10:27:21 -0500 |
commit | 9905e5b1b378024f0675ea84a36aeb132f4136c5 (patch) | |
tree | b551afda0b332e7c5bd88f1d34bcf7203d69e815 | |
parent | ece5a8f8ae21289526dae082eec79a6c9927e0f7 (diff) | |
download | yelp-9905e5b1b378024f0675ea84a36aeb132f4136c5.tar.gz |
Don't use g_source_remove for signal handlers
This fixes reliable crashes when changing bookmarks or the read later
list if any single window has been closed.
-rw-r--r-- | libyelp/yelp-location-entry.c | 10 | ||||
-rw-r--r-- | libyelp/yelp-view.c | 8 | ||||
-rw-r--r-- | src/yelp-window.c | 4 |
3 files changed, 11 insertions, 11 deletions
diff --git a/libyelp/yelp-location-entry.c b/libyelp/yelp-location-entry.c index 512835ad..153f6595 100644 --- a/libyelp/yelp-location-entry.c +++ b/libyelp/yelp-location-entry.c @@ -522,16 +522,16 @@ location_entry_dispose (GObject *object) priv->view = NULL; } + if (priv->bookmarks_changed) { + g_signal_handler_disconnect (priv->bookmarks, priv->bookmarks_changed); + priv->bookmarks_changed = 0; + } + if (priv->bookmarks) { g_object_unref (priv->bookmarks); priv->bookmarks = NULL; } - if (priv->bookmarks_changed) { - g_source_remove (priv->bookmarks_changed); - priv->bookmarks_changed = 0; - } - if (priv->row) { gtk_tree_row_reference_free (priv->row); priv->row = NULL; diff --git a/libyelp/yelp-view.c b/libyelp/yelp-view.c index 9834c529..91f71f25 100644 --- a/libyelp/yelp-view.c +++ b/libyelp/yelp-view.c @@ -308,12 +308,12 @@ yelp_view_dispose (GObject *object) view_clear_load (YELP_VIEW (object)); if (priv->vadjuster > 0) { - g_source_remove (priv->vadjuster); + g_signal_handler_disconnect (priv->vadjustment, priv->vadjuster); priv->vadjuster = 0; } if (priv->hadjuster > 0) { - g_source_remove (priv->hadjuster); + g_signal_handler_disconnect (priv->hadjustment, priv->hadjuster); priv->hadjuster = 0; } @@ -885,7 +885,7 @@ view_set_hadjustment (YelpView *view, YelpViewPrivate *priv = GET_PRIV (view); priv->hadjustment = gtk_scrollable_get_hadjustment (GTK_SCROLLABLE (view)); if (priv->hadjuster > 0) - g_source_remove (priv->hadjuster); + g_signal_handler_disconnect (priv->hadjustment, priv->hadjuster); priv->hadjuster = 0; if (priv->hadjustment) priv->hadjuster = g_signal_connect (priv->hadjustment, "value-changed", @@ -900,7 +900,7 @@ view_set_vadjustment (YelpView *view, YelpViewPrivate *priv = GET_PRIV (view); priv->vadjustment = gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (view)); if (priv->vadjuster > 0) - g_source_remove (priv->vadjuster); + g_signal_handler_disconnect (priv->vadjustment, priv->vadjuster); priv->vadjuster = 0; if (priv->vadjustment) priv->vadjuster = g_signal_connect (priv->vadjustment, "value-changed", diff --git a/src/yelp-window.c b/src/yelp-window.c index 43534cf8..866b439a 100644 --- a/src/yelp-window.c +++ b/src/yelp-window.c @@ -337,12 +337,12 @@ yelp_window_dispose (GObject *object) } if (priv->read_later_changed) { - g_source_remove (priv->read_later_changed); + g_signal_handler_disconnect (priv->application, priv->read_later_changed); priv->read_later_changed = 0; } if (priv->bookmarks_changed) { - g_source_remove (priv->bookmarks_changed); + g_signal_handler_disconnect (priv->application, priv->bookmarks_changed); priv->bookmarks_changed = 0; } |