package Foo; use strict; use warnings; use Gtk2 '-init'; use Glib::Object::Subclass 'Gtk2::EventBox', signals => { mysig => { param_types => [], return_type => undef, flags => ['run-last','action'], } }; Gtk2::Rc->parse_string (<<'HERE'); binding "Foo_keys" { bind "x" { "mysig" () } } class "Foo" binding "Foo_keys" HERE sub do_mysig { my ($self) = @_; print "hello from do_mysig\n"; return 1; } package main; use strict; use warnings; my $toplevel = Gtk2::Window->new('toplevel'); my $foo = Foo->new; $toplevel->add ($foo); my $event = Gtk2::Gdk::Event->new ('key-press'); my $keyval = Gtk2::Gdk->keyval_from_name('x'); my $display = $foo->get_display; my $keymap = Gtk2::Gdk::Keymap->get_for_display ($display); my @keys = $keymap->get_entries_for_keyval ($keyval); @keys or die; $event->group($keys[0]->{'group'}); $event->hardware_keycode($keys[0]->{'keycode'}); $foo->signal_emit ('key_press_event', $event); exit 0;