Карты ускорителей
Карты ускорителей — Загружаемые спецификации клавишных комбинаций ускорителей
Функции
| 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 | Has Details |
Типы и значения
Иерархия объектов
GObject ╰── GtkAccelMap
Файлы заголовков
#include <gtk/gtk.h>
Описание
Карты ускорителей используются для определения настраиваемых во время выполнения клавишных комбинаций ускорителей. Функции для их обработки обычно используются более удобными механизмами высокого уровня, такими как GtkUIManager, и поэтому считаются «низкоуровневыми». Вы захотите их использовать, если вы вручную создаете меню, у которых должны быть настраиваемые пользователем клавишные комбинации ускорителей.
Ускоритель определяется однозначно следующими параметрами:
путь к ускорителю
ключ ускорителя
модификаторы ускорителя
Путь к ускорителю должен иметь вид «<ТИП_ОКНА>/Категория1/Категория2/.../Действие», где ТИП_ОКНА — это уникальный идентификатор, специфичный для приложения, который соответствует типу окна, в котором используется ускоритель, например, «Gimp-Image», «Abiword-Document» или «Gnumeric-Settings». Часть «Категория1/.../Действие» наиболее подходящим образом выбирается по действию, которое вызывает ускоритель, т. е. для ускорителей на элементах меню выберите путь к пункту меню, например, «Файл/Сохранить как», «Изображение/Просмотр/Масштаб» или «Правка/Выделить всё». Таким образом, полный допустимый путь к ускорителю может выглядеть так: «<Gimp-Панель инструментов>/Файл/Диалоги/Параметры инструмента...».
Все ускорители хранятся в одной глобальной карте 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);
Параметры
данные | Передаваемые пользователем данные в | |
путь_акцелератора | Путь акцелератора текущего ускорителя | |
ключ_акцелератора | Ключ текущего ускорителя | |
модификаторы_акцелератора | Модификаторы текущего ускорителя | |
изменён | Флаг изменения ускорителя (если |
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().
Параметры
путь_акцелератора | действительный путь ускорителя | |
ключ_акцелератора | ключ ускорителя | |
модификаторы_акцелератора | модификаторы ускорителя |
gtk_accel_map_lookup_entry ()
gboolean gtk_accel_map_lookup_entry (const gchar *accel_path,GtkAccelKey *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().
Параметры
путь_акцелератора | действительный путь ускорителя | |
ключ_акцелератора | новый ключ ускорителя | |
модификаторы_акцелератора | новые модификаторы ускорителя | |
замена |
|
gtk_accel_map_load ()
void
gtk_accel_map_load (const gchar *file_name); Парсит файл, ранее сохранённый с помощью gtk_accel_map_save(), для спецификаций ускорителей и соответствующим образом их распространяет.
Параметры
имя_файла | файл, содержащий спецификации ускорителей, в кодировке имён файлов GLib. | [type filename] |
gtk_accel_map_save ()
void
gtk_accel_map_save (const gchar *file_name); Сохраняет текущие спецификации ускорителей (путь, ключ и модификаторы) в file_name. Файл записывается в формате, пригодном для повторного чтения с помощью gtk_accel_map_load().
Параметры
имя_файла | имя файла, содержащего спецификации ускорителей, в кодировке имён файлов 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 указывает, был ли этот ускоритель изменён во время выполнения (следовательно, должен быть сохранён при сохранении карты ускорителей).
Параметры
данные | данные, которые нужно передать в | [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.20/gtk3-Accelerator-Maps.html