… | |
… | |
403 | } |
403 | } |
404 | |
404 | |
405 | sub check_size { |
405 | sub check_size { |
406 | my ($self) = @_; |
406 | my ($self) = @_; |
407 | |
407 | |
|
|
408 | $self->_check_size; |
|
|
409 | return; |
|
|
410 | my $check_size = $CFClient::UI::ROOT->{_check_size} ||= {}; |
|
|
411 | |
|
|
412 | $check_size->{$self} = $self; |
|
|
413 | |
|
|
414 | $CFClient::UI::ROOT->on_refresh (_check_size => sub { |
|
|
415 | while (%$check_size) { |
|
|
416 | my @widgets = values %$check_size; |
|
|
417 | $_->_check_size |
|
|
418 | for @widgets; |
|
|
419 | } |
|
|
420 | }); |
|
|
421 | } |
|
|
422 | |
|
|
423 | sub _check_size { |
|
|
424 | my ($self) = @_; |
|
|
425 | |
|
|
426 | delete $CFClient::UI::ROOT->{_check_size}{$self}; |
|
|
427 | |
408 | $self->{parent} |
428 | $self->{parent} |
409 | or return 1; |
429 | or return 1; |
410 | |
430 | |
411 | my ($w, $h) = $self->{user_w} && $self->{user_h} |
431 | my ($w, $h) = $self->{user_w} && $self->{user_h} |
412 | ? @$self{qw(user_w user_h)} |
432 | ? @$self{qw(user_w user_h)} |
… | |
… | |
414 | |
434 | |
415 | if ($w != $self->{req_w} || $h != $self->{req_h}) { |
435 | if ($w != $self->{req_w} || $h != $self->{req_h}) { |
416 | $self->{req_w} = $w; |
436 | $self->{req_w} = $w; |
417 | $self->{req_h} = $h; |
437 | $self->{req_h} = $h; |
418 | |
438 | |
419 | $self->{parent}->check_size |
439 | $self->{parent}->_check_size |
420 | or $self->size_allocate ( |
440 | or $self->size_allocate ( |
421 | (List::Util::max $self->{w}, $w), |
441 | (List::Util::max $self->{w}, $w), |
422 | (List::Util::max $self->{h}, $h), |
442 | (List::Util::max $self->{h}, $h), |
423 | ); |
443 | ); |
424 | |
444 | |
… | |
… | |
429 | } |
449 | } |
430 | |
450 | |
431 | sub update { |
451 | sub update { |
432 | my ($self) = @_; |
452 | my ($self) = @_; |
433 | |
453 | |
434 | $self->{parent}->update |
454 | my $update = $CFClient::UI::ROOT->{_update} ||= {}; |
435 | if $self->{parent}; |
455 | |
|
|
456 | $update->{$self} = $self; |
|
|
457 | |
|
|
458 | $CFClient::UI::ROOT->on_refresh (_update => sub { |
|
|
459 | while (%$update) { |
|
|
460 | my @widgets = values %$update; |
|
|
461 | %$update = (); |
|
|
462 | |
|
|
463 | $_->{parent} && $_->{parent}->update |
|
|
464 | for @widgets; |
|
|
465 | } |
|
|
466 | }); |
436 | } |
467 | } |
437 | |
468 | |
438 | sub connect { |
469 | sub connect { |
439 | my ($self, $signal, $cb) = @_; |
470 | my ($self, $signal, $cb) = @_; |
440 | |
471 | |