3

このコードがカーソルをエントリの最後の文字に移動しないのはなぜですか?

use Gtk2 '-init';
my $window = Gtk2::Window->new;
my $entry = Gtk2::Entry->new;

my $handler;
$handler = $entry->signal_connect ( 'insert-text' =>
    sub {
        my (
            $entry,
            $chrs,
            $len,
            $pos_strange,
            $handler,
        ) = @_;
        $entry->signal_handler_block ( $$handler );
        $entry->set_text ( 'tryme' );
        $entry->signal_stop_emission_by_name ('insert-text');
        $entry->signal_handler_unblock ( $$handler );
        $entry->set_position ( -1 );
    },
    \$handler
);

$window->set_size_request ( 200, 100 );
$window->add ( $entry );
$window->set_position ('center_always');
$window->show_all;
$window->signal_connect ( delete_event => sub { Gtk2->main_quit; } );
Gtk2->main;
4

1 に答える 1

3

最後のinsert-textハンドラーが返されると、Gtk は の値を使用してカーソル位置を更新するposため、コードはカーソルを移動し、Gtk は再びカーソルを移動します。上記のようにアイドル コールバックを使用することもできますが、ハンドラーで pos を更新する方がおそらくクリーンです。*pos = g_utf8_strlen ("tryme"), 0)perl の代わりに同等のことをしたい$entry->set_position ( -1 );

于 2013-09-09T09:09:23.070 に答える