Spec-Zone.ru › GTK 3.22

Карты акселераторов

Карты акселераторов — загружаемые спецификации клавиатурных акселераторов

Функции

void (*GtkAccelMapForeach) ()
void gtk_accel_map_add_entry ()
gboolean gtk_accel_map_lookup_entry ()
gboolean gtk_accel_map_change_entry ()
void gtk_accel_map_load ()
void gtk_accel_map_save ()
void gtk_accel_map_foreach ()
void gtk_accel_map_load_fd ()
void gtk_accel_map_save_fd ()
void gtk_accel_map_load_scanner ()
void gtk_accel_map_add_filter ()
void gtk_accel_map_foreach_unfiltered ()
GtkAccelMap * gtk_accel_map_get ()
void gtk_accel_map_lock_path ()
void gtk_accel_map_unlock_path ()

Сигналы

void changed Содержит детали

Типы и значения

GtkAccelMap

Иерархия объектов

    GObject
    ╰── GtkAccelMap

Файлы заголовочных файлов

#include <gtk/gtk.h>

Описание

Карты акселераторов используются для определения конфигурируемых в реальном времени акселераторов. Функции для их управления обычно используются механизмами высшего уровня, такими как GtkUIManager, и поэтому считаются «низкоуровневыми». Вы захотите использовать их, если вручную создаёте меню, у которых должны быть настраиваемые пользователем акселераторы.

Акселератор однозначно определяется:

  • путь акселератора

  • клавиша акселератора

  • модификаторы акселератора

Путь акселератора должен состоять из «<WINDOWTYPE>/Category1/Category2/.../Action», где WINDOWTYPE должен быть уникальным идентификатором, специфичным для приложения, соответствующим типу окна, в котором используется акселератор, например «Gimp-Image», «Abiword-Document» или «Gnumeric-Settings». Часть «Category1/.../Action» наиболее уместно выбирается по действию, которое выполняет акселератор, т.е. для акселераторов на элементах меню выбирайте путь меню элемента, например «Файл/Сохранить как», «Изображение/Вид/Масштаб» или «Правка/Выделить все». Таким образом, полный допустимый путь акселератора может выглядеть так: «<Gimp-Toolbox>/Файл/Диалоги/Параметры инструмента…».

Все акселераторы хранятся внутри одной глобальной карты GtkAccelMap, которая может быть получена с помощью gtk_accel_map_get(). Дополнительные сведения см. в разделе отслеживание изменений.

Работа с акселераторами

Новые акселераторы можно добавить с помощью gtk_accel_map_add_entry(). Для поиска конкретного акселератора используйте gtk_accel_map_lookup_entry(). Изменения существующих акселераторов следует выполнять с помощью gtk_accel_map_change_entry().

Чтобы избежать изменения некоторых акселераторов, их можно заблокировать с помощью gtk_accel_map_lock_path(). Разблокировка выполняется с помощью gtk_accel_map_unlock_path().

Сохранение и загрузка карт акселераторов

Карты акселераторов могут быть сохранены и загружены из внешнего ресурса. Для простого сохранения и загрузки из файла используются gtk_accel_map_save() и gtk_accel_map_load(). Сохранение и загрузка также могут выполняться путем предоставления дескриптора файла в gtk_accel_map_save_fd() и gtk_accel_map_load_fd().

Отслеживание изменений

Объект GtkAccelMap полезен только для отслеживания изменений акселераторов. Подключением к сигналу “changed” можно отслеживать изменения всех акселераторов. Также можно отслеживать только отдельный путь акселератора, используя его в качестве детали сигнала “changed”.

Функции

GtkAccelMapForeach ()

void
(*GtkAccelMapForeach) (gpointer data,
                       const gchar *accel_path,
                       guint accel_key,
                       GdkModifierType accel_mods,
                       gboolean changed);

Параметры

data

Передаваемые пользовательские данные в gtk_accel_map_foreach() или gtk_accel_map_foreach_unfiltered()

accel_path

Путь к акселератору текущего акселератора

accel_key

Ключ текущего акселератора

accel_mods

Модификаторы текущего акселератора

changed

Флаг изменения акселератора (если TRUE, акселератор изменился во время выполнения и должен быть сохранён при экспорте акселераторов)

gtk_accel_map_add_entry ()

void
gtk_accel_map_add_entry (const gchar *accel_path,
                         guint accel_key,
                         GdkModifierType accel_mods);

Регистрирует новый акселератор в глобальной карте акселераторов. Эту функцию следует вызывать только один раз на accel_path с каноническим accel_key и accel_mods для данного пути. Чтобы изменить акселератор во время выполнения программно, используйте gtk_accel_map_change_entry().

Установите accel_key и accel_mods в 0, чтобы запросить удаление акселератора.

Обратите внимание, что строка accel_path будет храниться в GQuark. Поэтому, если вы передаёте статическую строку, вы можете сэкономить некоторое количество памяти, предварительно интернировав её с помощью g_intern_static_string().

Параметры

accel_path

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

accel_key

ключ акселератора

accel_mods

модификаторы акселератора

gtk_accel_map_lookup_entry ()

gboolean
gtk_accel_map_lookup_entry (const gchar *accel_path,
                            GtkAccelKey *key);

Ищет запись акселератора для accel_path и заполняет key .

Параметры

accel_path

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

key

ключ акселератора для заполнения (необязательно).

[allow-none][out]

Возвращаемое значение

TRUE, если accel_path известен, FALSE в противном случае

gtk_accel_map_change_entry ()

gboolean
gtk_accel_map_change_entry (const gchar *accel_path,
                            guint accel_key,
                            GdkModifierType accel_mods,
                            gboolean replace);

Изменяет accel_key и accel_mods, в настоящее время связанные с accel_path. Из-за конфликтов с другими акселераторами изменение может быть не всегда возможным, replace указывает, могут ли быть удалены другие акселераторы для разрешения таких конфликтов. Изменение произойдёт только в том случае, если все конфликты могут быть разрешены (что может не произойти, если конфликтующие акселераторы заблокированы). Успешные изменения обозначаются возвращаемым значением TRUE.

Обратите внимание, что строка accel_path будет храниться в GQuark. Поэтому, если вы передаёте статическую строку, вы можете сэкономить некоторое количество памяти, предварительно интернировав её с помощью g_intern_static_string().

Параметры

accel_path

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

accel_key

новый ключ акселератора

accel_mods

новые модификаторы акселератора

replace

TRUE, если при конфликтах могут быть удалены другие акселераторы

Возвращаемое значение

TRUE, если акселератор может быть изменён, FALSE в противном случае

gtk_accel_map_load ()

void
gtk_accel_map_load (const gchar *file_name);

Парсит файл, ранее сохранённый с помощью gtk_accel_map_save() для спецификаций акселераторов и распространяет их соответствующим образом.

Параметры

file_name

файл, содержащий спецификации акселераторов, в кодировке имён файлов GLib.

[type filename]

gtk_accel_map_save ()

void
gtk_accel_map_save (const gchar *file_name);

Сохраняет текущие спецификации акселераторов (путь, ключ и модификаторы) в file_name. Файл записывается в формате, который можно прочитать обратно с помощью gtk_accel_map_load().

Параметры

file_name

имя файла для хранения спецификаций акселераторов, в кодировке имён файлов GLib.

[type filename]

gtk_accel_map_foreach ()

void
gtk_accel_map_foreach (gpointer data,
                       GtkAccelMapForeach foreach_func);

Перебирает записи в карте акселераторов, путь к которым не соответствует ни одному из фильтров, добавленных с помощью gtk_accel_map_add_filter(), и выполняет foreach_func на каждой. Подпись foreach_func такая же, как у GtkAccelMapForeach, параметр changed указывает, был ли этот акселератор изменён во время выполнения (следовательно, его необходимо будет сохранить при экспорте карты акселераторов).

Параметры

data

данные, которые будут переданы в foreach_func.

[allow-none]

foreach_func

функция, которая будет выполняться для каждой записи карты акселераторов, которая не отфильтрована.

[scope call]

gtk_accel_map_load_fd ()

void
gtk_accel_map_load_fd (gint fd);

Вариант с дескриптором файла для gtk_accel_map_load().

Обратите внимание, что дескриптор файла не будет закрыт этой функцией.

Параметры

fd

действительный для чтения дескриптор файла

gtk_accel_map_save_fd ()

void
gtk_accel_map_save_fd (gint fd);

Вариант с дескриптором файла для gtk_accel_map_save().

Обратите внимание, что дескриптор файла не будет закрыт этой функцией.

Параметры

fd

действительный дескриптор записываемого файла

gtk_accel_map_load_scanner ()

void
gtk_accel_map_load_scanner (GScanner *scanner);

Вариант GScanner для gtk_accel_map_load().

Параметры

scanner

объект GScanner, которому уже был предоставлен входной файл

gtk_accel_map_add_filter ()

void
gtk_accel_map_add_filter (const gchar *filter_pattern);

Добавляет фильтр к глобальному списку фильтров пути акселератора.

Элементы карты акселераторов, путь акселератора которых соответствует одному из фильтров, пропускаются функцией gtk_accel_map_foreach().

Эта функция предназначена для модулей GTK+, которые создают собственные меню, но не хотят, чтобы они сохранялись в дамп карты акселераторов приложения.

Параметры

filter_pattern

шаблон (см. GPatternSpec)

gtk_accel_map_foreach_unfiltered ()

void
gtk_accel_map_foreach_unfiltered (gpointer data,
                                  GtkAccelMapForeach foreach_func);

Проходит по всем записям в карте акселераторов и выполняет foreach_func для каждой. Подпись foreach_func соответствует GtkAccelMapForeach, параметр changed указывает, был ли данный акселератор изменён во время выполнения (следовательно, потребуется сохранение во время дампа карты акселераторов).

Параметры

data

данные, передаваемые в foreach_func

foreach_func

функция, выполняемая для каждого элемента карты акселераторов.

[scope call]

gtk_accel_map_get ()

GtkAccelMap *
gtk_accel_map_get (void);

Возвращает одиночный глобальный объект GtkAccelMap. Этот объект полезен только для оповещения о изменениях в карте акселераторов через сигнал ::changed; он не является параметром других функций работы с картой акселераторов.

Возвращает

глобальный объект GtkAccelMap.

[transfer none]

С: 2.4

gtk_accel_map_lock_path ()

void
gtk_accel_map_lock_path (const gchar *accel_path);

Блокирует указанный путь акселератора. Если карта акселераторов ещё не содержит запись для accel_path, создаётся новая.

Блокировка пути акселератора предотвращает изменение его акселератора во время выполнения. Разблокировать заблокированный путь акселератора можно с помощью gtk_accel_map_unlock_path(). См. gtk_accel_map_change_entry() для информации об изменениях акселераторов во время выполнения.

Если вызов происходит более одного раза, accel_path остаётся заблокированным до тех пор, пока gtk_accel_map_unlock_path() не будет вызван эквивалентное количество раз.

Обратите внимание, что блокировка отдельных путей акселераторов независима от блокировки GtkAccelGroup, содержащего их. Для возможности изменений акселераторов во время выполнения необходимо разблокировать как путь акселератора, так и содержащую его GtkAccelGroup.

Параметры

accel_path

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

С: 2.4

gtk_accel_map_unlock_path ()

void
gtk_accel_map_unlock_path (const gchar *accel_path);

Отменяет последний вызов gtk_accel_map_lock_path() для этого accel_path. См. gtk_accel_map_lock_path() для информации о блокировке путей акселератора.

Параметры

accel_path

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

С: 2.4

Типы и значения

GtkAccelMap

typedef struct _GtkAccelMap GtkAccelMap;

Подробности сигналов

Сигнал “changed”

void
user_function (GtkAccelMap    *object,
               gchar          *accel_path,
               guint           accel_key,
               GdkModifierType accel_mods,
               gpointer        user_data)

Уведомляет об изменении глобальной карты акселераторов. Путь также используется в качестве детали для сигнала, поэтому можно подключиться к changed::accel_path.

Параметры

object

глобальный объект карты акселераторов

accel_path

путь акселератора, который изменился

accel_key

значение ключа для нового акселератора

accel_mods

маска модификаторов для нового акселератора

user_data

пользовательские данные, заданные при подключении обработчика сигнала.

Флаги: имеет детали

С: 2.4

См. также

GtkAccelGroup, GtkAccelKey, GtkUIManager, gtk_widget_set_accel_path(), gtk_menu_item_set_accel_path()

© 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-Accelerator-Maps.html

Spec-Zone.ru

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