summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShaun McCance <shaunm@gnome.org>2010-05-18 09:38:47 -0500
committerShaun McCance <shaunm@gnome.org>2010-05-18 09:39:31 -0500
commite2482e393bda8213b0af8c693e32045b1418b9b1 (patch)
treeb96f0f7077793640c91e974e899962a956f6d08e
parentfaca2ee96c70f6376ee3f4ee93db7d138e445965 (diff)
downloadyelp-e2482e393bda8213b0af8c693e32045b1418b9b1.tar.gz
[libyelp/yelp-view] Manage and disconnect GtkAdjustment signal handlers
-rw-r--r--libyelp/yelp-view.c26
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);
}
}