Spec-Zone.ru › GTK 3.20

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>

Описание

Класс GtkMenuShell — абстрактный базовый класс, используемый для получения подклассов GtkMenu и GtkMenuBar.

Класс GtkMenuShell — это контейнер объектов GtkMenuItem, организованных в список, по которому пользователь может перемещаться, выбирать и активировать их для выполнения функций приложения. Объект GtkMenuItem может иметь связанное с ним подменю, что позволяет создавать вложенные иерархические меню.

Терминология

Элемент меню может быть «выбран», это означает, что он отображается в состоянии выделения, и если у него есть подменю, это подменю будет открыто.

Меню «активно», когда оно отображается на экране, и пользователь выбирает элементы из него. Меню в строке меню не активны до тех пор, пока пользователь не щелкнет по одному из элементов меню. Когда меню активно, наведение курсора мыши на подменю откроет его.

Также существует понятие текущего меню и текущего элемента меню. Текущий элемент меню — это выделенный элемент меню, который находится в самой нижней части иерархии. (В каждом активном объекте меню не обязательно есть выделенный элемент меню, но если он есть, то в родительском объекте меню также должен быть выделенный элемент меню.) Текущее меню — это меню, которое содержит текущий элемент меню. Оно всегда имеет захваченную фокус и получает все нажатия клавиш.

Функции

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

Позиция в списке элементов, куда добавляется child. Позиции нумеруются от 0 до n-1.

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

если TRUE, поиск первого выбираемого элемента меню, в противном случае ничего не выбирается, если первый элемент не активен. Должно быть FALSE, если меню первоначально открывается.

С версии: 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

если TRUE, принудительно деактивирует оболочку меню после активации элемента меню

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

TRUE, если оболочка меню должна получить фокус клавиатуры при открытии

С версии: 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

a GtkMenuShell

Возвращаемое значение

текущий выбранный элемент.

[transfer none]

С: 3.0

gtk_menu_shell_get_parent_shell ()

GtkWidget *
gtk_menu_shell_get_parent_shell (GtkMenuShell *menu_shell);

Получение родительского меню.

Родительское меню подменю — это GtkMenu или GtkMenuBar, из которого оно было открыто.

Параметры

menu_shell

a GtkMenuShell

Возвращаемое значение

родительское GtkMenuShell.

[transfer none]

С: 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 — «app», то эффективное имя действия — «app.выход».

Эта функция использует GtkActionable для определения имени действия и целевых значений созданных элементов меню. Если требуется использовать группу действий, отличную от «app» и «win», или если требуется использовать GtkMenuShell вне GtkApplicationWindow, то необходимо подключить собственную группу действий к иерархии виджетов с помощью gtk_widget_insert_action_group(). Например, если создана группа с действием «выход» и вставлена с именем «mygroup», то в вашем GMenuModel следует использовать имя действия «mygroup.выход».

В большинстве случаев вы можете использовать gtk_menu_new_from_model() или gtk_menu_bar_new_from_model(), или просто передать GMenuModel в gtk_application_set_app_menu() или gtk_application_set_menubar().

Параметры

menu_shell

a GtkMenuShell

model

модель GMenuModel для привязки или NULL для удаления привязки.

[allow-none]

action_namespace

пространство имен действий в model.

[allow-none]

with_separators

TRUE, если для элементов верхнего уровня в shell должны быть разделители.

С: 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().

Флаги: Чтение / Запись

Значение по умолчанию: TRUE

С: 2.8

Подробности сигналов

Сигнал “activate-current”

void
user_function (GtkMenuShell *menushell,
               gboolean      force_hide,
               gpointer      user_data)

Сигнал действия, активирующий текущую пунктом меню в оболочке меню.

Параметры

menushell

объект, получивший сигнал

force_hide

если TRUE, скрыть меню после активации пункта меню

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,
               gint          position,
               gpointer      user_data)

Сигнал ::insert генерируется при добавлении нового GtkMenuItem в GtkMenuShell. Используется отдельный сигнал вместо GtkContainer::add из-за необходимости дополнительного параметра позиции.

Обратным сигналом является 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,
               gint          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.20/GtkMenuShell.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API