… | |
… | |
209 | my ($arg) = @_; |
209 | my ($arg) = @_; |
210 | |
210 | |
211 | my $w = $self->{widget}{$arg->{id}} |
211 | my $w = $self->{widget}{$arg->{id}} |
212 | or return; |
212 | or return; |
213 | |
213 | |
214 | $w->{$arg->{name}} = $arg->{value}; |
214 | my $attr = $arg->{attr}; |
|
|
215 | |
|
|
216 | for (my $i = 0; $i < $#$attr; $i += 2) { |
|
|
217 | my ($member, $value) = @$attr[$i, $i+1]; |
|
|
218 | if (defined $value) { |
|
|
219 | $w->{$member} = $value; |
|
|
220 | } else { |
|
|
221 | delete $w->{$member}; |
|
|
222 | } |
|
|
223 | $w->{parent}->realloc if $member =~ /^c_/ && $w->{visible}; |
|
|
224 | } |
215 | }); |
225 | }); |
216 | |
226 | |
217 | # widget get |
227 | # widget get |
218 | $self->connect_ext (w_g => sub { |
228 | $self->connect_ext (w_g => sub { |
219 | my ($arg) = @_; |
229 | my ($arg) = @_; |
220 | |
230 | |
221 | my $w = $self->{widget}{$arg->{id}} |
231 | my $w = $self->{widget}{$arg->{id}} |
222 | or return; |
232 | or return; |
223 | |
233 | |
224 | $self->send_exti_msg (w_r => rid => $arg->{rid}, res => [$w->{$arg->{name}}]); |
234 | $self->send_exti_msg (w_r => rid => $arg->{rid}, res => [map $w->{$_}, @{$arg->{attr}}]); |
225 | }); |
235 | }); |
226 | |
236 | |
227 | # destroy widgets on logout |
237 | # destroy widgets on logout |
228 | $self->{on_stop_game_guard} = $self->{map_widget}{root}->connect (stop_game => sub { |
238 | $self->{on_stop_game_guard} = $self->{map_widget}{root}->connect (stop_game => sub { |
229 | for my $ws (values %{delete $self->{widgetset} || {}}) { |
239 | for my $ws (values %{delete $self->{widgetset} || {}}) { |