Связывания
Связывания — Ключевые связывания для отдельных виджетов
Функции
Типы и значения
| struct | GtkBindingSet |
| struct | GtkBindingEntry |
| struct | GtkBindingSignal |
| struct | GtkBindingArg |
Включения
#include <gtk/gtk.h>
Описание
GtkBindingSet предоставляет механизм для настройки ключевых связей GTK+ через файлы CSS. Это упрощает корректировку ключевых связей для разработчиков приложений, а также для пользователей, и предоставляет пользователям или администраторам GTK+ высокую конфигурируемость ключевых связей, которая не требует изменений на стороне приложения или инструментария.
Установка ключевого связывания
Связывание в файле CSS состоит из определения «binding-set» и оператора соответствия для применения набора связей к определённым типам виджетов. Подробности о механизме соответствия описаны в разделе «Селекторы» в документации GtkCssProvider. Внутри определения набора связей сочетания клавиш связываются с одним или несколькими конкретными сигналами об излучениях на целевом виджете. Сочетания клавиш — это строки, состоящие из необязательного имени GdkModifierType и имён клавиш, таких как те, что определены в gdk/gdkkeysyms.h или возвращаемые из gdk_keyval_name(), они должны быть распознаваемы gtk_accelerator_parse(). Спецификации излучения сигналов состоят из строки, идентифицирующей имя сигнала, и списка аргументов, специфичных для сигнала, в скобках.
Например, для связывания клавиш Control и левой или правой клавиши курсора виджета GtkEntry с сигналом “move-cursor” (чтобы перемещение происходило шагами в 3 символа), можно использовать следующее связывание:
Отмена существующих ключевых связываний
GTK+ уже определяет ряд полезных связываний для предоставляемых им виджетов. Поскольку настраиваемые связывания, настроенные в файлах CSS, имеют приоритет над стандартными связываниями, поставляемыми с GTK+, переопределение существующих связываний, как показано в разделе «Установка ключевого связывания», работает как ожидается. Однако тем же механизмом нельзя «отменить» существующие связывания.
Приведённый выше пример не даст желаемого эффекта, то есть не заставит GTK+ игнорировать нажатия клавиш «<Control>Right» и «<Control>Left». Вместо этого он просто удаляет все существующие связывания из набора связей «MoveCursor3», поэтому при нажатии «<Control>Right» или «<Control>Left» GTK+ не найдёт для них связывание в наборе «MoveCursor3». Таким образом, GTK+ продолжит поиск соответствующих ключевых связываний и в конечном итоге найдёт стандартные связывания GTK+ для элементов, реализующих перемещение по словам. Чтобы предотвратить активацию GTK+ своих стандартных связываний, можно использовать ключевое слово «unbind» следующим образом:
Теперь GTK+ найдёт соответствие при поиске нажатий клавиш «<Control>Right» и «<Control>Left» до того, как обратится к стандартным связываниям GTK+, и соответствие указывает ему прервать («unbind») поиск, так что эти нажатия клавиш не будут обработаны этим виджетом. Как обычно, дальнейшая обработка нажатий клавиш, например, родительским виджетом элемента, теперь возможна.
Функции
gtk_binding_entry_add_signall ()
void gtk_binding_entry_add_signall (GtkBindingSet *binding_set,guint keyval,GdkModifierType modifiers,const gchar *signal_name,GSList *binding_args);
Переопределить или установить новую комбинацию клавиш для keyval с modifiers на binding_set .
Параметры
binding_set | a GtkBindingSet для добавления сигнала | |
keyval | значение клавиши | |
modifiers | модификатор клавиши | |
signal_name | имя сигнала для привязки | |
binding_args | список GtkBindingArg аргументов сигнала. | [transfer none][element-type GtkBindingArg] |
gtk_binding_set_new ()
GtkBindingSet *
gtk_binding_set_new (const gchar *set_name); GTK+ поддерживает глобальный список наборов привязок. Каждый набор привязок имеет уникальное имя, которое необходимо указать при создании.
[skip]
Параметры
set_name | уникальное имя этого набора привязок |
Возвращает
новый набор привязок.
[transfer none]
gtk_binding_set_by_class ()
GtkBindingSet *
gtk_binding_set_by_class (gpointer object_class); Эта функция возвращает набор привязок, названный по имени типа переданной структуры класса. Новые наборы привязок создаются по требованию этой функцией.
[skip]
Параметры
object_class | действительный класс GObject |
Возвращает
набор привязок, соответствующий object_class .
[transfer none]
gtk_binding_set_find ()
GtkBindingSet *
gtk_binding_set_find (const gchar *set_name); Найти набор привязок по его глобальному уникальному имени.
Имя set_name может быть именем, используемым для gtk_binding_set_new(), или именем типа класса, используемого в gtk_binding_set_by_class().
Параметры
set_name | уникальное имя набора привязок |
gtk_bindings_activate ()
gboolean gtk_bindings_activate (GObject *object,guint keyval,GdkModifierType modifiers);
Найти комбинацию клавиш, соответствующую keyval и modifiers, и активировать привязку на object .
Параметры
object | объект, который активировать, когда найдена привязка | |
keyval | значение клавиши привязки | |
modifiers | модификатор клавиши привязки |
Возвращает
TRUE если привязка найдена и активирована
gtk_bindings_activate_event ()
gboolean gtk_bindings_activate_event (GObject *object,GdkEventKey *event);
Ищет комбинации клавиш для object, чтобы найти совпадение с event, и если она найдена, активирует её.
Параметры
object | объект GObject (обычно виджет) | |
event |
Возвращает
TRUE если соответствующая комбинация клавиш найдена
Since: 2.4
gtk_binding_set_activate ()
gboolean gtk_binding_set_activate (GtkBindingSet *binding_set,guint keyval,GdkModifierType modifiers,GObject *object);
Найти комбинацию клавиш, соответствующую keyval и modifiers в binding_set и активировать привязку на object .
Параметры
binding_set | a GtkBindingSet набор для активации | |
keyval | значение клавиши привязки | |
modifiers | модификатор клавиши привязки | |
object | объект для активации, когда найдена привязка |
Возвращает
TRUE если привязка найдена и активирована
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,...);
Переопределить или установить новую комбинацию клавиш для keyval с modifiers на binding_set . При активации привязки, signal_name будет выпущен на целевом виджете с n_args Varargs в качестве аргументов.
Параметры
binding_set | a GtkBindingSet для установки записи | |
keyval | значение клавиши устанавливаемой привязки | |
modifiers | модификатор клавиши устанавливаемой привязки | |
signal_name | сигнал, который выполняется при активации | |
n_args | количество аргументов для | |
... | аргументы для |
gtk_binding_entry_add_signal_from_string ()
GTokenType gtk_binding_entry_add_signal_from_string (GtkBindingSet *binding_set,const gchar *signal_desc);
Разбирает описание сигнала из signal_desc и включает его в binding_set.
Описания сигналов могут либо привязывать комбинацию клавиш к одному или нескольким сигналам:
Или они также могут отвязать комбинацию клавиш:
@binding-set MoveCursor3
{
bind "<Control>Right" { "move-cursor" (visual-positions, 3, 0) };
bind "<Control>Left" { "move-cursor" (visual-positions, -3, 0) };
}
entry
{
-gtk-key-bindings: MoveCursor3;
}Комбинации клавиш должны быть в формате, который можно разобрать с помощью gtk_accelerator_parse().
Параметры
binding_set | ||
signal_desc | описание сигнала |
Возвращаемое значение
G_TOKEN_NONE, если сигнал был успешно разобран и добавлен, в противном случае ожидаемый токен
С: 3.0
gtk_binding_entry_skip ()
void gtk_binding_entry_skip (GtkBindingSet *binding_set,guint keyval,GdkModifierType modifiers);
Устанавливает привязку к binding_set, которая приводит к прерыванию поиска клавиш, чтобы предотвратить активацию привязок из наборов с более низким приоритетом.
Параметры
binding_set | a GtkBindingSet для пропуска записи | |
keyval | значение клавиши пропускаемой привязки | |
modifiers | модификатор клавиши пропускаемой привязки |
С: 2.12
gtk_binding_entry_remove ()
void gtk_binding_entry_remove (GtkBindingSet *binding_set,guint keyval,GdkModifierType modifiers);
Удаляет привязку, ранее установленную с помощью gtk_binding_entry_add_signal() на binding_set.
Параметры
binding_set | a GtkBindingSet для удаления записи | |
keyval | значение клавиши удаляемой привязки | |
modifiers | модификатор клавиши удаляемой привязки |
gtk_binding_set_add_path ()
void gtk_binding_set_add_path (GtkBindingSet *binding_set,GtkPathType path_type,const gchar *path_pattern,GtkPathPriorityType priority);
gtk_binding_set_add_path устарел с версии 3.0 и не должен использоваться в новом коде.
Эта функция использовалась внутренне механизмом парсинга GtkRC для назначения шаблонов соответствия структурам GtkBindingSet.
В GTK+ 3 эти шаблоны соответствия не используются.
Параметры
binding_set | a GtkBindingSet для добавления пути | |
path_type | тип пути, к которому относится шаблон | |
path_pattern | сам шаблон соответствия | |
priority | приоритет привязки |
Типы и значения
struct GtkBindingSet
struct 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;
};
Набор привязок хранит список активируемых привязок к клавишам. Один набор привязок может соответствовать нескольким типам виджетов. Подобно контекстам стилей, он может соответствовать любой информации, содержащейся в GtkWidgetPath виджета. При активации привязки в наборе генерируется сигнал действия на целевом виджете для выполнения фактической активации.
Члены
gchar * | уникальное имя этого набора привязок | |
gint | не используется | |
GSList * | не используется | |
GSList * | не используется | |
GSList * | не используется | |
GtkBindingEntry * | записи привязок к клавишам в этом наборе привязок | |
GtkBindingEntry * | детали реализации | |
guint | указывает, происходит ли этот набор привязок из файла CSS и сбрасывается ли он при изменении темы |
struct GtkBindingEntry
struct GtkBindingEntry {
/* key portion */
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.
Члены
guint | значение клавиши для сопоставления | |
GdkModifierType | модификаторы клавиши для сопоставления | |
GtkBindingSet * | набор привязок, к которому принадлежит эта запись | |
guint | детали реализации | |
guint | детали реализации | |
guint | детали реализации | |
GtkBindingEntry * | связанный список записей, поддерживаемый набором привязок | |
GtkBindingEntry * | детали реализации | |
GtkBindingSignal * | сигналы действий этой записи |
struct GtkBindingSignal
struct GtkBindingSignal {
GtkBindingSignal *next;
gchar *signal_name;
guint n_args;
GtkBindingArg *args;
};
GtkBindingSignal хранит необходимую информацию для активации виджета в ответ на нажатие клавиши с помощью генерации сигнала.
Члены
GtkBindingSignal * | детали реализации | |
gchar * | сигнал действия, который необходимо сгенерировать | |
guint | количество аргументов, указанных для сигнала | |
GtkBindingArg * | аргументы, указанные для сигнала. | [массив длина=n_args] |
struct GtkBindingArg
struct GtkBindingArg {
GType arg_type;
union {
glong long_data;
gdouble double_data;
gchar *string_data;
} d;
};
В GtkBindingArg хранятся данные, связанные с аргументом для генерации сигнала привязки к клавише, как хранится в GtkBindingSignal.
Члены
GType | детали реализации |
См. также
Клавишные комбинации, Метки, GtkCssProvider
© 2005–2020 The GNOME Project
Licensed under the GNU Lesser General Public License version 2.1 or later.
https://developer.gnome.org/gtk3/3.20/gtk3-Bindings.html