GtkMenuShell
GtkMenuShell — Базовый класс для объектов меню
Функции
| void | gtk_menu_shell_append () |
| void | gtk_menu_shell_prepend () |
| void | gtk_menu_shell_insert () |
| void | gtk_menu_shell_deactivate () |
| void | gtk_menu_shell_select_item () |
| void | gtk_menu_shell_select_first () |
| void | gtk_menu_shell_deselect () |
| void | gtk_menu_shell_activate_item () |
| void | gtk_menu_shell_cancel () |
| void | gtk_menu_shell_set_take_focus () |
| gboolean | gtk_menu_shell_get_take_focus () |
| GtkWidget * | gtk_menu_shell_get_selected_item () |
| GtkWidget * | gtk_menu_shell_get_parent_shell () |
| void | gtk_menu_shell_bind_model () |
Свойства
| gboolean | take-focus | Чтение/Запись |
Сигналы
| void | activate-current | Действие |
| void | cancel | Действие |
| void | cycle-focus | Действие |
| void | deactivate | Выполнить сначала |
| void | insert | Выполнить сначала |
| void | move-current | Действие |
| gboolean | move-selected | Выполнить в последнюю очередь |
| void | selection-done | Выполнить сначала |
Типы и значения
| struct | GtkMenuShell |
| enum | GtkMenuDirectionType |
Иерархия объектов
GObject
╰── GInitiallyUnowned
╰── GtkWidget
╰── GtkContainer
╰── GtkMenuShell
├── GtkMenuBar
╰── GtkMenu
Реализованные интерфейсы
GtkMenuShell реализует AtkImplementorIface и GtkBuildable.
Файлы
#include <gtk/gtk.h>
Описание
A GtkMenuShell — это абстрактный базовый класс, используемый для получения GtkMenu и GtkMenuBar подклассов.
A GtkMenuShell — это контейнер GtkMenuItem объектов, организованных в список, по которому пользователь может перемещаться, выбирать и активировать их для выполнения функций приложения. У GtkMenuItem может быть ассоциировано подменю, что позволяет создавать вложенные иерархические меню.
Терминология
Элемент меню может быть «выбран», это означает, что он отображается в состоянии выделения, а если у него есть подменю, это подменю будет открыто.
Меню «активно», когда оно отображается на экране, и пользователь выбирает элементы из него. Меню в строке меню неактивно, пока пользователь не щелкнет по одному из его элементов. Когда меню активно, наведение курсора на подменю откроет его.
Существует также понятие текущего меню и текущего элемента меню. Текущий элемент меню — это выделенный элемент меню, который находится на самом нижнем уровне иерархии. (Не каждое активное меню обязательно содержит выделенный элемент меню, но если оно содержит выделенный элемент, то и родительское меню также должно содержать выделенный элемент). Текущее меню — это меню, содержащее текущий элемент меню. Оно всегда имеет GTK захват и получает все нажатия клавиш.
Функции
gtk_menu_shell_append ()
void gtk_menu_shell_append (GtkMenuShell *menu_shell,GtkWidget *child);
Добавляет новый GtkMenuItem в конец списка элементов оболочки меню.
Параметры
menu_shell | оболочка GtkMenuShell | |
child | Добавляемый GtkMenuItem. | [type Gtk.MenuItem] |
gtk_menu_shell_prepend ()
void gtk_menu_shell_prepend (GtkMenuShell *menu_shell,GtkWidget *child);
Добавляет новый GtkMenuItem в начало списка элементов оболочки меню.
Параметры
menu_shell | оболочка GtkMenuShell | |
child | Добавляемый GtkMenuItem. |
gtk_menu_shell_insert ()
void gtk_menu_shell_insert (GtkMenuShell *menu_shell,GtkWidget *child,gint position);
Добавляет новый GtkMenuItem в список элементов оболочки меню на позиции, указанной параметром position.
Параметры
menu_shell | оболочка GtkMenuShell | |
child | Добавляемый GtkMenuItem. | |
position | Позиция в списке элементов, на которую добавляется |
gtk_menu_shell_deactivate ()
void
gtk_menu_shell_deactivate (GtkMenuShell *menu_shell); Деактивирует оболочку меню.
Как правило, это приводит к удалению оболочки меню с экрана.
Параметры
menu_shell | оболочка GtkMenuShell |
gtk_menu_shell_select_item ()
void gtk_menu_shell_select_item (GtkMenuShell *menu_shell,GtkWidget *menu_item);
Выбирает элемент меню из оболочки меню.
Параметры
menu_shell | оболочка GtkMenuShell | |
menu_item | Выбираемый GtkMenuItem |
gtk_menu_shell_select_first ()
void gtk_menu_shell_select_first (GtkMenuShell *menu_shell,gboolean search_sensitive);
Выбирает первый видимый или выбираемый дочерний элемент оболочки меню; не выбирать элементы разрыва, если единственный элемент — элемент разрыва.
Параметры
menu_shell | оболочка GtkMenuShell | |
search_sensitive | если |
С: 2.2
gtk_menu_shell_deselect ()
void
gtk_menu_shell_deselect (GtkMenuShell *menu_shell); Отменяет выбор текущего выделенного элемента в оболочке меню, если он есть.
Параметры
menu_shell | оболочка GtkMenuShell |
gtk_menu_shell_activate_item ()
void gtk_menu_shell_activate_item (GtkMenuShell *menu_shell,GtkWidget *menu_item,gboolean force_deactivate);
Активирует элемент меню в оболочке меню.
Параметры
menu_shell | оболочка GtkMenuShell | |
menu_item | активируемый GtkMenuItem | |
force_deactivate | если |
gtk_menu_shell_cancel ()
void
gtk_menu_shell_cancel (GtkMenuShell *menu_shell); Отменяет выбор в оболочке меню.
Параметры
menu_shell | оболочка GtkMenuShell |
С: 2.4
gtk_menu_shell_set_take_focus ()
void gtk_menu_shell_set_take_focus (GtkMenuShell *menu_shell,gboolean take_focus);
Если take_focus равно TRUE (по умолчанию), оболочка меню получит фокус клавиатуры, чтобы получать все события клавиатуры, что необходимо для включения навигации по клавиатуре в меню.
Установка take_focus в FALSE полезна только для специальных приложений, таких как реализации виртуальных клавиатур, которые не должны получать фокус клавиатуры.
Состояние take_focus меню или панели меню автоматически передается подменю при каждом открытии подменю, поэтому вам не нужно беспокоиться о его рекурсивной настройке для всей иерархии меню. Только при программировании выбора подменю и его ручном открытии свойство take_focus подменю необходимо установить явно.
Обратите внимание, что установка его в FALSE имеет побочные эффекты:
Если фокус находится в другом приложении, фокус сохраняется, а навигация по клавиатуре в меню не работает. Следовательно, навигация по клавиатуре в меню будет работать только если фокус находится на каком-либо виджете верхнего уровня, принадлежащем экранной клавиатуре.
Чтобы избежать путаницы у пользователя, в менюх с take_focus, установленным в FALSE, не должны отображаться мнемоники или акселераторы, так как нет гарантии, что они будут работать.
См. также gdk_keyboard_grab()
Параметры
menu_shell | оболочка GtkMenuShell | |
take_focus |
|
С: 2.8
gtk_menu_shell_get_take_focus ()
gboolean
gtk_menu_shell_get_take_focus (GtkMenuShell *menu_shell); Возвращает TRUE , если оболочка меню получит фокус клавиатуры при открытии.
Параметры
menu_shell | оболочка GtkMenuShell |
Возвращаемое значение
TRUE , если оболочка меню получит фокус клавиатуры при открытии.
С: 2.8
gtk_menu_shell_get_selected_item ()
GtkWidget *
gtk_menu_shell_get_selected_item (GtkMenuShell *menu_shell); Возвращает текущий выбранный элемент.
Параметры
menu_shell |
Возвращаемое значение
текущий выбранный элемент.
[transfer none]
С: 3.0
gtk_menu_shell_get_parent_shell ()
GtkWidget *
gtk_menu_shell_get_parent_shell (GtkMenuShell *menu_shell); Возвращает родительское меню.
Родительское меню подменю — это GtkMenu или GtkMenuBar, из которого оно было открыто.
Параметры
menu_shell |
С: 3.0
gtk_menu_shell_bind_model ()
void gtk_menu_shell_bind_model (GtkMenuShell *menu_shell,GMenuModel *model,const gchar *action_namespace,gboolean with_separators);
Устанавливает связь между GtkMenuShell и GMenuModel.
Содержимое shell удаляется и затем заполняется элементами меню в соответствии с model . При изменении model , shell обновляется. Вызов этой функции дважды для shell с разными model приведет к замене первой привязки на привязку к новой модели. Если model — NULL, то любая предыдущая привязка разрывается, и все дочерние элементы удаляются.
with_separators определяет, нужно ли вставлять разделители между элементами верхнего уровня (например, разделами). Обычно это желательно для меню, но не имеет смысла для меню-строки.
Если action_namespace не NULL, то эффект такой, как будто все действия, упомянутые в model, имеют имена, префиксрованные с именем пространства имён, плюс точка. Например, если упомянуто действие «выход» и action_namespace — «приложение», то эффективное имя действия — «приложение.выход».
Эта функция использует GtkActionable для определения имени действия и целевых значений для созданных элементов меню. Если вы хотите использовать группу действий отличную от «приложение» и «окно», или если вы хотите использовать GtkMenuShell вне GtkApplicationWindow, то вам нужно будет прикрепить свою собственную группу действий к иерархии виджетов, используя gtk_widget_insert_action_group(). Например, если вы создали группу с действием «выход» и вставили её с именем «mygroup», то вы будете использовать имя действия «mygroup.выход» в вашем GMenuModel.
В большинстве случаев вам будет лучше использовать gtk_menu_new_from_model() или gtk_menu_bar_new_from_model(), или просто передать GMenuModel в gtk_application_set_app_menu() или gtk_application_set_menubar().
Параметры
menu_shell | ||
model | the GMenuModel to bind to или | [allow-none] |
action_namespace | имя пространства имён для действий в | [allow-none] |
with_separators |
|
С: 3.6
Типы и значения
struct GtkMenuShell
struct GtkMenuShell;
перечисление GtkMenuDirectionType
Перечисление, представляющее направленное перемещение в меню.
Члены
GTK_MENU_DIR_PARENT | К родительскому меню | |
GTK_MENU_DIR_CHILD | К подменю, если оно есть, связанному с элементом | |
GTK_MENU_DIR_NEXT | К следующему элементу меню | |
GTK_MENU_DIR_PREV | К предыдущему элементу меню |
Подробное описание свойств
Свойство “take-focus”
“take-focus” gboolean
Булево значение, определяющее, захватывает ли меню и его подменю фокус клавиатуры. См. gtk_menu_shell_set_take_focus() и gtk_menu_shell_get_take_focus().
Владелец: GtkMenuShell
Флаги: Чтение / Запись
Значение по умолчанию: TRUE
С: 2.8
Подробности сигналов
Сигнал “activate-current”
void user_function (GtkMenuShell *menushell, gboolean force_hide, gpointer user_data)
Сигнал действия, активирующий текущий пункт меню в оболочке меню.
Параметры
menushell | объект, получивший сигнал | |
force_hide | если | |
user_data | данные пользователя, установленные при подключении обработчика сигнала. |
Флаги: Действие
Сигнал “cancel”
void user_function (GtkMenuShell *menushell, gpointer user_data)
Сигнал действия, отменяющий выбор в оболочке меню. Вызывает отправку сигнала «selection-done».
Параметры
menushell | объект, получивший сигнал | |
user_data | данные пользователя, установленные при подключении обработчика сигнала. |
Флаги: Действие
Сигнал “cycle-focus”
void user_function (GtkMenuShell *menushell, GtkDirectionType direction, gpointer user_data)
Сигнал сочетания клавиш, перемещающий фокус в заданном direction .
Параметры
menushell | объект, получивший сигнал | |
direction | направление циклического перемещения | |
user_data | данные пользователя, установленные при подключении обработчика сигнала. |
Флаги: Действие
Сигнал “deactivate”
void user_function (GtkMenuShell *menushell, gpointer user_data)
Этот сигнал генерируется при деактивации оболочки меню.
Параметры
menushell | объект, получивший сигнал | |
user_data | данные пользователя, установленные при подключении обработчика сигнала. |
Флаги: Выполнить сначала
Сигнал “insert”
void user_function (GtkMenuShell *menu_shell, GtkWidget *child, int position, gpointer user_data)
Сигнал ::insert генерируется при добавлении нового GtkMenuItem в GtkMenuShell. Вместо GtkContainer::add используется отдельный сигнал из-за необходимости дополнительного параметра position.
Обратным сигналом для этого сигнала является GtkContainer::removed.
Параметры
menu_shell | объект, на котором генерируется сигнал | |
child | вставляемый GtkMenuItem | |
position | позиция вставки | |
user_data | данные пользователя, установленные при подключении обработчика сигнала. |
Флаги: Выполнить сначала
С: 3.2
Сигнал “move-current”
void user_function (GtkMenuShell *menushell, GtkMenuDirectionType direction, gpointer user_data)
Сигнал сочетания клавиш, перемещающий текущий пункт меню в направлении, указанном параметром direction .
Параметры
menushell | объект, получивший сигнал | |
direction | направление перемещения | |
user_data | данные пользователя, установленные при подключении обработчика сигнала. |
Флаги: Действие
Сигнал “move-selected”
gboolean user_function (GtkMenuShell *menu_shell, int distance, gpointer user_data)
Сигнал ::move-selected генерируется для перемещения выделения на другой элемент.
Параметры
menu_shell | объект, на котором генерируется сигнал | |
distance | +1 для перемещения к следующему элементу, -1 для перемещения к предыдущему | |
user_data | данные пользователя, установленные при подключении обработчика сигнала. |
Возвращаемое значение
TRUE для остановки генерации сигнала, FALSE для продолжения
Флаги: Выполнить последним
С: 2.12
Сигнал “selection-done”
void user_function (GtkMenuShell *menushell, gpointer user_data)
Этот сигнал генерируется при завершении выбора в оболочке меню.
Параметры
menushell | объект, получивший сигнал | |
user_data | данные пользователя, установленные при подключении обработчика сигнала. |
Флаги: Выполнить сначала
© 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/GtkMenuShell.html