[Gnucash-changes] Stephen Evanchik's GncGeneralSelect GObject cleanup patch.

Joshua Sled jsled at cvs.gnucash.org
Thu Dec 16 21:06:15 EST 2004


Log Message:
-----------
Stephen Evanchik's GncGeneralSelect GObject cleanup patch.

Tags:
----
gnucash-gnome2-dev

Modified Files:
--------------
    gnucash:
        ChangeLog
    gnucash/src/gnome-utils:
        gnc-general-select.c
        gnc-general-select.h

Revision Data
-------------
Index: ChangeLog
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/ChangeLog,v
retrieving revision 1.1487.2.147
retrieving revision 1.1487.2.148
diff -LChangeLog -LChangeLog -u -r1.1487.2.147 -r1.1487.2.148
--- ChangeLog
+++ ChangeLog
@@ -1,3 +1,17 @@
+2004-12-16  Joshua Sled  <jsled at asynchronous.org>
+
+	Stephen Evanchik's GncGeneralSelect GObject cleanup patch:
+	* src/gnome-utils/gnc-general-select.h:
+          Removed #include <glib-object.h>
+          Added #include <glib.h>
+          Added private member 'disposed' to GNCGeneralSelect
+	* src/gnome-utils/gnc-general-select.c:
+          Converted the following functions to use GObject:
+                gnc_general_select_get_type,
+                gnc_general_select_class_init
+          Added gnc_general_select_dispose function that handles
+          child widget destruction
+
 2004-12-15  Joshua Sled  <jsled at asynchronous.org>
 
 	* src/register/register-gnome/gnucash-item-edit.c
Index: gnc-general-select.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/gnome-utils/gnc-general-select.c,v
retrieving revision 1.3.4.5
retrieving revision 1.3.4.6
diff -Lsrc/gnome-utils/gnc-general-select.c -Lsrc/gnome-utils/gnc-general-select.c -u -r1.3.4.5 -r1.3.4.6
--- src/gnome-utils/gnc-general-select.c
+++ src/gnome-utils/gnc-general-select.c
@@ -45,6 +45,7 @@
 
 static void gnc_general_select_init         (GNCGeneralSelect      *gsl);
 static void gnc_general_select_class_init   (GNCGeneralSelectClass *class);
+static void gnc_general_select_dispose      (GObject               *object);
 static void gnc_general_select_finalize     (GObject               *object);
 
 static GtkHBoxClass *parent_class;
@@ -56,24 +57,28 @@
  *
  * Returns the GtkType for the GNCGeneralSelect widget
  */
-guint
+GType
 gnc_general_select_get_type (void)
 {
-	static guint general_select_type = 0;
+	static GType general_select_type = 0;
 
-	if (!general_select_type){
-		GtkTypeInfo general_select_info = {
-			"GNCGeneralSelect",
-			sizeof (GNCGeneralSelect),
+	if (general_select_type == 0) {
+		static const GTypeInfo general_select_info = {
 			sizeof (GNCGeneralSelectClass),
-			(GtkClassInitFunc) gnc_general_select_class_init,
-			(GtkObjectInitFunc) gnc_general_select_init,
 			NULL,
 			NULL,
+			(GClassInitFunc) gnc_general_select_class_init,
+			NULL,
+			NULL,
+			sizeof (GNCGeneralSelect),
+			0,
+			(GInstanceInitFunc) gnc_general_select_init,
+			NULL,
 		};
 
-		general_select_type = gtk_type_unique (gtk_hbox_get_type (),
-                                                       &general_select_info);
+		general_select_type = g_type_register_static(GTK_TYPE_HBOX,
+							"GNCGeneralSelect",
+							 &general_select_info, 0);
 	}
 
 	return general_select_type;
@@ -109,19 +114,21 @@
 
 	object_class = (GObjectClass*) klass;
 
-	parent_class = gtk_type_class (gtk_hbox_get_type ());
+	parent_class = g_type_class_ref(GTK_TYPE_HBOX);
 
         general_select_signals[SELECTION_CHANGED] =
-                gtk_signal_new("changed",
-                               GTK_RUN_FIRST,
-                               GTK_CLASS_TYPE(object_class),
-                               GTK_SIGNAL_OFFSET(GNCGeneralSelectClass,
-                                                 changed),
-                               gtk_marshal_NONE__NONE,
-                               GTK_TYPE_NONE, 0);
+                g_signal_new("changed",
+                               G_TYPE_FROM_CLASS(object_class),
+                               G_SIGNAL_RUN_FIRST,
+                               G_STRUCT_OFFSET(GNCGeneralSelectClass,
+                                                changed),
+                               NULL, NULL,
+                               g_cclosure_marshal_VOID__VOID,
+                               G_TYPE_NONE, 0);
 
 	container_class->forall = gnc_general_select_forall;
 
+	object_class->dispose = gnc_general_select_dispose;
 	object_class->finalize = gnc_general_select_finalize;
 
         klass->changed = NULL;
@@ -130,6 +137,7 @@
 static void
 gnc_general_select_init (GNCGeneralSelect *gsl)
 {
+        gsl->disposed = FALSE;
         gsl->selected_item = NULL;
 }
 
@@ -143,14 +151,39 @@
 
         gsl = GNC_GENERAL_SELECT (object);
 
-        gsl->entry = NULL;
-        gsl->button = NULL;
 
 	if (G_OBJECT_CLASS (parent_class)->finalize)
 		G_OBJECT_CLASS (parent_class)->finalize (object);
 }
 
 static void
+gnc_general_select_dispose (GObject *object)
+{
+        GNCGeneralSelect *gsl;
+
+	g_return_if_fail (object != NULL);
+	g_return_if_fail (GNC_IS_GENERAL_SELECT (object));
+
+        gsl = GNC_GENERAL_SELECT (object);
+
+        if(gsl->disposed)
+                return;
+
+        gsl->disposed = TRUE;
+
+
+        gtk_widget_destroy(GTK_WIDGET(gsl->entry));
+        gsl->entry = NULL;
+
+        gtk_widget_destroy(GTK_WIDGET(gsl->button));
+        gsl->button = NULL;
+
+
+	if (G_OBJECT_CLASS (parent_class)->dispose)
+		G_OBJECT_CLASS (parent_class)->dispose (object);
+}
+
+static void
 select_cb(GtkButton * button, gpointer user_data)
 {
         GNCGeneralSelect *gsl = user_data;
Index: gnc-general-select.h
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/gnome-utils/gnc-general-select.h,v
retrieving revision 1.3.4.1
retrieving revision 1.3.4.2
diff -Lsrc/gnome-utils/gnc-general-select.h -Lsrc/gnome-utils/gnc-general-select.h -u -r1.3.4.1 -r1.3.4.2
--- src/gnome-utils/gnc-general-select.h
+++ src/gnome-utils/gnc-general-select.h
@@ -32,6 +32,7 @@
 #define GNC_GENERAL_SELECT_H
 
 #include <gnome.h>
+#include <glib.h>
 
 #define GNC_GENERAL_SELECT(obj)          G_TYPE_CHECK_INSTANCE_CAST (obj, gnc_general_select_get_type(), GNCGeneralSelect)
 #define GNC_GENERAL_SELECT_CLASS(klass)  G_TYPE_CHECK_CLASS_CAST (klass, gnc_general_select_get_type(), \ GNCGeneralSelectClass)
@@ -57,6 +58,8 @@
   GNCGeneralSelectGetStringCB	get_string;
   GNCGeneralSelectNewSelectCB	new_select;
   gpointer			cb_arg;
+
+  int disposed; /* private */
 } GNCGeneralSelect;
 
 typedef struct {
@@ -75,7 +78,7 @@
 gpointer   gnc_general_select_get_selected   (GNCGeneralSelect *gsl);
 const char *gnc_general_select_get_printname (GNCGeneralSelect *gsl,
 					      gpointer selection);
-guint      gnc_general_select_get_type       (void);
+GType      gnc_general_select_get_type       (void);
 
 #endif
 


More information about the gnucash-changes mailing list