краткий обзор#include <gtk/gtk.h> gtkaccelgroup; gtkaccelgroup* gtk_accel_group_new (void); #define gtk_accel_group_ref #define gtk_accel_group_unref void gtk_accel_group_connect (gtkaccelgroup *accel_group, guint accel_key, gdkmodifiertype accel_mods, gtkaccelflags accel_flags, gclosure *closure); void gtk_accel_group_connect_by_path (gtkaccelgroup *accel_group, const gchar *accel_path, gclosure *closure); gboolean (*gtkaccelgroupactivate) (gtkaccelgroup *accel_group, gobject *acceleratable, guint keyval, gdkmodifiertype modifier); gboolean (*gtkaccelgroupfindfunc) (gtkaccelkey *key, gclosure *closure, gpointer data); gboolean gtk_accel_group_disconnect (gtkaccelgroup *accel_group, gclosure *closure); gboolean gtk_accel_group_disconnect_key (gtkaccelgroup *accel_group, guint accel_key, gdkmodifiertype accel_mods); gtkaccelgroupentry* gtk_accel_group_query (gtkaccelgroup *accel_group, guint accel_key, gdkmodifiertype accel_mods, guint *n_entries); gboolean gtk_accel_group_activate (gtkaccelgroup *accel_group, gquark accel_quark, gobject *acceleratable, guint accel_key, gdkmodifiertype accel_mods); void gtk_accel_group_lock (gtkaccelgroup *accel_group); void gtk_accel_group_unlock (gtkaccelgroup *accel_group); gtkaccelgroup* gtk_accel_group_from_accel_closure (gclosure *closure); gboolean gtk_accel_groups_activate (gobject *object, guint accel_key, gdkmodifiertype accel_mods); gslist* gtk_accel_groups_from_object (gobject *object); gtkaccelkey* gtk_accel_group_find (gtkaccelgroup *accel_group, gtkaccelgroupfindfunc find_func, gpointer data); gtkaccelkey; gboolean gtk_accelerator_valid (guint keyval, gdkmodifiertype modifiers); void gtk_accelerator_parse (const gchar *accelerator, guint *accelerator_key, gdkmodifiertype *accelerator_mods); gchar* gtk_accelerator_name (guint accelerator_key, gdkmodifiertype accelerator_mods); gchar* gtk_accelerator_get_label (guint accelerator_key, gdkmodifiertype accelerator_mods); void gtk_accelerator_set_default_mod_mask (gdkmodifiertype default_mod_mask); guint gtk_accelerator_get_default_mod_mask (void); иерархия объектовgobject +----gtkaccelgroup сигналы"accel-activate" gboolean user_function (gtkaccelgroup *accel_group, gobject *acceleratable, guint keyval, gdkmodifiertype modifier, gpointer user_data) : has details "accel-changed" void user_function (gtkaccelgroup *accel_group, guint keyval, gdkmodifiertype modifier, gclosure *accel_closure, gpointer user_data) : run first / has details описаниеgtkaccelgroup представляет группу акселераторов клавиатуры, обычно прикреплённых к высшему уровню gtkwindow (с помощью gtk_window_add_accel_group()). обычно вам не потребуется непосредственное создание gtkaccelgroup; вместо этого используйте gtkitemfactory, gtk+ автоматически установит акселераторы для ваших меню используя производство пунктов в gtkaccelgroup. помните, эти акселераторы (accelerators) отличаются от мнемоников (mnemonics). акселераторы имеют комбинации клавиш для активации пунктов меню; они появляются рядом с пунктом меню для которого предназначены. например "ctrl+q" может появиться рядом с пунктом меню "quit". мнемоники имеют комбинации клавиш для элементов gui таких как ввод текста или кнопка; они появляются как подчеркнутые знаки. смотрите gtk_label_new_with_mnemonic(). пункты меню могут иметь и акселераторы и мнемоники. деталиgtkaccelgrouptypedef struct _gtkaccelgroup gtkaccelgroup; представление объекта и поддержка группы акселераторов. gtk_accel_group_new ()gtkaccelgroup* gtk_accel_group_new (void); создаёт новый gtkaccelgroup.
gtk_accel_group_ref#define gtk_accel_group_ref g_object_ref вниманиеgtk_accel_group_ref устарел, поэтому не нужно его использовать во вновь создаваемом коде. используйте эквивалент g_object_ref().
gtk_accel_group_unref#define gtk_accel_group_unref g_object_unref вниманиеgtk_accel_group_unref устарел, поэтому не нужно его использовать во вновь создаваемом коде. используйте эквивалент g_object_unref(). gtk_accel_group_connect ()void gtk_accel_group_connect (gtkaccelgroup *accel_group, guint accel_key, gdkmodifiertype accel_mods, gtkaccelflags accel_flags, gclosure *closure); устанавливает акселератор в группу. когда accel_group активизируется в ответ на вызов gtk_accel_groups_activate(), closure будет вызван если accel_key и accel_mods из gtk_accel_groups_activate() соответствуют таковым в этом соединении. подпись используемая для closure - это gtkaccelgroupactivate. отметьте, что, из-за деталей выполнения, единственное закрытие может быть соединено только с одной группой акселераторов.
gtk_accel_group_connect_by_path ()void gtk_accel_group_connect_by_path (gtkaccelgroup *accel_group, const gchar *accel_path, gclosure *closure); устанавливает акселератор в эту группу, используя путь акселератора для просмотра соответствующего ключа и модификаторов (смотрите gtk_accel_map_add_entry()). когда accel_group активизируется в ответ на вызов gtk_accel_groups_activate(), closure будет вызван если accel_key и accel_mods из gtk_accel_groups_activate() будут соответствовать ключу и модификатору в пути. подпись используемая для closure - это gtkaccelgroupactivate.
gtkaccelgroupactivate ()gboolean (*gtkaccelgroupactivate) (gtkaccelgroup *accel_group, gobject *acceleratable, guint keyval, gdkmodifiertype modifier);
gtkaccelgroupfindfunc ()gboolean (*gtkaccelgroupfindfunc) (gtkaccelkey *key, gclosure *closure, gpointer data);
начиная с версии 2.2 gtk_accel_group_disconnect ()gboolean gtk_accel_group_disconnect (gtkaccelgroup *accel_group, gclosure *closure); удаляет акселератор предварительно установленный через gtk_accel_group_connect().
gtk_accel_group_disconnect_key ()gboolean gtk_accel_group_disconnect_key (gtkaccelgroup *accel_group, guint accel_key, gdkmodifiertype accel_mods); удаляет акселератор предварительно установленный через gtk_accel_group_connect().
gtk_accel_group_query ()gtkaccelgroupentry* gtk_accel_group_query (gtkaccelgroup *accel_group, guint accel_key, gdkmodifiertype accel_mods, guint *n_entries); запрашивает группу акселераторов для всех соответствующих accel_key и accel_mods.
gtk_accel_group_activate ()gboolean gtk_accel_group_activate (gtkaccelgroup *accel_group, gquark accel_quark, gobject *acceleratable, guint accel_key, gdkmodifiertype accel_mods);
gtk_accel_group_lock ()void gtk_accel_group_lock (gtkaccelgroup *accel_group); замыкает полученную группу акселераторов. замыкает группу акселераторов предотвращая изменение включённых акселераторов во время выполнения. используйте gtk_accel_map_change_entry() для изменения акселераторов во время выполнения. если вызвана больше одного раза, accel_group останется замкнутым пока gtk_accel_group_unlock() не будет вызвана соответствующее количество раз.
gtk_accel_group_unlock ()void gtk_accel_group_unlock (gtkaccelgroup *accel_group); уничтожает последний вызов gtk_accel_group_lock() для accel_group.
gtk_accel_group_from_accel_closure ()gtkaccelgroup* gtk_accel_group_from_accel_closure (gclosure *closure); находит gtkaccelgroup с которым связан closure; смотрите gtk_accel_group_connect().
gtk_accel_groups_activate ()gboolean gtk_accel_groups_activate (gobject *object, guint accel_key, gdkmodifiertype accel_mods); находит первый акселератор в любом присоединённом gtkaccelgroup, с соответствующими object, accel_key и accel_mods, и активизирует этот акселератор. если акселератор активирован и соответствующее нажатие обработано, возвращается true.
gtk_accel_groups_from_object ()gslist* gtk_accel_groups_from_object (gobject *object); получить список всех групп акселераторов прикреплённых к object.
gtk_accel_group_find ()gtkaccelkey* gtk_accel_group_find (gtkaccelgroup *accel_group, gtkaccelgroupfindfunc find_func, gpointer data); находит первый вход в группе акселераторов, для которого find_func возвращает true и возвращает его gtkaccelkey.
gtkaccelkeytypedef struct {
guint accel_key;
gdkmodifiertype accel_mods;
guint accel_flags : 16;
} gtkaccelkey;
gtk_accelerator_valid ()gboolean gtk_accelerator_valid (guint keyval, gdkmodifiertype modifiers); определяет, составляют ли данное ключевое значение (keyval) и маска модификатора (modifiers) действительный модификатор клавиатуры. например, ключевое значение gdk_a плюс gdk_control_mask, действителен – это акселератор "ctrl+a". но вы не можете, для ссылки, использовать ключевое значение gdk_control_l как акселератор.
gtk_accelerator_parse ()void gtk_accelerator_parse (const gchar *accelerator, guint *accelerator_key, gdkmodifiertype *accelerator_mods); анализирует строку, представляющую акселератор. формат примерно такой "<control>a", или "<shift><alt>f1", или "<release>z" (последний – для ключевого высвобождения). анализатор достаточно либерален и позволяет нижний или верхний регистр, или сокращения такие как "<ctl>" и "<ctrl>". если анализ не удался, accelerator_key и accelerator_mods будут установлены в значение 0 (zero).
gtk_accelerator_name ()gchar* gtk_accelerator_name (guint accelerator_key, gdkmodifiertype accelerator_mods); преобразует ключевое значение и маску модификатора в строку анализируемую gtk_accelerator_parse(). например, если вы поместили gdk_q и gdk_control_mask, эта функция вернёт "<control>q". если вам нужно отобразить акселераторы на интерфейсе пользователя, смотрите gtk_accelerator_get_label().
gtk_accelerator_get_label ()gchar* gtk_accelerator_get_label (guint accelerator_key, gdkmodifiertype accelerator_mods); преобразует ключевое значение акселератора и маску модификатора в строку которая может использоваться для отображения акселератора на пользовательском интерфейсе.
начиная с версии 2.6 gtk_accelerator_set_default_mod_mask ()void gtk_accelerator_set_default_mod_mask (gdkmodifiertype default_mod_mask); устанавливает модификаторы которые будут существенно продуманны для акселераторов клавиатуры. по умолчанию модифицирующая маска gdk_control_mask | gdk_shift_mask | gdk_mod1_mask, это, control, shift и alt. другие модификаторы по умолчанию игнорируются gtkaccelgroup. вы должны включить по крайней мере три модификатора по умолчанию в любое значение переданное этой функции. по умолчанию модифицирующая маска должна быть изменена при запуске приложения, перед использованием любых групп акселераторов.
gtk_accelerator_get_default_mod_mask ()guint gtk_accelerator_get_default_mod_mask (void); устанавливает значение gtk_accelerator_set_default_mod_mask().
детали сигналовсигнал "accel-activate"gboolean user_function (gtkaccelgroup *accel_group, gobject *acceleratable, guint keyval, gdkmodifiertype modifier, gpointer user_data) : has details сигнал accel-activate реализует детали gtkaccelgroup и не предполагает использование приложением.
сигнал "accel-changed"void user_function (gtkaccelgroup *accel_group, guint keyval, gdkmodifiertype modifier, gclosure *accel_closure, gpointer user_data) : run first / has details сигнал accel-changed создаётся когда gtkaccelgroupentry добавляется или удаляется из группы акселераторов. виджеты, такие как gtkaccellabel, которые отображают ассоциированные акселераторы должны подключаться к этому сигналу и восстанавливать их визуальное представление, если accel_closure им соответствует.
смотрите такжеgtk_window_add_accel_group(), gtk_accel_map_change_entry(), gtk_item_factory_new(), gtk_label_new_with_mnemonic() |