use strict; use warnings; use Gtk2 '-init'; Gtk2::Rc->parse_string (<x" { "move-cursor" (logical-positions, -1, 0) } } class "GtkEntry" binding "my_keys" HERE my $toplevel = Gtk2::Window->new('toplevel'); $toplevel->signal_connect (destroy => sub { Gtk2->main_quit; }); my $vbox = Gtk2::VBox->new; $toplevel->add ($vbox); my $entry = Gtk2::Entry->new; # $entry->signal_connect # (key_press_event => sub { # my ($entry, $event) = @_; # print $event->hardware_keycode, " ", $event->group, "\n"; # return 0; # }); $vbox->pack_start ($entry, 0,0,0); my $keyval_left = Gtk2::Gdk->keyval_from_name('Left'); { my $button = Gtk2::Button->new_with_label ("keyval left"); $button->signal_connect (clicked => sub { Glib::Timeout->add (3000, sub { print __FILE__,": keyval left\n"; $entry->bindings_activate ($keyval_left, []); return 0; }); }); $vbox->pack_start ($button, 0,0,0); } { my $button = Gtk2::Button->new_with_label ("event left"); $button->signal_connect (clicked => sub { my $event = Gtk2::Gdk::Event->new ('key-press'); $event->window ($entry->window); $event->hardware_keycode (100); # left $event->group (0); $event->keyval ($keyval_left); $event->set_state ([]); Glib::Timeout->add (3000, sub { print __FILE__,": event left\n"; $entry->bindings_activate_event ($event); return 0; }); }); $vbox->pack_start ($button, 0,0,0); } $toplevel->show_all; Gtk2->main; exit 0;