--- deliantra/Deliantra-Client/DC/Protocol.pm 2007/07/14 13:08:40 1.121 +++ deliantra/Deliantra-Client/DC/Protocol.pm 2007/07/19 16:44:14 1.123 @@ -127,6 +127,7 @@ $self->{widget}{$_[0]} }); + # widgetset new $self->connect_ext (ws_n => sub { my ($arg) = @_; @@ -135,6 +136,7 @@ }; }); + # widgetset destroy $self->connect_ext (ws_d => sub { my ($arg) = @_; @@ -145,6 +147,7 @@ for values %{$ws->{w}}; }); + # widgetset destroy $self->connect_ext (ws_c => sub { my ($arg) = @_; @@ -184,6 +187,7 @@ } }); + # widget call $self->connect_ext (w_c => sub { my ($arg) = @_; @@ -200,6 +204,7 @@ } }); + # widget set $self->connect_ext (w_s => sub { my ($arg) = @_; @@ -209,6 +214,7 @@ $w->{$arg->{name}} = $arg->{value}; }); + # widget get $self->connect_ext (w_g => sub { my ($arg) = @_; @@ -218,6 +224,7 @@ $self->send_exti_msg (w_r => rid => $arg->{rid}, res => [$w->{$arg->{name}}]); }); + # destroy widgets on logout $self->{on_stop_game_guard} = $self->{map_widget}{root}->connect (stop_game => sub { for my $ws (values %{delete $self->{widgetset} || {}}) { $_->destroy @@ -776,6 +783,20 @@ $self->{map}->set_texture ($id, @$tex{qw(name w h s t)}, @{$tex->{minified}}); $self->{map_widget}->update; + + $_->() for @{(delete $self->{face_cb}{$id}) || []}; +} + +sub connect_face_update { + my ($self, $id, $cb) = @_; + + push @{$self->{face_cb}{$id}}, $cb; + + CFPlus::guard { + @{$self->{face_cb}{$id}} + = grep $_ != $cb, + @{$self->{face_cb}{$id}}; + } } sub sound_play {