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

Derek Atkins warlord at cvs.gnucash.org
Fri Dec 17 10:50:37 EST 2004


Log Message:
-----------
Stephen Evanchik's GNCDateEdit GObject patch.

        * src/gnome-utils/gnc-date-edit.h:
          Removed #include <gnome.h>
          Added #include <glib.h>
          Added private member 'disposed' to GNCDateEdit struct
        * src/gnome-utils/gnc-date-edit.c:
          Converted the following functions to use GObject:
                gnc_date_edit_get_type,
                gnc_date_edit_class_init
          Renamed gnc_date_edit_destroy to gnc_date_edit_finalize
          Added gnc_date_edit_dispose function that handles 
          child widget destruction
          Explicit casts to GTK_WIDGET in create_children

Tags:
----
gnucash-gnome2-dev

Modified Files:
--------------
    gnucash:
        ChangeLog
    gnucash/src/gnome-utils:
        gnc-date-edit.c
        gnc-date-edit.h

Revision Data
-------------
Index: ChangeLog
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/ChangeLog,v
retrieving revision 1.1487.2.148
retrieving revision 1.1487.2.149
diff -LChangeLog -LChangeLog -u -r1.1487.2.148 -r1.1487.2.149
--- ChangeLog
+++ ChangeLog
@@ -1,3 +1,19 @@
+2004-12-17  Derek Atkins  <derek at ihtfp.com>
+
+	Stephen Evanchik's GNCDateEdit GObject patch:
+        * src/gnome-utils/gnc-date-edit.h:
+          Removed #include <gnome.h>
+          Added #include <glib.h>
+          Added private member 'disposed' to GNCDateEdit struct
+        * src/gnome-utils/gnc-date-edit.c:
+          Converted the following functions to use GObject:
+                gnc_date_edit_get_type,
+                gnc_date_edit_class_init
+          Renamed gnc_date_edit_destroy to gnc_date_edit_finalize
+          Added gnc_date_edit_dispose function that handles 
+          child widget destruction
+          Explicit casts to GTK_WIDGET in create_children
+
 2004-12-16  Joshua Sled  <jsled at asynchronous.org>
 
 	Stephen Evanchik's GncGeneralSelect GObject cleanup patch:
Index: gnc-date-edit.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/gnome-utils/gnc-date-edit.c,v
retrieving revision 1.5.4.9
retrieving revision 1.5.4.10
diff -Lsrc/gnome-utils/gnc-date-edit.c -Lsrc/gnome-utils/gnc-date-edit.c -u -r1.5.4.9 -r1.5.4.10
--- src/gnome-utils/gnc-date-edit.c
+++ src/gnome-utils/gnc-date-edit.c
@@ -57,8 +57,9 @@
 
 
 static void gnc_date_edit_init         (GNCDateEdit      *gde);
-static void gnc_date_edit_class_init   (GNCDateEditClass *class);
-static void gnc_date_edit_destroy      (GtkObject          *object);
+static void gnc_date_edit_class_init   (GNCDateEditClass *klass);
+static void gnc_date_edit_dispose      (GObject          *object);
+static void gnc_date_edit_finalize     (GObject          *object);
 static void gnc_date_edit_forall       (GtkContainer       *container,
                                         gboolean	    include_internals,
                                         GtkCallback	    callback,
@@ -76,24 +77,28 @@
  *
  * Returns the GtkType for the GNCDateEdit widget
  */
-guint
+GType
 gnc_date_edit_get_type (void)
 {
-	static guint date_edit_type = 0;
+	static GType date_edit_type = 0;
 
-	if (!date_edit_type){
-		GtkTypeInfo date_edit_info = {
-			"GNCDateEdit",
-			sizeof (GNCDateEdit),
+	if (date_edit_type == 0){
+		static const GTypeInfo date_edit_info = {
 			sizeof (GNCDateEditClass),
-			(GtkClassInitFunc) gnc_date_edit_class_init,
-			(GtkObjectInitFunc) gnc_date_edit_init,
 			NULL,
 			NULL,
+			(GClassInitFunc) gnc_date_edit_class_init,
+			NULL,
+			NULL,
+			sizeof (GNCDateEdit),
+			0, /* n_preallocs */
+			(GInstanceInitFunc) gnc_date_edit_init,
+			NULL,
 		};
 
-		date_edit_type = gtk_type_unique (gtk_hbox_get_type (),
-                                                  &date_edit_info);
+		date_edit_type = g_type_register_static (GTK_TYPE_HBOX,
+							"GNCDateEdit",
+							 &date_edit_info, 0);
 	}
 	
 	return date_edit_type;
@@ -370,19 +375,18 @@
 }
 
 static void
-gnc_date_edit_class_init (GNCDateEditClass *class)
+gnc_date_edit_class_init (GNCDateEditClass *klass)
 {
-	GtkContainerClass *container_class = (GtkContainerClass *) class;
-	GtkObjectClass *object_class = (GtkObjectClass *) class;
-	GObjectClass *gobject_class = (GObjectClass *) class;
+	GtkContainerClass *container_class = (GtkContainerClass *) klass;
+	GObjectClass *object_class = (GObjectClass *) klass;
 
-	object_class = (GtkObjectClass*) class;
+	object_class = (GObjectClass*) klass;
 	
-	parent_class = gtk_type_class (gtk_hbox_get_type ());
+	parent_class = g_type_class_ref(GTK_TYPE_HBOX);
 
 	date_edit_signals [TIME_CHANGED] =
 		g_signal_new ("time_changed",
-			      G_TYPE_FROM_CLASS (gobject_class),
+			      G_TYPE_FROM_CLASS (object_class),
 			      G_SIGNAL_RUN_FIRST,
 			      G_STRUCT_OFFSET (GnomeDateEditClass, time_changed),
 			      NULL, NULL,
@@ -391,7 +395,7 @@
 
 	date_edit_signals [DATE_CHANGED] =
 		g_signal_new ("date_changed",
-			      G_TYPE_FROM_CLASS (gobject_class),
+			      G_TYPE_FROM_CLASS (object_class),
 			      G_SIGNAL_RUN_FIRST,
 			      G_STRUCT_OFFSET (GnomeDateEditClass, date_changed),
 			      NULL, NULL,
@@ -400,22 +404,24 @@
 
 	container_class->forall = gnc_date_edit_forall;
 
-	object_class->destroy = gnc_date_edit_destroy;
+	object_class->dispose = gnc_date_edit_dispose;
+	object_class->finalize = gnc_date_edit_finalize;
 
-	class->date_changed = NULL;
-	class->time_changed = NULL;
+	klass->date_changed = NULL;
+	klass->time_changed = NULL;
 }
 
 static void
 gnc_date_edit_init (GNCDateEdit *gde)
 {
+	gde->disposed = FALSE;
 	gde->lower_hour = 7;
 	gde->upper_hour = 19;
 	gde->flags = GNC_DATE_EDIT_SHOW_TIME;
 }
 
 static void
-gnc_date_edit_destroy (GtkObject *object)
+gnc_date_edit_finalize (GObject *object)
 {
 	GNCDateEdit *gde;
 
@@ -424,13 +430,42 @@
 
 	gde = GNC_DATE_EDIT (object);
 
-	if (gde->cal_popup != NULL) {
-		gtk_widget_destroy (gde->cal_popup);
-		gde->cal_popup = NULL;
-	}
 
-	if (GTK_OBJECT_CLASS (parent_class)->destroy)
-		(* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
+	if (G_OBJECT_CLASS (parent_class)->finalize)
+		(* G_OBJECT_CLASS (parent_class)->finalize) (object);
+}
+
+static void
+gnc_date_edit_dispose (GObject *object)
+{
+	GNCDateEdit *gde;
+
+	g_return_if_fail (object != NULL);
+	g_return_if_fail (GNC_IS_DATE_EDIT (object));
+
+	gde = GNC_DATE_EDIT (object);
+
+	if(gde->disposed)
+		return;
+
+	gde->disposed = TRUE;
+
+	/* Only explicitly destroy the toplevel elements */
+
+	gtk_widget_destroy (GTK_WIDGET(gde->date_entry));
+	gde->date_entry = NULL;
+
+	gtk_widget_destroy (GTK_WIDGET(gde->date_button));
+	gde->date_button= NULL;
+
+	gtk_widget_destroy (GTK_WIDGET(gde->time_entry));
+	gde->time_entry = NULL;
+
+	gtk_widget_destroy (GTK_WIDGET(gde->time_popup));
+	gde->time_popup = NULL;
+
+	if (G_OBJECT_CLASS (parent_class)->dispose)
+		(* G_OBJECT_CLASS (parent_class)->dispose) (object);
 }
 
 static void
@@ -589,7 +624,7 @@
 	gde->date_entry  = gtk_entry_new ();
 	gtk_entry_set_width_chars (GTK_ENTRY (gde->date_entry), 11);
 	gtk_box_pack_start (GTK_BOX (gde), gde->date_entry, TRUE, TRUE, 0);
-	gtk_widget_show (gde->date_entry);
+	gtk_widget_show (GTK_WIDGET(gde->date_entry));
 	g_signal_connect (G_OBJECT (gde->date_entry), "key_press_event",
 			  G_CALLBACK (key_press_entry), gde);
 #if 0
@@ -604,7 +639,7 @@
 
 	hbox = gtk_hbox_new (FALSE, 3);
 	gtk_container_add (GTK_CONTAINER (gde->date_button), hbox);
-	gtk_widget_show (hbox);
+	gtk_widget_show (GTK_WIDGET(hbox));
 
 	/* Calendar label, only shown if the date editor has a time field */
 
@@ -612,16 +647,16 @@
 	gtk_misc_set_alignment (GTK_MISC (gde->cal_label), 0.0, 0.5);
 	gtk_box_pack_start (GTK_BOX (hbox), gde->cal_label, TRUE, TRUE, 0);
 	if (gde->flags & GNC_DATE_EDIT_SHOW_TIME)
-		gtk_widget_show (gde->cal_label);
+		gtk_widget_show (GTK_WIDGET(gde->cal_label));
 
 	arrow = gtk_arrow_new (GTK_ARROW_DOWN, GTK_SHADOW_OUT);
 	gtk_box_pack_start (GTK_BOX (hbox), arrow, TRUE, FALSE, 0);
-	gtk_widget_show (arrow);
+	gtk_widget_show (GTK_WIDGET(arrow));
 
-	gtk_widget_show (gde->date_button);
+	gtk_widget_show (GTK_WIDGET(gde->date_button));
 
 	gde->time_entry = gtk_entry_new_with_max_length (12);
-	gtk_widget_set_usize (gde->time_entry, 88, 0);
+	gtk_widget_set_usize (GTK_WIDGET(gde->time_entry), 88, 0);
 	gtk_box_pack_start (GTK_BOX (gde), gde->time_entry, TRUE, TRUE, 0);
 
 	gde->time_popup = gtk_option_menu_new ();
@@ -635,13 +670,13 @@
 			  G_CALLBACK  (fill_time_popup), gde);
 
 	if (gde->flags & GNC_DATE_EDIT_SHOW_TIME) {
-		gtk_widget_show (gde->time_entry);
-		gtk_widget_show (gde->time_popup);
+		gtk_widget_show (GTK_WIDGET(gde->time_entry));
+		gtk_widget_show (GTK_WIDGET(gde->time_popup));
 	}
 
 	gde->cal_popup = gtk_window_new (GTK_WINDOW_POPUP);
-	gtk_widget_set_events (gde->cal_popup,
-			       gtk_widget_get_events (gde->cal_popup) |
+	gtk_widget_set_events (GTK_WIDGET(gde->cal_popup),
+			       gtk_widget_get_events (GTK_WIDGET(gde->cal_popup)) |
                                GDK_KEY_PRESS_MASK);
 	g_signal_connect (G_OBJECT (gde->cal_popup), "delete_event",
 			    (GtkSignalFunc) delete_popup,
@@ -658,7 +693,7 @@
 	frame = gtk_frame_new (NULL);
 	gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
 	gtk_container_add (GTK_CONTAINER (gde->cal_popup), frame);
-	gtk_widget_show (frame);
+	gtk_widget_show (GTK_WIDGET(frame));
 
 	gde->calendar = gtk_calendar_new ();
 	gtk_calendar_display_options
@@ -673,7 +708,7 @@
                             "day_selected_double_click",
 			  G_CALLBACK  (day_selected_double_click), gde);
 	gtk_container_add (GTK_CONTAINER (frame), gde->calendar);
-        gtk_widget_show (gde->calendar);
+        gtk_widget_show (GTK_WIDGET(gde->calendar));
 }
 
 /**
Index: gnc-date-edit.h
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/gnome-utils/gnc-date-edit.h,v
retrieving revision 1.4.4.4
retrieving revision 1.4.4.5
diff -Lsrc/gnome-utils/gnc-date-edit.h -Lsrc/gnome-utils/gnc-date-edit.h -u -r1.4.4.4 -r1.4.4.5
--- src/gnome-utils/gnc-date-edit.h
+++ src/gnome-utils/gnc-date-edit.h
@@ -32,7 +32,7 @@
 #ifndef GNC_DATE_EDIT_H
 #define GNC_DATE_EDIT_H 
 
-#include <gnome.h>
+#include <glib.h>
 
 typedef enum {
 	GNC_DATE_EDIT_SHOW_TIME             = 1 << 0,
@@ -70,6 +70,8 @@
 	int       upper_hour;
 	
 	int       flags;
+
+	int       disposed;
 } GNCDateEdit;
 
 typedef struct {
@@ -78,7 +80,7 @@
 	void (*time_changed) (GNCDateEdit *gde);
 } GNCDateEditClass;
 
-guint     gnc_date_edit_get_type        (void);
+GType     gnc_date_edit_get_type        (void);
 
 GtkWidget *gnc_date_edit_new            (time_t the_time,
                                          int show_time, int use_24_format);


More information about the gnucash-changes mailing list