[monkey-bubble: 115/753] fixup the destroy/finalize handlers. Make sure destroy handlers can be



commit b435ca594958c6bc200dfee39d2e5baf85b9bc3b
Author: George Lebl <jirka 5z com>
Date:   Sat Jul 15 00:15:20 2000 +0000

    fixup the destroy/finalize handlers. Make sure destroy handlers can be
    
    Fri Jul 14 17:10:54 2000  George Lebl <jirka 5z com>
    
    	* *.c: fixup the destroy/finalize handlers.  Make sure destroy
    	  handlers can be called multiple times and move freeing of
    	  private structure to finalize.  Also all unref stuff is supposed
    	  to be in the destroy handler and not finalize according to gtk
    	  docs.
    
    	* gnome-icon-list.c: Make the typedefs standard and make the
    	  private structure standard.

 libgnomeui/gnome-scores.c |   21 +++++++++++++++++++++
 1 files changed, 21 insertions(+), 0 deletions(-)
---
diff --git a/libgnomeui/gnome-scores.c b/libgnomeui/gnome-scores.c
index 0befbae..3920e7c 100644
--- a/libgnomeui/gnome-scores.c
+++ b/libgnomeui/gnome-scores.c
@@ -58,6 +58,7 @@ struct _GnomeScoresPrivate
 static void gnome_scores_class_init (GnomeScoresClass *klass);
 static void gnome_scores_init       (GnomeScores      *scores);
 static void gnome_scores_destroy    (GtkObject        *object);
+static void gnome_scores_finalize   (GObject          *object);
 
 static GnomeDialogClass *parent_class = NULL;
 
@@ -143,10 +144,13 @@ static void
 gnome_scores_class_init (GnomeScoresClass *class)
 {
 	GtkObjectClass *object_class;
+	GObjectClass *gobject_class;
 
 	object_class = (GtkObjectClass *) class;
+	gobject_class = (GObjectClass *) class;
 
 	object_class->destroy = gnome_scores_destroy;
+	gobject_class->finalize = gnome_scores_finalize;
 
 	parent_class = gtk_type_class (gnome_dialog_get_type ());
 }
@@ -156,12 +160,29 @@ gnome_scores_destroy(GtkObject *object)
 {
 	GnomeScores *gs = GNOME_SCORES(object);
 
+	/* remember, destroy can be run multiple times! */
+
 	g_free(gs->_priv->label_names);
+	gs->_priv->label_names = NULL;
 	g_free(gs->_priv->label_scores);
+	gs->_priv->label_scores = NULL;
 	g_free(gs->_priv->label_times);
+	gs->_priv->label_times = NULL;
+
+	if(GTK_OBJECT_CLASS(parent_class)->destroy)
+		(* GTK_OBJECT_CLASS(parent_class)->destroy) (object);
+}
+
+static void
+gnome_scores_finalize(GObject *object)
+{
+	GnomeScores *gs = GNOME_SCORES(object);
 
 	g_free(gs->_priv);
 	gs->_priv = NULL;
+
+	if(G_OBJECT_CLASS(parent_class)->finalize)
+		(* G_OBJECT_CLASS(parent_class)->finalize) (object);
 }
 
 /**



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]