| 
 | |
|  | 
|  |  |  | GTK+ Reference Manual |  | 
|---|---|---|---|---|
#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
и имена клавиш например которые определены в 
<gdk/gdkkeysyms.h> или возвращаются из 
gdk_keyval_name(), они должны подходить для анализа с помощью 
gtk_accelerator_parse().
Спецификации эмисcий сигнала содержат строки идентифицирующие имя сигнала и список
определённых параметров сигнала в круглых скобках.
Например для привязки управления и клавиш левой или правой стрелки к курсору виджета
GtkEntry c сигналом
GtkEntry::move-cursor перемещения курсора, чтобы перемещение происходило в 3 символьных шага, может использоваться следующие привязки:
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") инструктирует прервать поиск, поэтому нажатие клавиш не обрабатывается этим виджетом. Дальнейшая обработка нажатия клавиш, например родительским виджетом, всё ещё возможна.
typedef 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;
Установка привязок сопровождается списком активируемых привязок клавиш. Единственая установленная привязка может соответствовать множеству типов виджетов. Подобно стилям, виджеты могут быть отображены путём имени виджета, путём класса виджета или типами класса виджета. Когда активируется установленная привязка, в целевом виджете издаётся сигнал действия для выполнения фактической активации.
| gchar * set_name; | уникальное имя набора привязок | 
| gint priority; | не используется | 
| GSList * widget_path_pspecs; | путь соответствующего виджета к которому применяется набор привязок | 
| GSList * widget_class_pspecs; | путь класса соответствующего виджета к которому применяется набор привязок | 
| GSList * class_branch_pspecs; | класс соответствующего виджета к которому применяется набор привязок | 
| GtkBindingEntry * entries; | привязка клавиш ввода в данном наборе привязок | 
| GtkBindingEntry * current; | детали реализации | 
| guint parsed: 1; | основан ли набор привязок на RC файле и изменяется ли при изменении темы | 
typedef 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.
| 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; | сигнал действия этого ввода | 
typedef struct {
  GtkBindingSignal	*next;
  gchar 		*signal_name;
  guint			 n_args;
  GtkBindingArg		*args;
} GtkBindingSignal;
GtkBindingSignal хранит необходимую информацию для активации виджета в ответ на нажатие клавиши через эмиссию сигнала.
| GtkBindingSignal * next; | детали реализации | 
| gchar * signal_name; | издаваемый сигнал действия | 
| guint n_args; | количество аргументов определённых для сигнала | 
| GtkBindingArg * args; | аргументы определённые для сигнала | 
typedef struct {
  GType		 arg_type;
  union {
    glong	 long_data;
    gdouble	 double_data;
    gchar	*string_data;
  } d;
} GtkBindingArg;
GtkBindingArg содержит данные связанные с аргументами для привязки клавиш эмиссии сигнала которые храняться в GtkBindingSignal.
| GType arg_type; | детали реализации | 
GtkBindingSet* gtk_binding_set_new (const gchar *set_name);
Gtk+ поддерживает общий список наборов привязок. Каждый набор привязок имеет уникальное имя которое необходимо определить после создания.
| set_name: | уникальное имя набора привязок | 
| Возвращает : | новый набор привязок | 
GtkBindingSet* gtk_binding_set_by_class (gpointer object_class);
Эта функция возвращает набор привязок названный в честь имени типа помещённого в структуру класса. Новые наборы привязок создаются вызовом этой функции.
| object_class: | допустимый GtkObject класс | 
| Возвращает : | набор привязок соответствующий object_class | 
GtkBindingSet* gtk_binding_set_find (const gchar *set_name);
Находит набор привязок по общему уникальному имени. Параметр 
set_name может быть либо именем используемым для 
gtk_binding_set_new(), либо именем типа класса используемого в 
gtk_binding_set_by_class().
| set_name: | уникальное имя набора привязок | 
| Возвращает : | NULLили определённый набор привязок | 
gboolean gtk_bindings_activate (GtkObject *object, guint keyval, GdkModifierType modifiers);
Находит привязку клавиш соответствующую keyval и modifiers и активизирующую
object.
| object: | объект для активации при обнаружении привязки | 
| keyval: | значение клавиши привязки | 
| modifiers: | клавиша модификатор привязки | 
| Возвращает : | TRUEесли привязка найдена и активизирована | 
gboolean gtk_bindings_activate_event (GtkObject *object, GdkEventKey *event);
Ищет привязку клавиш для объекта object находя любое соответсвие event, и если находит активирует его.
| object: | GtkObject (в основном должен быть виджетом) | 
| event: | GdkEventKey | 
| Возвращает : | TRUEесли соответствующая привязка клавиш найдена | 
gboolean gtk_binding_set_activate (GtkBindingSet *binding_set, guint keyval, GdkModifierType modifiers, GtkObject *object);
Ищет привязку клавиш соответствующую keyval и modifiers внутри 
binding_set 
и активирует привязку на object.
| binding_set: | binding_setдля активации | 
| keyval: | значение клавиши привязки | 
| modifiers: | клавиша модификатор привязки | 
| object: | объект для активации при обнаружении привязки | 
| Возвращает : | TRUEесли привязка была найдена и активирована | 
void gtk_binding_entry_add_signal (GtkBindingSet *binding_set, guint keyval, GdkModifierType modifiers, const gchar *signal_name, guint n_args, ...);
Переписывает или устанавливает новую привязку клавиш для keyval с modifiers в
binding_set. Когда привязка активирована, signal_name издаётся на целевом виджете, 
n_args Varargs используются как аргументы.
| binding_set: | binding_setдля устанавливаемого ввода | 
| keyval: | значение клавиши или привязка для установки | 
| modifiers: | клавиша модификатор или привязка для установки | 
| signal_name: | сигнал для выполнения активации | 
| n_args: | количество аргументов для signal_name@:            аргументы дляsignal_name | 
| ...: | 
void gtk_binding_entry_skip (GtkBindingSet *binding_set, guint keyval, GdkModifierType modifiers);
| binding_set: | binding_setдля пропуска ввода | 
| keyval: | значение клавиши привязки для пропуска | 
| modifiers: | клавиша модификатор или привязка для пропуска | 
Начиная с версии 2.12 Устанавливает привязку в @binding_set который заставляет прерывать найденые клавиши, препятствуя активации привязок с более низким приоритетом.
void gtk_binding_entry_remove (GtkBindingSet *binding_set, guint keyval, GdkModifierType modifiers);
Удаляет предварительно установленные привязки с помощью
gtk_binding_entry_add_signal() в binding_set.
| binding_set: | binding_setдля удаления ввода | 
| keyval: | значение клавиши привязки для удаления | 
| modifiers: | клавиша модификатор привязки для удаления | 
void gtk_binding_set_add_path (GtkBindingSet *binding_set, GtkPathType path_type, const gchar *path_pattern, GtkPathPriorityType priority);
Эта функция используется внутренне механизмом анализа GtkRC для связи соответствующих шаблонов с GtkBindingSet структурами.
| binding_set: | набор привязок для добавления в путь | 
| path_type: | тип пути приеняемого шаблона | 
| path_pattern: | фактический шаблон соответствия | 
| priority: | приоритет привязки | 
| Закладки на сайте Проследить за страницей | Created 1996-2025 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |