Spec-Zone.ru › GTK 3.22

Связывания

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

Функции

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

Для работы связываний в реализации пользовательского виджета свойства виджета “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

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

Возвращает

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

событие 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

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

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

[массив length=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.22/gtk3-Bindings.html

Spec-Zone.ru

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