DESCRIPTION

A Gtk2::BindingSet is basically a mapping from keyval+modifiers to a named action signal to invoke and with argument values for the signal. Bindings are normally run by the Gtk2::Widget default key-press-event handler, but can also be activated explicitly.

Binding sets can be populated from program code with entry_add_signal, or created from an RC file or string (see Gtk2::Rc). If you use the RC note it doesn't parse and create anything until there's someone interested in the result, such as Gtk2::Settings for widgets. This means binding sets in RC files or strings don't exist for Gtk2::BindingSet->find to retrieve until at least one widget has been created (or similar).

Currently there's no Perl-level access to the contents of a BindingSet, except for set_name.

Gtk2::GTK_PATH_PRIO_LOWEST
Gtk2::GTK_PATH_PRIO_GTK
Gtk2::GTK_PATH_PRIO_APPLICATION
Gtk2::GTK_PATH_PRIO_THEME
Gtk2::GTK_PATH_PRIO_RC
Gtk2::GTK_PATH_PRIO_HIGHEST

LOWEST, which is 0, and HIGHEST, which is 15, are the limits of the allowed priorities. The standard values are from the Gtk2::PathPriorityType enum, but the parameter here is an integer, not an enum string, so you can give a value for instance a little above or below the pre-defined levels.

Glib::Long
Glib::Double
Glib::String
an enum type, ie. subtype of Glib::Enum
Glib::Flags, or a flags subtype

For example,

    $binding_set->entry_add_signal
	(Gtk2->keyval_from_name('Return'),
	 [ 'control-mask' ],   # modifiers
	 'some-signal-name',
	 'Glib::Double', 1.5,
	 'Glib::String,	 'hello');

A parameter holds one of the three types Long, Double or String. When invoked they're coerced to the parameter types expected by the target object or widget. Use Glib::Long for any integer argument, including chars and unichars by ordinal value. Use Glib::Double for both single and double precision floats.

Flags and enums are held as Longs in the BindingSet. You can pass an enum type and string and entry_with_signal will lookup and store accordingly. For example

    $binding_set->entry_add_signal
	(Gtk2->keyval_from_name('Escape), [],
	 'set-direction',
	 'Gtk2::Orientation', 'vertical');

Likewise flags from an arrayref,

    $binding_set->entry_add_signal
	(Gtk2->keyval_from_name('d'), [],
	 'initiate-drag',
	 'Gtk2::Gdk::DragAction', ['move,'ask']);

If you've got a Glib::Flags object, rather than just an arrayref, then you can just give Glib::Flags as the type and the value is taken from the object. For example,

    my $flags = Gtk2::DebugFlag->new (['tree', 'updates']);
    $binding_set->entry_add_signal
	(Gtk2->keyval_from_name('x'), ['control-mask'],
	 'change-debug',
	 'Glib::Flags', $flags);

Further, although activate and binding sets are both expressed in terms of keyvals, internally the lookup is by keycode. If a keyval cannot be generated by at least one keycode/modifier combination (see Gtk2::Gdk::Keymap) then it cannot be activated. In particular this means keyvals like Pointer_Button1 which are not actual keys cannot be dispatched by activate (returning false for no binding activated).