--- deliantra/Deliantra-Client/DC/UI.pm 2006/12/09 02:21:25 1.361 +++ deliantra/Deliantra-Client/DC/UI.pm 2006/12/09 21:26:46 1.362 @@ -3,7 +3,6 @@ use utf8; use strict; -use Scalar::Util (); use List::Util (); use Event; @@ -237,7 +236,7 @@ @_ }, $class; - Scalar::Util::weaken ($CFPlus::UI::WIDGET{$self+0} = $self); + CFPlus::weaken ($CFPlus::UI::WIDGET{$self+0} = $self); for (keys %$self) { if (/^on_(.*)$/) { @@ -532,10 +531,15 @@ #warn +(caller(1))[3] . "emit $signal on $self (parent $self->{parent})\n";#d# - #d##TODO# stop propagating at first true, do not use sum - (List::Util::sum map $_->($self, @args, @append), @{$self->{signal_cb}{$signal} || []}) # before - || ($self->can ("invoke_$signal") || sub { 1 })->($self, @args, @append) # closure - || ($self->{parent} && $self->{parent}->emit ($signal, @args)) # parent + for my $cb ( + @{$self->{signal_cb}{$signal} || []}, # before + ($self->can ("invoke_$signal") || sub { 1 }), # closure + ) { + return $cb->($self, @args, @append) || next; + } + + # parent + $self->{parent} && $self->{parent}->emit ($signal, @args) } sub find_widget { @@ -553,7 +557,7 @@ sub set_parent { my ($self, $parent) = @_; - Scalar::Util::weaken ($self->{parent} = $parent); + CFPlus::weaken ($self->{parent} = $parent); $self->set_visible if $parent->{visible}; } @@ -642,6 +646,7 @@ warn "no draw defined for $self\n"; } +my $cntx;#d# sub DESTROY { my ($self) = @_; @@ -2312,7 +2317,7 @@ $self->{tex} ||= $texture_cache{$self->{path}} ||= new_from_file CFPlus::Texture CFPlus::find_rcfile $self->{path}, mipmap => 1; - Scalar::Util::weaken $texture_cache{$self->{path}}; + CFPlus::weaken $texture_cache{$self->{path}}; $self->{aspect} ||= $self->{tex}{w} / $self->{tex}{h}; @@ -3270,7 +3275,7 @@ ); if ($self->{anim} && $self->{animspeed}) { - Scalar::Util::weaken (my $widget = $self); + CFPlus::weaken (my $widget = $self); $self->{timer} = Event->timer ( at => $self->{animspeed} * int $::NOW / $self->{animspeed}, @@ -3534,7 +3539,7 @@ sub add { my ($self, $title, $widget, $tooltip) = @_; - Scalar::Util::weaken $self; + CFPlus::weaken $self; $self->{buttonbar}->add (new CFPlus::UI::Button markup => $title, @@ -3628,7 +3633,7 @@ @_, ); - Scalar::Util::weaken (my $this = $self); + CFPlus::weaken (my $this = $self); $self->{timer} = Event->timer (after => 1, interval => 1, cb => sub { $this->reorder }); @@ -3777,7 +3782,7 @@ @_, ); - Scalar::Util::weaken ($self->{root} = $self); + CFPlus::weaken ($self->{root} = $self); $self }