Gtk-Perl

 view release on metacpan or  search on metacpan

Gtk/xs/GtkObject.xs  view on Meta::CPAN

		fprintf(stderr, "Class is not registered\n");
		return;
	}

#ifdef DEBUG_TYPES	
	printf("Within generic class init\n");
#endif

#ifdef GTK_1_1
	klass->set_arg = (GtkArgGetFunc)generic_perl_gtk_arg_set_func;
	klass->get_arg = (GtkArgSetFunc)generic_perl_gtk_arg_get_func;
#endif


	PUSHMARK(SP);
	XPUSHs(sv_2mortal(newSVpv(perlClass, 0)));
	PUTBACK;
	perl_call_method("GTK_CLASS_INIT", G_DISCARD);

}

static void generic_perl_gtk_object_init(GtkObject * object, GtkObjectClass *klass)
{
	SV * s;
	dSP;
	char * func;
	CV *cv;

	s = newSVGtkObjectRef(object, ptname_for_gtnumber(klass->type));
	if (!s) {
		fprintf(stderr, "Object is not of registered type\n");
		return;
	}

	PUSHMARK(SP);
	/*XPUSHs(sv_2mortal(newSVpv(ptname_for_gtnumber(object->klass->type), 0)));*/
	XPUSHs(sv_2mortal(s));
	PUTBACK;
	func = g_strdup_printf("%s::GTK_OBJECT_INIT", ptname_for_gtnumber(object->klass->type));
	/*perl_call_method("GTK_OBJECT_INIT", G_DISCARD);*/
#ifdef DEBUG_TYPES	
	printf("Within generic object init (obj: %s, class: %s): %s\n", ptname_for_gtnumber(object->klass->type), ptname_for_gtnumber(klass->type), func);
#endif

	if ((cv=perl_get_cv(func, 0)))
		perl_call_sv((SV*)cv, G_DISCARD);
	g_free(func);	
}


void destroy_data(gpointer data)
{
	SvREFCNT_dec((SV*)data);
}


MODULE = Gtk::Object		PACKAGE = Gtk::Object		PREFIX = gtk_object_

#ifdef GTK_OBJECT

# FIXME: See if we need signal_connect_while_alive

int
signal_connect(object, event, handler, ...)
	Gtk::Object	object
	char *	event
	SV *	handler
	ALIAS:
		Gtk::Object::signal_connect = 0
		Gtk::Object::signal_connect_after = 1
	CODE:
	{
		AV * args;
		SV * arg;
		SV ** fixup;
		int i,j;
		int type;
		/*char num[20];
		void * fixupfunc = 0;*/
		args = newAV();
		
		type = gtk_signal_lookup(event, object->klass->type);
		
		if (!ix)
			i = gtk_signal_connect (GTK_OBJECT (object), event,
				NULL, (void*)args);
		else
			i = gtk_signal_connect_after (GTK_OBJECT (object), event,
				NULL, (void*)args);
		
				
		av_push(args, newRV_inc(SvRV(ST(0))));
		av_push(args, newSVsv(ST(1)));
		av_push(args, newSViv(type));
		
		PackCallbackST(args, 2);
		
		RETVAL = i;
	}
	OUTPUT:
	RETVAL

void
signal_disconnect(object, id)
	Gtk::Object	object
	int	id
	CODE:
	gtk_signal_disconnect(object, id);

void
signal_handlers_destroy(object)
	Gtk::Object	object
	CODE:
	gtk_signal_handlers_destroy(object);

char *
type_name(object)
	Gtk::Object	object
	CODE:
	RETVAL = gtk_type_name(GTK_OBJECT_TYPE(object));
	OUTPUT:



( run in 2.924 seconds using v1.01-cache-2.11-cpan-437f7b0c052 )