Связывания
Связывания — Связывания клавиш для отдельных виджетов
Функции
| void | gtk_binding_entry_add_signall () |
| GtkBindingSet * | gtk_binding_set_new () |
| GtkBindingSet * | gtk_binding_set_by_class () |
| GtkBindingSet * | gtk_binding_set_find () |
| gboolean | gtk_bindings_activate () |
| gboolean | gtk_bindings_activate_event () |
| gboolean | gtk_binding_set_activate () |
| void | gtk_binding_entry_add_signal () |
| GTokenType | gtk_binding_entry_add_signal_from_string () |
| void | gtk_binding_entry_skip () |
| void | gtk_binding_entry_remove () |
| void | gtk_binding_set_add_path () |
Типы и значения
| struct | GtkBindingSet |
| struct | GtkBindingEntry |
| struct | GtkBindingSignal |
| struct | GtkBindingArg |
Файлы заголовков
#include <gtk/gtk.h>
Описание
GtkBindingSet предоставляет механизм для настройки ключевых связей GTK+ через файлы CSS. Это упрощает настройку ключевых связей для разработчиков приложений, а также для пользователей, и предоставляет пользователям или администраторам GTK+ высокую настраиваемость ключевых связей, не требующую изменений в приложении или инструменте.
Для работы связей в реализации пользовательского виджета свойства виджета “можно сфокусироваться” и “имеет фокус” должны быть оба истинными. Например, вызвав gtk_widget_set_can_focus() в функции инициализации виджета; и вызвав gtk_widget_grab_focus(), когда виджет нажат.
Установка ключевого связывания
Связывание в файле CSS состоит из определения «связывающего набора» и оператора сопоставления для применения набора связей к определенным типам виджетов. Подробности о механизме сопоставления описаны в разделе «Селекторы» в документации GtkCssProvider. Внутри определения набора связей сочетания клавиш связываются с одним или несколькими определенными сигналами об отправке на целевом виджете. Сочетания клавиш — это строки, состоящие из необязательного имени GdkModifierType и имен клавиш, таких как те, что определены в gdk/gdkkeysyms.h или возвращаемые из gdk_keyval_name(), они должны быть распарсируемыми для gtk_accelerator_parse(). Спецификации сигналов об отправке состоят из строки, идентифицирующей имя сигнала, и списка аргументов специфичных для сигнала в скобках.
Например, для связывания клавиш Ctrl и левой или правой клавиши курсора виджета GtkEntry с сигналом “move-cursor” (чтобы перемещение происходило шагами в 3 символа), можно использовать следующее связывание:
Отключение существующих ключевых связей
GTK+ уже определяет ряд полезных связей для предоставляемых им виджетов. Поскольку пользовательские связывания, настроенные в файлах CSS, имеют приоритет над стандартными связываниями, поставляемыми с GTK+, переопределение существующих связей, как показано в примере установки связывания, работает как ожидается. Однако тот же механизм не может использоваться для «отключения» существующих связей.
Приведенный выше пример не приведет к желаемому эффекту игнорирования GTK+ нажатий клавиш «<Ctrl>Вправо» и «<Ctrl>Влево». Вместо этого он просто приводит к удалению любых существующих связей из набора связей «MoveCursor3», поэтому при нажатии «<Ctrl>Вправо» или «<Ctrl>Влево» в наборе связей «MoveCursor3» не найдено ни одного связывания. Таким образом, GTK+ продолжит поиск соответствующих ключевых связей и в конечном итоге найдет стандартные связывания GTK+ для полей, которые реализуют перемещение слов. Чтобы не активировать стандартные связывания GTK+, можно использовать ключевое слово «отключить» следующим образом:
Теперь GTK+ найдет соответствие при поиске нажатий клавиш «<Ctrl>Вправо» и «<Ctrl>Влево» до того, как он обратится к стандартным связываниям GTK+, и совпадение указывает ему прервать («отключить») поиск, поэтому нажатия клавиш не будут потребляться этим виджетом. Как обычно, дальнейшая обработка нажатий клавиш, например, виджетом-родителем поля, теперь возможна.
Функции
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 | уникальное имя набора привязок |
Возвращает
NULL или указанный набор привязок.
[nullable][transfer none]
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 | a GObject (обычно должен быть виджетом) | |
event |
Возвращает
TRUE если соответствующая привязка клавиш была найдена
С: 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 в качестве аргументов.
Каждый аргумент сигнала должен быть передан как пара varargs: GType аргумента, за которым следует значение аргумента (которое должно быть заданного типа). Должно быть n_args пар в общей сложности.
Добавление привязки клавиш
Параметры
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 * | аргументы, указанные для сигнала. | [array length=n_args] |
struct GtkBindingArg
struct GtkBindingArg {
GType arg_type;
union {
glong long_data;
gdouble double_data;
gchar *string_data;
} d;
};
A 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.24/gtk3-Bindings.html