If I save the following code as test.t and run it with
perl test.t
it segfaults at the signal_emit() call.
How can I test the handler for insert-text?
Regards
Jeff
package MyPackage;
use warnings;
use strict;
use Gtk3 -init;
use Glib 1.220 qw(TRUE FALSE); # To get TRUE and FALSE
sub new {
my $self = Gtk3::Dialog->new;
$self->{'entry-widget'} = Gtk3::Entry->new;
$self->{'entry-widget'}->signal_connect(
'insert-text' => \&insert_text_handler, $self );
return $self
}
sub insert_text_handler {
my ( $widget, $string, $len, $position, $self ) = @_;
# only allow integers
if ( $string =~ /^\d+$/smx ) {
$widget->signal_handlers_block_by_func( \&insert_text_handler );
$widget->insert_text( $string, $len, $position++ );
$widget->signal_handlers_unblock_by_func( \&insert_text_handler );
}
$widget->signal_stop_emission_by_name('insert-text');
return $position;
}
package main;
use warnings;
use strict;
use Test::More tests => 2;
ok( my $dialog = MyPackage->new, 'Created dialog' );
$dialog->{'entry-widget'}->signal_connect_after(
'insert-text' => sub {
is( $dialog->get_text, '', 'ignored -' );
Gtk3->main_quit
});
$dialog->{'entry-widget'}->signal_emit('insert-text', '-', 1, 0);
Gtk3->main;
__END__
Attachment:
signature.asc
Description: OpenPGP digital signature