краткий обзор#include <gtk/gtk.h> gtkaccelmap; void (*gtkaccelmapforeach) (gpointer data, const gchar *accel_path, guint accel_key, gdkmodifiertype accel_mods, gboolean changed); void gtk_accel_map_add_entry (const gchar *accel_path, guint accel_key, gdkmodifiertype accel_mods); gboolean gtk_accel_map_lookup_entry (const gchar *accel_path, gtkaccelkey *key); gboolean gtk_accel_map_change_entry (const gchar *accel_path, guint accel_key, gdkmodifiertype accel_mods, gboolean replace); void gtk_accel_map_load (const gchar *file_name); void gtk_accel_map_save (const gchar *file_name); void gtk_accel_map_foreach (gpointer data, gtkaccelmapforeach foreach_func); void gtk_accel_map_load_fd (gint fd); void gtk_accel_map_save_fd (gint fd); void gtk_accel_map_load_scanner (gscanner *scanner); void gtk_accel_map_add_filter (const gchar *filter_pattern); void gtk_accel_map_foreach_unfiltered (gpointer data, gtkaccelmapforeach foreach_func); gtkaccelmap* gtk_accel_map_get (void); void gtk_accel_map_lock_path (const gchar *accel_path); void gtk_accel_map_unlock_path (const gchar *accel_path); иерархия объектовgobject +----gtkaccelmap сигналы"changed" void user_function (gtkaccelmap *object, gchar *accel_path, guint accel_key, gdkmodifiertype accel_mods, gpointer user_data) : run last / has details описаниедеталиgtkaccelmaptypedef struct _gtkaccelmap gtkaccelmap; 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(). путь акселератора должен состоять из "<windowtype>/category1/category2/.../action", где <windowtype> должен быть уникальным, определённым приложением, идентификатором, который соответствует виду окна использующего акселератор, например "gimp-image", "abiword-document" или "gnumeric-settings". часть category1/.../action наиболее соответствует действию выбранному акселератору, то есть акселераторам пунктов меню, например "file/save as", "image/view/zoom" или "edit/select all". таким образом, действительный полный путь акселератора может выглядеть так: "<gimp-toolbox>/file/dialogs/tool options...".
gtk_accel_map_lookup_entry ()gboolean gtk_accel_map_lookup_entry (const gchar *accel_path, gtkaccelkey *key); просматривает введенный акселератор для accel_path и заполняет key.
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.
gtk_accel_map_load ()void gtk_accel_map_load (const gchar *file_name); анализирует файл, предварительно сохранённый gtk_accel_map_save(), для спецификации акселераторов и соответственно размножает их.
gtk_accel_map_save ()void gtk_accel_map_save (const gchar *file_name); сохраняет текущую спецификацию акселераторов (путь акселератора, ключ и модификатор) в file_name. файл записывается в формате подходящем для прочтения функцией gtk_accel_map_load().
gtk_accel_map_foreach ()void gtk_accel_map_foreach (gpointer data, gtkaccelmapforeach foreach_func); перебирает записи в карте акселераторов, чей ?accel-путь не соответствует ни одному фильтру установленному gtk_accel_map_add_filter(), и выполняет для каждой foreach_func. сигнатура foreach_func это gtkaccelmapforeach, параметр changed указывает какой акселератор изменен в течении текущемго выполнения (сохраняя текущий сформированный дамп карты акселераторов).
gtk_accel_map_load_fd ()void gtk_accel_map_load_fd (gint fd); вариант файлового дескриптора gtk_accel_map_load(). помните, дескриптор файла не будет закрыт этой функцией.
gtk_accel_map_save_fd ()void gtk_accel_map_save_fd (gint fd); вариант файлового дескриптора gtk_accel_map_save(). помните, дескриптор файла не будет закрыт этой функцией.
gtk_accel_map_load_scanner ()void gtk_accel_map_load_scanner (gscanner *scanner); gscanner вариант gtk_accel_map_load().
gtk_accel_map_add_filter ()void gtk_accel_map_add_filter (const gchar *filter_pattern); добавляет фильтр в глобальный список фильтров путей акселераторов. наносит записи на карту акселераторов пути которых соответствуют пропущенным фильтрам gtk_accel_map_foreach(). эта функция предназначена для gtk+ модулей создающих собственные меню, но не хотят быть сохранёнными в сформированном дампе карты акселераторов приложения.
gtk_accel_map_foreach_unfiltered ()void gtk_accel_map_foreach_unfiltered (gpointer data, gtkaccelmapforeach foreach_func); перебирает все записи карты акселераторов и выполняет foreach_func для каждой. сигнатура foreach_func это gtkaccelmapforeach, параметр changed указывает был ли изменён данный акселератор в течении текущемго выполнения (сохраняя текущий сформированный дамп карты акселераторов).
gtk_accel_map_get ()gtkaccelmap* gtk_accel_map_get (void); получает единственный глобальный объект gtkaccelmap. этот объект полезен только для сообщения изменений карты акселераторов посредством ::changed signal; это не параметр к другим функциям карты акселераторов.
начиная с версии 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.
начиная с версии 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() для информации о замыкании пути акселератора.
начиная с версии 2.4 детали сигналовсигнал "changed"void user_function (gtkaccelmap *object, gchar *accel_path, guint accel_key, gdkmodifiertype accel_mods, gpointer user_data) : run last / has details реагирует на изменения в глобальной карте акселераторов. путь также используется как деталь для сигнала, поэтому возможно соединиться с измененным ::accel_path.
начиная с версии 2.4 |