Карты акселераторов
Карты акселераторов — загружаемые спецификации клавиатурных акселераторов
Функции
| 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 | Содержит детали |
Типы и значения
Иерархия объектов
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 | Передаваемые пользовательские данные в | |
accel_path | Путь к акселератору текущего акселератора | |
accel_key | Ключ текущего акселератора | |
accel_mods | Модификаторы текущего акселератора | |
changed | Флаг изменения акселератора (если |
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] |
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 |
|
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 | данные, которые будут переданы в | [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 | функция, выполняемая для каждого элемента карты акселераторов. | [scope call] |
gtk_accel_map_get ()
GtkAccelMap *
gtk_accel_map_get (void); Возвращает одиночный глобальный объект GtkAccelMap. Этот объект полезен только для оповещения о изменениях в карте акселераторов через сигнал ::changed; он не является параметром других функций работы с картой акселераторов.
С: 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
© 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