краткое описание#include <gtk/gtk.h> gtkbindingset; gtkbindingentry; gtkbindingsignal; gtkbindingarg; gtkbindingset* gtk_binding_set_new (const gchar *set_name); gtkbindingset* gtk_binding_set_by_class (gpointer object_class); gtkbindingset* gtk_binding_set_find (const gchar *set_name); gboolean gtk_bindings_activate (gtkobject *object, guint keyval, gdkmodifiertype modifiers); gboolean gtk_bindings_activate_event (gtkobject *object, gdkeventkey *event); gboolean gtk_binding_set_activate (gtkbindingset *binding_set, guint keyval, gdkmodifiertype modifiers, gtkobject *object); void gtk_binding_entry_add_signal (gtkbindingset *binding_set, guint keyval, gdkmodifiertype modifiers, const gchar *signal_name, guint n_args, ...); void gtk_binding_entry_skip (gtkbindingset *binding_set, guint keyval, gdkmodifiertype modifiers); void gtk_binding_entry_remove (gtkbindingset *binding_set, guint keyval, gdkmodifiertype modifiers); void gtk_binding_set_add_path (gtkbindingset *binding_set, gtkpathtype path_type, const gchar *path_pattern, gtkpathprioritytype priority); описаниеgtkbinding обеспечивает механизм для конфигурации привязок клавиш gtk+ через rc файлы. это облегчает настройку привязок клавиш для программистов и пользователей, а также обеспечивает пользователей gtk+ или администраторов большей возможностью конфигурировать привязки клавиш не требуя изменений со стороны приложения или инструментария. установка привязок клавиш
ресурсные файлы привязок содержат описания 'привязок' ('binding') и соответсвующие спецификации для
применения привязок к специфическим типам виджетов. детально механизм соответсвий описан в
pathnames and patterns.
внутри описания привязок, клавишные комбинации связаны со специальными эмиссиями сигнала
на целевом виджете. комбинации клавиш являются строками содержащими опционально название
gdkmodifiertype
и имена клавиш например которые определены в
binding "movecursor3" { bind "<control>right" { "move-cursor" (visual-positions, 3, 0) } bind "<control>left" { "move-cursor" (visual-positions, -3, 0) } } class "gtkentry" binding "movecursor3"
отмена существующих привязок клавишgtk+ уже определяет множество полезных привязок для виджетов. поскольку выборочные привязки установленные в rc файлах имеют приоритет перед привязками по умолчанию установленными в gtk+, перезапись существующих привязок также демонстрируется в установка привязок клавиш. этот же механизм однако, не может использоваться для отмены "unbind" существующих привязок. binding "movecursor3" { bind "<control>right" { } bind "<control>left" { } } class "gtkentry" binding "movecursor3" выше приведённый пример не имеет желаемого эфекта игнорирования нажатия "<control>right" and "<control>left" клавиш. вместо этого, просто удаляется существующие любые привязки "movecursor3", поэтому когда нажимаются клавиши "<control>right" или "<control>left", никаких привязок для этих клавиш не обнаруживается в установках "movecursor3". gtk+ таким образом продолжит поиск и в конечном счете обнаружит привязки по умолчанию для ввода которые осуществляют перемещения по словам. для сохранения активными привязок по умолчанию gtk+, может использоваться ключевое слово "unbind": binding "movecursor3" { unbind "<control>right" unbind "<control>left" } class "gtkentry" binding "movecursor3" теперь, gtk+ не будет искать соответсвие нажатию "<control>right" and "<control>left" в привязках по умолчанию так как ("unbind") инструктирует прервать поиск, поэтому нажатие клавиш не обрабатывается этим виджетом. дальнейшая обработка нажатия клавиш, например родительским виджетом, всё ещё возможна. деталиgtkbindingsettypedef struct { gchar *set_name; gint priority; gslist *widget_path_pspecs; gslist *widget_class_pspecs; gslist *class_branch_pspecs; gtkbindingentry *entries; gtkbindingentry *current; guint parsed : 1; /* from rc content */ } gtkbindingset; установка привязок сопровождается списком активируемых привязок клавиш. единственая установленная привязка может соответствовать множеству типов виджетов. подобно стилям, виджеты могут быть отображены путём имени виджета, путём класса виджета или типами класса виджета. когда активируется установленная привязка, в целевом виджете издаётся сигнал действия для выполнения фактической активации.
gtkbindingentrytypedef struct { /* клавишная часть */ guint keyval; gdkmodifiertype modifiers; gtkbindingset *binding_set; guint destroyed : 1; guint in_emission : 1; guint marks_unbound : 1; gtkbindingentry *set_next; gtkbindingentry *hash_next; gtkbindingsignal *signals; } gtkbindingentry; каждый элемент списка наборов привязок представляется с помощью gtkbindingentry.
gtkbindingsignaltypedef struct { gtkbindingsignal *next; gchar *signal_name; guint n_args; gtkbindingarg *args; } gtkbindingsignal; gtkbindingsignal хранит необходимую информацию для активации виджета в ответ на нажатие клавиши через эмиссию сигнала.
gtkbindingargtypedef struct { gtype arg_type; union { glong long_data; gdouble double_data; gchar *string_data; } d; } gtkbindingarg; gtkbindingarg содержит данные связанные с аргументами для привязки клавиш эмиссии сигнала которые храняться в gtkbindingsignal.
gtk_binding_set_new ()gtkbindingset* gtk_binding_set_new (const gchar *set_name); gtk+ поддерживает общий список наборов привязок. каждый набор привязок имеет уникальное имя которое необходимо определить после создания.
gtk_binding_set_by_class ()gtkbindingset* gtk_binding_set_by_class (gpointer object_class); эта функция возвращает набор привязок названный в честь имени типа помещённого в структуру класса. новые наборы привязок создаются вызовом этой функции.
gtk_binding_set_find ()gtkbindingset* gtk_binding_set_find (const gchar *set_name);
находит набор привязок по общему уникальному имени. параметр
gtk_bindings_activate ()gboolean gtk_bindings_activate (gtkobject *object, guint keyval, gdkmodifiertype modifiers);
находит привязку клавиш соответствующую
gtk_bindings_activate_event ()gboolean gtk_bindings_activate_event (gtkobject *object, gdkeventkey *event);
ищет привязку клавиш для объекта
gtk_binding_set_activate ()gboolean gtk_binding_set_activate (gtkbindingset *binding_set, guint keyval, gdkmodifiertype modifiers, gtkobject *object);
ищет привязку клавиш соответствующую
gtk_binding_entry_add_signal ()void gtk_binding_entry_add_signal (gtkbindingset *binding_set, guint keyval, gdkmodifiertype modifiers, const gchar *signal_name, guint n_args, ...);
переписывает или устанавливает новую привязку клавиш для
gtk_binding_entry_skip ()void gtk_binding_entry_skip (gtkbindingset *binding_set, guint keyval, gdkmodifiertype modifiers);
начиная с версии 2.12 устанавливает привязку в @binding_set который заставляет прерывать найденые клавиши, препятствуя активации привязок с более низким приоритетом. gtk_binding_entry_remove ()void gtk_binding_entry_remove (gtkbindingset *binding_set, guint keyval, gdkmodifiertype modifiers);
удаляет предварительно установленные привязки с помощью
gtk_binding_set_add_path ()void gtk_binding_set_add_path (gtkbindingset *binding_set, gtkpathtype path_type, const gchar *path_pattern, gtkpathprioritytype priority); эта функция используется внутренне механизмом анализа gtkrc для связи соответствующих шаблонов с gtkbindingset структурами.
|