summaryrefslogtreecommitdiff
path: root/ext/gtk/gtk.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/gtk/gtk.c')
-rw-r--r--ext/gtk/gtk.c22
1 files changed, 12 insertions, 10 deletions
diff --git a/ext/gtk/gtk.c b/ext/gtk/gtk.c
index 9114312195..ec4105acbb 100644
--- a/ext/gtk/gtk.c
+++ b/ext/gtk/gtk.c
@@ -196,19 +196,20 @@ static void
gobj_free(obj)
GtkObject *obj;
{
- VALUE self = get_value_from_gobject(obj);
-
- if (GTK_OBJECT_NEED_DESTROY(obj)) {
- gtk_object_destroy(obj);
- }
- rb_ivar_set(self, id_relatives, Qnil);
+ /* just a type mark */
}
static void
-delete_gobject(obj)
- GtkObject *obj;
+delete_gobject(gtkobj, obj)
+ GtkObject *gtkobj;
+ VALUE obj;
{
- ary_delete(gtk_object_list, get_value_from_gobject(obj));
+ struct RData *data;
+
+ data = RDATA(rb_ivar_get(obj, id_gtkdata));
+ data->dfree = 0;
+ data->data = 0;
+ ary_delete(gtk_object_list, obj);
}
static VALUE
@@ -223,7 +224,8 @@ make_gobject(klass, gtkobj)
gtk_object_set_user_data(gtkobj, (gpointer)obj);
rb_ivar_set(obj, id_gtkdata, data);
- gtk_signal_connect(gtkobj, "destroy", (GtkSignalFunc)delete_gobject, 0);
+ gtk_signal_connect(gtkobj, "destroy",
+ (GtkSignalFunc)delete_gobject, (gpointer)obj);
ary_push(gtk_object_list, obj);
return obj;
}