Связывания
Связывания — Ключевые связывания для отдельных виджетов
Функции
Типы и значения
| struct | GtkBindingSet |
| struct | GtkBindingEntry |
| struct | GtkBindingSignal |
| struct | GtkBindingArg |
Включения
#include <gtk/gtk.h>
Описание
GtkBindingSet предоставляет механизм для настройки ключевых связей GTK+ через файлы CSS. Это упрощает настройку ключевых связей для разработчиков приложений, а также для пользователей, и предоставляет пользователям или администраторам GTK+ высокую настраиваемость ключевых связей, которая не требует изменений на стороне приложения или инструментария.
Для работы связываний в реализации пользовательского виджета свойства виджета “can-focus” и “has-focus” должны быть оба истинными. Например, вызвав gtk_widget_set_can_focus() в функции инициализации виджета; и вызвав gtk_widget_grab_focus(), когда виджет нажат.
Установка ключевого связывания
Связывание в файле 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» в наборе связей «MoveCursor3» не будет найдено ни одного связывания. GTK+ продолжит поиск сопоставления по ключевым связываниям и в конечном итоге найдёт стандартные связывания GTK+ для полей, реализующих перемещение по словам. Чтобы предотвратить активацию GTK+ его стандартных связываний, можно использовать ключевое слово «unbind», как показано ниже:
Теперь GTK+ найдёт соответствие при поиске нажатий клавиш «<Control>Right» и «<Control>Left» до того, как прибегнет к стандартным связываниям, и соответствие указывает ему прервать («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 | набор 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 | событие GdkEventKey |
Возвращает
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 | набор 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 в качестве аргументов.
Каждый аргумент сигнала должен быть передан как пара аргументов: тип GType аргумента, за которым следует значение аргумента (которое должно быть заданного типа). Всего должно быть n_args пар.
Добавление комбинации клавиш
Параметры
binding_set | набор 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 * | аргументы, указанные для сигнала. | [массив length=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.22/gtk3-Bindings.html