Re: [Java-gnome-developer] CVS: Problem with gdk_BaseObject.c and GTK_IS_OBJECT()
Brought to you by:
afcowie
|
From: John L. <je...@pi...> - 2001-10-09 19:39:16
|
> I have struggled with this issue for some time and as
> yet haven't found a solution. I need to determine if
> a void pointer is actually pointing to a GTK type. All
> macros and methods in GTK assume this is the case
> (like the GTK_IS_OBJECT macro below). Does anybody
> have a suggestion?
Do you really need to pass void pointers around?
John Leuner
> >
> > In CVS version, in other/gdk_BaseObject.c:
> >
> > jobject makeBaseObjectSubclass (JNIEnv *env, jclass cls, void *peer)
> > {
> > if (peer == NULL)
> > return NULL;
> > else if (GTK_IS_OBJECT(peer))
> > return makeBaseObjectClass(env, peer);
> > else {
> > jobject result = (*env)->AllocObject (env, cls);
> > jlong result_jl;
> >
> > *(void **) &result_jl = peer;
> > (*env)->SetLongField (env, result, nativepeerFid, result_jl);
> > return result;
> > }
> > }
> >
> > The GTK_IS_OBJECT is a problem, if you try to create any
> > object not based
> > on Gtk, like GdkGC:
> >
> > xx = new GdkGC(yy);
> >
> > leads to:
> >
> > Program received signal SIGSEGV, Segmentation fault.
> > 0x41383ed6 in makeBaseObjectSubclass (env=0x400887d4, cls=0x6,
> > peer=0x81244f8)
> > at other/gdk_BaseObject.c:70
> > 70 else if (GTK_IS_OBJECT(peer))
> >
> > This, of course happens because "peer" in this context is not a Gtk
> > object, but instead a GdkWindow, which isn't representable in the Gtk
> > object system:
> >
> > (gdb) p *(GdkGC*)peer
> > $14 = {dummy_var = 1701080693}
> > (gdb) p *((GtkObject*)peer)
> > $15 = {klass = 0x65646e75, flags = 135415064, ref_count = 135220712,
> > object_data = 0x1}
> > (gdb) p *((GtkObject*)peer)->klass
> > Cannot access memory at address 0x65646e75
> >
> > In noticed the GTK_IS_OBJECT was added in version 1.5 (of that file).
> > Apparently this hasn't been noticed since the test and sample programs
> > don't use GdkGC directly at all..
> >
> > --
> > sa...@ik... I have become death,
> > destroyer of the worlds.
> >
> >
> > _______________________________________________
> > java-gnome-developer mailing list
> > jav...@li...
> > https://lists.sourceforge.net/lists/listinfo/java-gnome-developer
> >
|