diff options
author | Shaun McCance <shaunm@gnome.org> | 2010-05-18 09:38:47 -0500 |
---|---|---|
committer | Shaun McCance <shaunm@gnome.org> | 2010-05-18 09:39:31 -0500 |
commit | e2482e393bda8213b0af8c693e32045b1418b9b1 (patch) | |
tree | b96f0f7077793640c91e974e899962a956f6d08e | |
parent | faca2ee96c70f6376ee3f4ee93db7d138e445965 (diff) | |
download | yelp-e2482e393bda8213b0af8c693e32045b1418b9b1.tar.gz |
[libyelp/yelp-view] Manage and disconnect GtkAdjustment signal handlers
-rw-r--r-- | libyelp/yelp-view.c | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/libyelp/yelp-view.c b/libyelp/yelp-view.c index 89eb36bd..01ec1b98 100644 --- a/libyelp/yelp-view.c +++ b/libyelp/yelp-view.c @@ -184,6 +184,8 @@ struct _YelpViewPrivate { GtkAdjustment *hadjustment; gdouble vadjust; gdouble hadjust; + gulong vadjuster; + gulong hadjuster; gchar *popup_link_uri; @@ -247,6 +249,16 @@ yelp_view_dispose (GObject *object) priv->uri = NULL; } + if (priv->vadjuster > 0) { + g_source_remove (priv->vadjuster); + priv->vadjuster = 0; + } + + if (priv->hadjuster > 0) { + g_source_remove (priv->hadjuster); + priv->hadjuster = 0; + } + if (priv->cancellable) { g_cancellable_cancel (priv->cancellable); g_object_unref (priv->cancellable); @@ -603,14 +615,20 @@ view_scroll_adjustments (YelpView *view, { YelpViewPrivate *priv = GET_PRIV (view); priv->vadjustment = vadj; + if (priv->vadjuster > 0) + g_source_remove (priv->vadjuster); + priv->vadjuster = 0; if (vadj) { - g_signal_connect (vadj, "value-changed", - G_CALLBACK (view_scrolled), view); + priv->vadjuster = g_signal_connect (vadj, "value-changed", + G_CALLBACK (view_scrolled), view); } priv->hadjustment = hadj; + if (priv->hadjuster > 0) + g_source_remove (priv->hadjuster); + priv->hadjuster = 0; if (hadj) { - g_signal_connect (hadj, "value-changed", - G_CALLBACK (view_scrolled), view); + priv->hadjuster = g_signal_connect (hadj, "value-changed", + G_CALLBACK (view_scrolled), view); } } |