… | |
… | |
881 | =cut |
881 | =cut |
882 | |
882 | |
883 | sub urxvt::extension::on_disable::DESTROY { |
883 | sub urxvt::extension::on_disable::DESTROY { |
884 | my $disable = shift; |
884 | my $disable = shift; |
885 | |
885 | |
886 | my $self = delete $disable->{""}; |
886 | my $term = delete $disable->{""}; |
887 | |
887 | |
888 | while (my ($htype, $id) = each %$disable) { |
888 | while (my ($htype, $id) = each %$disable) { |
|
|
889 | warn "disable hook $htype,$id\n";#d# |
889 | delete $self->{_hook}[$htype]{$id}; |
890 | delete $term->{_hook}[$htype]{$id}; |
890 | $self->set_should_invoke ($htype, -1); |
891 | $term->set_should_invoke ($htype, -1); |
891 | } |
892 | } |
892 | } |
893 | } |
893 | |
894 | |
894 | sub on { |
895 | sub on { |
895 | my ($self, %hook) = @_; |
896 | my ($self, %hook) = @_; |
896 | |
897 | |
|
|
898 | my $term = $self->{term}; |
|
|
899 | |
897 | my %disable = ( "" => $self ); |
900 | my %disable = ( "" => $term ); |
898 | |
901 | |
899 | while (my ($name, $cb) = each %hook) { |
902 | while (my ($name, $cb) = each %hook) { |
900 | my $htype = $HOOKTYPE{uc $name}; |
903 | my $htype = $HOOKTYPE{uc $name}; |
901 | defined $htype |
904 | defined $htype |
902 | or Carp::croak "unsupported hook type '$name'"; |
905 | or Carp::croak "unsupported hook type '$name'"; |
903 | |
906 | |
904 | my $id = $cb+0; |
|
|
905 | |
|
|
906 | $self->set_should_invoke ($htype, +1); |
907 | $term->set_should_invoke ($htype, +1); |
907 | $disable{$htype} = $id; |
908 | $term->{_hook}[$htype]{ $disable{$htype} = $cb+0 } |
908 | $self->{_hook}[$htype]{$id} = sub { shift; $cb->($self, @_) }; # very ugly indeed |
909 | = sub { shift; $cb->($self, @_) }; # very ugly indeed |
909 | } |
910 | } |
910 | |
911 | |
911 | bless \%disable, "urxvt::extension::on_disable" |
912 | bless \%disable, "urxvt::extension::on_disable" |
912 | } |
913 | } |
913 | |
914 | |