Prima

 view release on metacpan or  search on metacpan

class/Component.c  view on Meta::CPAN

	}
	if ( var-> evQueue != NULL)
	{
		list_first_that( var-> evQueue, (void*)free_queue, NULL);
		list_destroy( var-> evQueue);
		free( var-> evQueue);
		var-> evQueue = NULL;
	}
	if ( var-> components != NULL) {
		list_destroy( var-> components);
		free( var-> components);
		var-> components = NULL;
	}
	apc_component_destroy( self);
	free( var-> name);
	var-> name = NULL;
	free( var-> evStack);
	var-> evStack = NULL;
	inherited done( self);
}

void
Component_attach( Handle self, Handle object)
{
	if ( var-> stage > csNormal) return;

	if ( object && kind_of( object, CComponent)) {
		if ( var-> components == NULL)
			var-> components = plist_create( 8, 8);
		else
			if ( list_index_of( var-> components, object) >= 0) {
				warn( "Object attach failed");
				return;
			}
		list_add( var-> components, object);
		SvREFCNT_inc( SvRV(( PObject( object))-> mate));
	} else
		warn( "Object attach failed");
}

void
Component_detach( Handle self, Handle object, Bool kill)
{
	if ( object && ( var-> components != NULL)) {
		int index = list_index_of( var-> components, object);
		if ( index >= 0) {
			list_delete_at( var-> components, index);
			--SvREFCNT( SvRV(( PObject( object))-> mate));
			if ( kill) Object_destroy( object);
		}
	}
}

SV *
Component_name( Handle self, Bool set, SV * name)
{
	if ( set) {
		free( var-> name);
		var-> name = NULL;
		var-> name = duplicate_string( SvPV_nolen( name));
		opt_assign( optUTF8_name, prima_is_utf8_sv(name));
		if ( var-> stage >= csNormal)
			apc_component_fullname_changed_notify( self);
	} else {
		name = newSVpv( var-> name ? var-> name : "", 0);
		if ( is_opt( optUTF8_name)) SvUTF8_on( name);
		return name;
	}
	return NULL_SV;
}

Handle
Component_owner( Handle self, Bool set, Handle owner)
{
	HV * profile;
	if ( !set)
		return var-> owner;
	profile = newHV();
	pset_H( owner, owner);
	my-> set( self, profile);
	sv_free(( SV *) profile);
	return NULL_HANDLE;
}


void
Component_set( Handle self, HV * profile)
{
	/* this can eliminate unwilling items */
	/* from HV before indirect Object::set */
	my-> update_sys_handle( self, profile);

	if ( pexist( owner)) {
		Handle owner, oldOwner = var-> owner;
		if ( !my-> validate_owner( self, &owner, profile))
			croak( "Illegal 'owner' reference passed to %s::%s", my-> className, "set");

		if ( oldOwner && oldOwner != owner) {
			Event ev;
			ev. cmd = cmChildLeave;
			ev. gen. source = oldOwner;
			ev. gen. H      = self;
			if ( oldOwner)
				CComponent( oldOwner)-> message( oldOwner, &ev);
		}

		my-> migrate( self, owner);
		var-> owner = owner;
		pdelete( owner);

		if ( oldOwner != owner) {
			Event ev;

			ev. cmd = cmChildEnter;
			ev. gen. source = owner;
			ev. gen. H      = self;
			if ( owner)
				CComponent( owner)-> message( owner, &ev);

			ev. cmd = cmChangeOwner;
			ev. gen. source = self;
			ev. gen. H      = oldOwner;
			my-> message( self, &ev);
		}
	}

 view all matches for this distribution
 view release on metacpan -  search on metacpan

( run in 1.547 second using v1.00-cache-2.02-grep-82fe00e-cpan-1925d2aa809 )