[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