Prima
view release on metacpan - search on metacpan
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 distributionview release on metacpan - search on metacpan
( run in 1.547 second using v1.00-cache-2.02-grep-82fe00e-cpan-1925d2aa809 )