From: Andrea Zagli Date: Sun, 3 Apr 2011 07:23:22 +0000 (+0200) Subject: Added dispose and finalize to Solipa object. X-Git-Tag: 0.0.4~10 X-Git-Url: https://saetta.ns0.it/gitweb?a=commitdiff_plain;h=46f39fd1b7306b2a382f2d1439e11b8e0df7480e;p=solipa%2Flibsolipa Added dispose and finalize to Solipa object. --- diff --git a/src/solipa.c b/src/solipa.c index e6476a2..1d1ce5d 100644 --- a/src/solipa.c +++ b/src/solipa.c @@ -40,11 +40,15 @@ static void solipa_get_property (GObject *object, GValue *value, GParamSpec *pspec); +static void solipa_dispose (GObject *gobject); +static void solipa_finalize (GObject *gobject); + #define SOLIPA_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), SOLIPA_TYPE, SolipaPrivate)) typedef struct _SolipaPrivate SolipaPrivate; struct _SolipaPrivate { + gchar *camel_tmpdir; CamelSession *camel_session; GdaEx *gdaex; @@ -63,6 +67,8 @@ solipa_class_init (SolipaClass *class) object_class->set_property = solipa_set_property; object_class->get_property = solipa_get_property; + object_class->dispose = solipa_dispose; + object_class->finalize = solipa_finalize; g_type_class_add_private (object_class, sizeof (SolipaPrivate)); } @@ -84,8 +90,6 @@ Solipa Solipa *solipa; SolipaPrivate *priv; - gchar *camel_tmpdir; - /* inizializzo GType e GThread */ g_type_init (); g_thread_init (NULL); @@ -94,13 +98,13 @@ Solipa priv = SOLIPA_GET_PRIVATE (solipa); /* creo la directory temporanea per camel */ - camel_tmpdir = g_mkdtemp (g_build_filename (g_get_tmp_dir (), g_strdup ("solipa-camel-XXXXXX"), NULL)); + priv->camel_tmpdir = g_mkdtemp (g_build_filename (g_get_tmp_dir (), g_strdup ("solipa-camel-XXXXXX"), NULL)); /* inizializzo camel */ - camel_init (camel_tmpdir, FALSE); + camel_init (priv->camel_tmpdir, FALSE); camel_provider_init (); - priv->camel_session = solipa_camel_session_new (camel_tmpdir); + priv->camel_session = solipa_camel_session_new (priv->camel_tmpdir); /* gui */ #ifdef G_OS_WIN32 @@ -268,7 +272,6 @@ solipa_set_property (GObject *object, GParamSpec *pspec) { Solipa *solipa = (Solipa *)object; - SolipaPrivate *priv = SOLIPA_GET_PRIVATE (solipa); switch (property_id) @@ -286,7 +289,6 @@ solipa_get_property (GObject *object, GParamSpec *pspec) { Solipa *solipa = (Solipa *)object; - SolipaPrivate *priv = SOLIPA_GET_PRIVATE (solipa); switch (property_id) @@ -296,3 +298,48 @@ solipa_get_property (GObject *object, break; } } + +static void +solipa_dispose (GObject *gobject) +{ + Solipa *solipa = (Solipa *)gobject; + SolipaPrivate *priv = SOLIPA_GET_PRIVATE (solipa); + + if (priv->gdaex) + { + g_object_unref (priv->gdaex); + priv->gdaex = NULL; + } + + if (priv->gtkbuilder) + { + g_object_unref (priv->gtkbuilder); + priv->gtkbuilder = NULL; + } + + if (priv->camel_session) + { + g_object_unref (priv->camel_session); + priv->camel_session = NULL; + } + + GObjectClass *parent_class = g_type_class_peek_parent (G_OBJECT_GET_CLASS (gobject)); + parent_class->dispose (gobject); +} + +static void +solipa_finalize (GObject *gobject) +{ + Solipa *solipa = (Solipa *)gobject; + SolipaPrivate *priv = SOLIPA_GET_PRIVATE (solipa); + + /* delete camel tmp dir */ + g_rmdir (priv->camel_tmpdir); + + g_free (priv->camel_tmpdir); + g_free (priv->guidir); + g_free (priv->guifile); + + GObjectClass *parent_class = g_type_class_peek_parent (G_OBJECT_GET_CLASS (gobject)); + parent_class->finalize (gobject); +} diff --git a/tests/allegato.c b/tests/allegato.c index 0aa255b..269f97b 100644 --- a/tests/allegato.c +++ b/tests/allegato.c @@ -71,5 +71,7 @@ main (int argc, char *argv[]) gtk_main (); + g_object_unref (solipa); + return 0; }