Spec-Zone.ru › GTK 3.20

Связывания

Связывания — Ключевые связывания для отдельных виджетов

Функции

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+ высокую конфигурируемость ключевых связей, которая не требует изменений на стороне приложения или инструментария.

Установка ключевого связывания

Связывание в файле 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

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

Возвращает

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

объект GObject (обычно виджет)

event

a GdkEventKey

Возвращает

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

количество аргументов для 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;

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

[массив длина=n_args]

struct GtkBindingArg

struct GtkBindingArg {
  GType      arg_type;
  union {
    glong    long_data;
    gdouble  double_data;
    gchar   *string_data;
  } d;
};

В 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.20/gtk3-Bindings.html

Spec-Zone.ru

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