summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShaun McCance <shaunm@gnome.org>2014-02-25 10:25:47 -0500
committerShaun McCance <shaunm@gnome.org>2014-02-25 10:27:21 -0500
commit9905e5b1b378024f0675ea84a36aeb132f4136c5 (patch)
treeb551afda0b332e7c5bd88f1d34bcf7203d69e815
parentece5a8f8ae21289526dae082eec79a6c9927e0f7 (diff)
downloadyelp-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.c10
-rw-r--r--libyelp/yelp-view.c8
-rw-r--r--src/yelp-window.c4
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;
}