Карты акселераторов
Карты акселераторов — загружаемые спецификации клавиатурных акселераторов
Функции
| 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>/File/Dialogs/Tool Options…».
Все акселераторы хранятся внутри одной глобальной 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] |
Возвращаемое значение
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()
Параметры
путь_акцелератора | действительный путь ускорителя | |
клавиша_акцелератора | новая клавиша ускорителя | |
модификаторы_акцелератора | новые модификаторы ускорителя | |
заменить |
|
Возвращаемое значение
TRUE если ускоритель можно изменить, FALSE в противном случае
gtk_accel_map_load ()
void gtk_accel_map_load (const gchar *file_name);
Парсит файл, предварительно сохранённый с помощью gtk_accel_map_save(), для спецификаций ускорителей и соответствующим образом распространяет их.
Параметры
имя_файла | файл со спецификациями ускорителей в кодировке имён файлов GLib. | [type имя_файла] |
gtk_accel_map_save ()
void gtk_accel_map_save (const gchar *file_name);
Сохраняет текущие спецификации ускорителей (путь ускорителя, клавиша и модификаторы) в file_name. Файл записывается в формате, пригодном для последующего чтения с помощью gtk_accel_map_load().
Параметры
имя_файла | имя файла для хранения спецификаций ускорителей в кодировке имён файлов GLib. | [type имя_файла] |
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 | a 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, char *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.24/gtk3-Accelerator-Maps.html