Spec-Zone.ru › GTK 3.24

Связывания

Связывания — Связывания клавиш для отдельных виджетов

Функции

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

a 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

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

количество аргументов для signal_name

...

аргументы для signal_name

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

a GtkBindingSet

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 *set_name;

уникальное имя этого набора привязок

gint priority;

не используется

GSList *widget_path_pspecs;

не используется

GSList *widget_class_pspecs;

не используется

GSList *class_branch_pspecs;

не используется

GtkBindingEntry *entries;

элементы привязки в этом наборе привязок

GtkBindingEntry *current;

деталь реализации

guint parsed : 1;

указывает, происходит ли этот набор привязок из файла 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 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;

сигналы действий этого элемента

struct GtkBindingSignal

struct GtkBindingSignal {
  GtkBindingSignal *next;
  gchar            *signal_name;
  guint             n_args;
  GtkBindingArg    *args;
};

GtkBindingSignal хранит необходимую информацию для активации виджета в ответ на нажатие клавиши с помощью отправки сигнала.

Члены

GtkBindingSignal *next;

деталь реализации

gchar *signal_name;

сигнал действия, который нужно отправить

guint n_args;

количество аргументов, указанных для сигнала

GtkBindingArg *args;

аргументы, указанные для сигнала.

[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 arg_type;

деталь реализации

См. также

Комбинации клавиш, Метки, 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API