Spec-Zone.ru › GTK 3.22

GtkApplication

GtkApplication — Класс приложения

Функции

GtkApplication * gtk_application_new ()
void gtk_application_add_window ()
void gtk_application_remove_window ()
GList * gtk_application_get_windows ()
GtkWindow * gtk_application_get_window_by_id ()
GtkWindow * gtk_application_get_active_window ()
guint gtk_application_inhibit ()
void gtk_application_uninhibit ()
gboolean gtk_application_is_inhibited ()
gboolean gtk_application_prefers_app_menu ()
GMenuModel * gtk_application_get_app_menu ()
void gtk_application_set_app_menu ()
GMenuModel * gtk_application_get_menubar ()
void gtk_application_set_menubar ()
GMenu * gtk_application_get_menu_by_id ()
void gtk_application_add_accelerator ()
void gtk_application_remove_accelerator ()
gchar ** gtk_application_list_action_descriptions ()
gchar ** gtk_application_get_accels_for_action ()
void gtk_application_set_accels_for_action ()
gchar ** gtk_application_get_actions_for_accel ()

Свойства

GtkWindow * активное-окно Чтение
GMenuModel * меню-приложения Чтение/Запись
GMenuModel * строка-меню Чтение/Запись
gboolean зарегистрировать-сессию Чтение/Запись

Сигналы

void окно-добавлено Выполняется первым
void окно-удалено Выполняется первым

Типы и значения

struct GtkApplication
struct GtkApplicationClass
enum GtkApplicationInhibitFlags

Иерархия объектов

    GObject
    ╰── GApplication
        ╰── GtkApplication

Реализованные интерфейсы

GtkApplication реализует GActionGroup и GActionMap.

Файлы заголовков

#include <gtk/gtk.h>

Описание

GtkApplication — это класс, который удобно обрабатывает многие важные аспекты приложения GTK+, не навязывая единой модели приложения.

В настоящее время GtkApplication обрабатывает инициализацию GTK+, уникальность приложения, управление сессией, предоставляет некоторую базовые возможности сценариев и интеграцию с оболочкой рабочего стола, экспортируя действия и меню, и управляет списком окон верхнего уровня, жизненный цикл которых автоматически связан с жизненным циклом вашего приложения.

Хотя GtkApplication работает хорошо с обычными GtkWindows, рекомендуется использовать его вместе с GtkApplicationWindow.

При включенных потоках GDK, GtkApplication получит блокировку GDK при вызове действий, поступающих из других процессов. Блокировка GDK не трогается при вызовах локальных действий. Для предсказуемого контекста вызова действий рекомендуется удерживать блокировку GDK при локальном вызове действий с помощью g_action_group_activate_action(). То же самое относится к действиям, связанным с GtkApplicationWindow, и к методам «activate» и «open» GApplication.

Автоматические ресурсы

GtkApplication автоматически загрузит меню из ресурса GtkBuilder по адресу "gtk/menus.ui", относительно базового пути ресурсов приложения (см. g_application_set_resource_base_path()). Меню с идентификатором "app-menu" используется в качестве меню приложения, а меню с идентификатором "menubar" используется в качестве строки меню. Дополнительные меню (в основном подменю) можно назвать и получить с помощью gtk_application_get_menu_by_id(), что позволяет динамически заполнять часть структуры меню.

Если присутствуют ресурсы "gtk/menus-appmenu.ui" или "gtk/menus-traditional.ui", то эти файлы будут использоваться вместо «gtk/menus.ui», в зависимости от значения gtk_application_prefers_app_menu(). Если присутствует ресурс "gtk/menus-common.ui", он также будет загружен. Это полезно для хранения элементов, на которые ссылаются как "gtk/menus-appmenu.ui", так и "gtk/menus-traditional.ui".

Также можно вручную задать меню с помощью gtk_application_set_app_menu() и gtk_application_set_menubar().

GtkApplication также автоматически настроит путь поиска значка для темы значков по умолчанию, добавив "icons" к базовому пути ресурсов. Это позволяет вашему приложению легко хранить значки в качестве ресурсов. Дополнительная информация в gtk_icon_theme_add_resource_path().

Если есть ресурс по адресу "gtk/help-overlay.ui", который определяет GtkShortcutsWindow с идентификатором "help_overlay", то GtkApplication связывает экземпляр этого окна с сокращениями с каждым GtkApplicationWindow и настраивает сочетания клавиш (Control-F1 и Control-?) для его открытия. Для создания пункта меню, отображающего окно с сокращениями, свяжите элемент с действием win.show-help-overlay.

Простое приложение

Пример простого приложения

GtkApplication необязательно регистрируется в менеджере сессий пользователя (если вы установили свойство “register-session”) и предлагает различные функции, связанные с жизненным циклом сессии.

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

См. также

HowDoI: Использование GtkApplication, Начало работы с GTK+: Основы

Функции

gtk_application_new ()

GtkApplication *
gtk_application_new (const gchar *application_id,
                     GApplicationFlags flags);

Создаёт новый экземпляр GtkApplication.

При использовании GtkApplication, нет необходимости вызывать gtk_init() вручную. Он вызывается, как только приложение зарегистрируется как основной экземпляр.

Конкретно, gtk_init() вызывается в обработчике по умолчанию для сигнала “startup”. Поэтому подклассы GtkApplication должны вызывать обработчик “startup” своих предков до использования API GTK+.

Обратите внимание, что аргументы командной строки не передаются в gtk_init(). Все функциональные возможности GTK+, доступные через аргументы командной строки, также могут быть реализованы путём установки соответствующих переменных среды, таких как G_DEBUG, поэтому это не должно быть большой проблемой. Если вам абсолютно необходимо поддерживать аргументы командной строки GTK+, вы можете явно вызвать gtk_init() перед созданием экземпляра приложения.

Если не NULL, идентификатор приложения должен быть допустимым. См. g_application_id_is_valid().

Если идентификатор приложения не задан, некоторые функции (в особенности уникальность приложения) будут отключены. Идентификатор приложения со значением null разрешён только в GTK+ 3.6 или более поздних версиях.

Параметры

application_id

Идентификатор приложения.

[allow-none]

flags

флаги приложения

Возвращает

новый экземпляр GtkApplication

С: 3.0

gtk_application_add_window ()

void
gtk_application_add_window (GtkApplication *application,
                            GtkWindow *window);

Добавляет окно в application .

Этот вызов может выполняться только после запуска application; как правило, новые окна приложения следует добавлять в ответ на эмиссию сигнала “activate”.

Этот вызов эквивалентен установке свойства “application” для window на application .

Обычно связь между приложением и окном сохраняется до уничтожения окна, но вы можете явно удалить её с помощью gtk_application_remove_window().

GTK+ будет поддерживать application пока у него есть окна.

Параметры

application

GtkApplication

window

GtkWindow

С: 3.0

gtk_application_remove_window ()

void
gtk_application_remove_window (GtkApplication *application,
                               GtkWindow *window);

Удаляет окно из application .

Если window принадлежит application, то этот вызов эквивалентен установке свойства “application” для window на NULL.

Приложение может прекратить работу в результате вызова этой функции.

Параметры

application

GtkApplication

window

GtkWindow

С: 3.0

gtk_application_get_windows ()

GList *
gtk_application_get_windows (GtkApplication *application);

Возвращает список GtkWindows, связанных с application .

Список отсортирован по последнему активированному окну, так что первый элемент — это текущее активное окно. (Полезно для выбора родительского окна для транзитивного окна.)

Возвращаемый список не должен изменяться. Он будет оставаться действительным до следующего изменения фокуса или создания/удаления окна.

Параметры

application

GtkApplication

Возвращает

GList GtkWindow.

[element-type GtkWindow][transfer none]

С: 3.0

gtk_application_get_window_by_id ()

GtkWindow *
gtk_application_get_window_by_id (GtkApplication *application,
                                  guint id);

Возвращает GtkApplicationWindow с заданным идентификатором.

Идентификатор GtkApplicationWindow может быть получен с помощью gtk_application_window_get_id().

Параметры

application

GtkApplication

id

идентификационный номер

Возвращает

окно с ID id , или NULL, если такого окна нет.

[nullable][transfer none]

С: 3.6

gtk_application_get_active_window ()

GtkWindow *
gtk_application_get_active_window (GtkApplication *application);

Возвращает активное окно для приложения.

Активное окно — это последнее окно, которое получило фокус (в рамках приложения). Это окно может не иметь фокуса в данный момент, если им пользуется другое приложение — это просто последнее окно, получившее фокус в этом приложении.

Параметры

application

GtkApplication

Возвращает

активное окно.

[transfer none]

С: 3.6

gtk_application_inhibit ()

guint
gtk_application_inhibit (GtkApplication *application,
                         GtkWindow *window,
                         GtkApplicationInhibitFlags flags,
                         const gchar *reason);

Сообщите менеджеру сеанса, что определённые типы действий должны быть запрещены. Это не гарантируется для всех платформ и всех типов действий.

Приложения должны вызывать этот метод, когда они начинают операцию, которая не должна прерываться, например, создание CD или DVD. Типы действий, которые могут быть заблокированы, указаны параметром flags. Когда приложение завершит операцию, оно должно вызвать gtk_application_uninhibit() для удаления ингибитора. Обратите внимание, что приложение может иметь несколько ингибиторов, и все они должны быть удалены индивидуально. Ингибиторы также очищаются при выходе из приложения.

Приложения не должны ожидать, что они всегда смогут заблокировать действие. В большинстве случаев пользователю будет предоставлен вариант принудительного выполнения действия.

Причины должны быть краткими и понятными.

Если window задано, менеджер сеанса может направить пользователя к этому окну, чтобы узнать больше о причинах запрета действия.

Параметры

application

приложение GtkApplication

window

окно GtkWindow или NULL.

[allow-none]

flags

типы действий, которые должны быть запрещены

reason

короткая, удобочитаемая строка, объясняющая, почему эти операции запрещены.

[allow-none]

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

ненулевое значение cookie, используемое для уникальной идентификации этого запроса. Оно должно использоваться в качестве аргумента к gtk_application_uninhibit() для удаления запроса. Если платформа не поддерживает ингибирование или запрос не удался по какой-либо причине, возвращается 0.

С: 3.4

gtk_application_uninhibit ()

void
gtk_application_uninhibit (GtkApplication *application,
                           guint cookie);

Удаляет ингибитор, установленный с помощью gtk_application_inhibit(). Ингибиторы также очищаются при выходе из приложения.

Параметры

application

приложение GtkApplication

cookie

cookie, возвращённый функцией gtk_application_inhibit()

С: 3.4

gtk_application_is_inhibited ()

gboolean
gtk_application_is_inhibited (GtkApplication *application,
                              GtkApplicationInhibitFlags flags);

Определяет, запрещены ли какие-либо действия, указанные в flags (возможно, другим приложением).

Параметры

application

приложение GtkApplication

flags

какие типы действий следует запросить

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

TRUE, если какие-либо из действий, указанных в flags, запрещены

С: 3.4

gtk_application_prefers_app_menu ()

gboolean
gtk_application_prefers_app_menu (GtkApplication *application);

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

Если эта функция возвращает TRUE, приложение должно вызвать gtk_application_set_app_menu() с содержимым меню приложения, которое будет отображаться средой рабочего стола. Если возвращает FALSE, следует рассмотреть альтернативный подход, например, использование строчной панели меню.

Возвращаемое значение этой функции является чисто рекомендательным, и вы можете его игнорировать. Если вы вызываете gtk_application_set_app_menu(), даже если среда рабочего стола не поддерживает меню приложения, будет предоставлен запасной вариант.

Приложения также могут не устанавливать меню приложения, даже если среда рабочего стола хочет его отобразить. В этом случае среда рабочего стола (например, GNOME) также создаст запасной вариант (меню только с элементом "Выход").

Возвращаемое значение этой функции никогда не меняется. После того, как она вернёт определённое значение, гарантируется, что она всегда будет возвращать то же самое значение.

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

Эта функция вернёт FALSE на Mac OS, и будет автоматически создано стандартное меню приложения с обычным содержимым, типичным для большинства приложений Mac OS. Если вы всё равно вызовете gtk_application_set_app_menu(), это меню будет заменено вашим собственным.

Параметры

application

приложение GtkApplication

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

TRUE, если нужно установить меню приложения

С: 3.14

gtk_application_get_app_menu ()

GMenuModel *
gtk_application_get_app_menu (GtkApplication *application);

Возвращает модель меню, установленную с помощью gtk_application_set_app_menu().

Параметры

application

приложение GtkApplication

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

меню приложения application или NULL, если меню приложения не установлено.

[transfer none][nullable]

С: 3.4

gtk_application_set_app_menu ()

void
gtk_application_set_app_menu (GtkApplication *application,
                              GMenuModel *app_menu);

Устанавливает или отменяет меню приложения для application.

Это можно сделать только в первичном экземпляре приложения, после его регистрации. “startup” — подходящее место для этого вызова.

Меню приложения — это единственное меню, содержащее пункты, которые обычно влияют на приложение в целом, а не действуют на конкретное окно или документ. Например, в меню приложения вы ожидаете увидеть «Настройки» или «Выход», но не «Сохранить» или «Печать».

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

Используйте базовый интерфейс GActionMap, чтобы добавить действия, чтобы реагировать на выбор пользователем этих пунктов меню.

Параметры

application

a GtkApplication

app_menu

a GMenuModel, или NULL.

[allow-none]

С версии: 3.4

gtk_application_get_menubar ()

GMenuModel *
gtk_application_get_menubar (GtkApplication *application);

Возвращает модель меню, которая была установлена с помощью gtk_application_set_menubar().

Параметры

application

a GtkApplication

Возвращает

меню для окон application.

[transfer none]

С версии: 3.4

gtk_application_set_menubar ()

void
gtk_application_set_menubar (GtkApplication *application,
                             GMenuModel *menubar);

Устанавливает или отменяет строку меню для окон application.

Это строка меню в традиционном понимании.

Это можно сделать только в первичном экземпляре приложения, после его регистрации. “startup” — подходящее место для этого вызова.

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

Используйте базовый интерфейс GActionMap, чтобы добавить действия, чтобы реагировать на выбор пользователем этих пунктов меню.

Параметры

application

a GtkApplication

menubar

a GMenuModel, или NULL.

[allow-none]

С версии: 3.4

gtk_application_get_menu_by_id ()

GMenu *
gtk_application_get_menu_by_id (GtkApplication *application,
                                const gchar *id);

Получает меню из автоматически загруженных ресурсов. См. Автоматические ресурсы для получения дополнительной информации.

Параметры

application

a GtkApplication

id

идентификатор искомого меню

Возвращает

меню с заданным идентификатором из автоматически загруженных ресурсов.

[transfer none]

С версии: 3.14

gtk_application_add_accelerator ()

void
gtk_application_add_accelerator (GtkApplication *application,
                                 const gchar *accelerator,
                                 const gchar *action_name,
                                 GVariant *parameter);

gtk_application_add_accelerator устарел с версии 3.14 и не должен использоваться в новых проектах.

Используйте gtk_application_set_accels_for_action() вместо этого

Устанавливает ускоритель, который запустит указанное действие при нажатии сочетания клавиш, определённого в accelerator.

accelerator должно быть строкой, которую можно разобрать с помощью gtk_accelerator_parse(), например, "<Primary>q" или “<Control><Alt>p”.

action_name должно быть именем действия, как оно используется в меню приложения, т.е. действия, добавленные в приложение, обозначаются префиксом «app.», а действия, относящиеся к окну, — префиксом «win.».

GtkApplication также извлекает ускорители из атрибутов «accel» в GMenuModels, переданных в gtk_application_set_app_menu() и gtk_application_set_menubar(), что обычно удобнее, чем вызов этой функции для каждого ускорителя.

Параметры

application

a GtkApplication

accelerator

строка ускорителя

action_name

имя действия для запуска

parameter

параметр, передаваемый при запуске действия, или NULL, если действие не принимает параметр запуска.

[allow-none]

С версии: 3.4

gtk_application_remove_accelerator ()

void
gtk_application_remove_accelerator (GtkApplication *application,
                                    const gchar *action_name,
                                    GVariant *parameter);

gtk_application_remove_accelerator устарел с версии 3.14 и не должен использоваться в новых проектах.

Используйте gtk_application_set_accels_for_action() вместо этого

Удаляет ускоритель, ранее добавленный с помощью gtk_application_add_accelerator().

Параметры

application

a GtkApplication

action_name

имя действия для запуска

parameter

параметр, передаваемый при запуске действия, или NULL, если действие не принимает параметр запуска.

[allow-none]

С версии: 3.4

gtk_application_list_action_descriptions ()

gchar **
gtk_application_list_action_descriptions
                               (GtkApplication *application);

Перечисляет подробные имена действий, у которых есть связанные акселераторы. См. gtk_application_set_accels_for_action().

Параметры

application

приложение GtkApplication

Возвращает

массив строк, завершаемый NULL, освобождаемый с помощью g_strfreev() по завершении работы.

[transfer full]

С версии: 3.12

gtk_application_get_accels_for-action ()

gchar **
gtk_application_get_accels_for_action (GtkApplication *application,
                                       const gchar *detailed_action_name);

Возвращает акселераторы, в настоящее время связанные с данным действием.

Параметры

application

приложение GtkApplication

detailed_action_name

подробное имя действия, указывающее действие и цель для получения акселераторов

Возвращает

акселераторы для detailed_action_name, как массив, завершаемый NULL. Освободить с помощью g_strfreev(), когда больше не требуется.

[transfer full]

С версии: 3.12

gtk_application_set-accels-for-action ()

void
gtk_application_set_accels_for_action (GtkApplication *application,
                                       const gchar *detailed_action_name,
                                       const gchar * const *accels);

Устанавливает один или несколько акселераторов клавиатуры, которые будут вызывать данное действие. Первый элемент в accels будет основным акселератором, который может отображаться в пользовательском интерфейсе.

Чтобы удалить все акселераторы для действия, используйте пустой массив, завершаемый нулём, для accels.

Для detailed_action_name, см. g_action_parse_detailed_name() и g_action_print_detailed_name().

Параметры

application

приложение GtkApplication

detailed_action_name

подробное имя действия, указывающее действие и цель для связи с акселераторами

accels

список акселераторов в формате, понятном gtk_accelerator_parse().

[array zero-terminated=1]

С версии: 3.12

gtk_application_get_actions-for-accel ()

gchar **
gtk_application_get_actions_for_accel (GtkApplication *application,
                                       const gchar *accel);

Возвращает список действий (возможно, пустой), к которым относится accel. Каждый элемент списка — это подробное имя действия в стандартном формате.

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

В случае отсутствия действий для данного акселератора возвращается пустой массив. NULL никогда не возвращается.

Ошибка программиста заключается в передаче недопустимой строки акселератора. Если вы не уверены, сначала проверьте её с помощью gtk_accelerator_parse().

Параметры

application

приложение GtkApplication

accel

акселератор, который может быть проанализирован с помощью gtk_accelerator_parse()

Возвращает

массив действий, завершаемый NULL, для accel.

[transfer full]

С версии: 3.14

Типы и значения

struct GtkApplication

struct GtkApplication;

struct GtkApplicationClass

struct GtkApplicationClass {
  GApplicationClass parent_class;


  void (*window_added)   (GtkApplication *application,
                          GtkWindow      *window);
  void (*window_removed) (GtkApplication *application,
                          GtkWindow      *window);
};

Члены

window_added ()

Сигнал, излучаемый, когда окно GtkWindow добавлено в приложение через gtk_application_add_window().

window_removed ()

Сигнал, излучаемый, когда окно GtkWindow удалено из приложения, либо как побочный эффект уничтожения, либо явно с помощью gtk_application_remove_window().

перечисление GtkApplicationInhibitFlags

Типы пользовательских действий, которые могут быть заблокированы с помощью gtk_application_inhibit().

Члены

GTK_APPLICATION_INHIBIT_LOGOUT

Блокировка завершения сеанса пользователя путём выхода или выключения компьютера

GTK_APPLICATION_INHIBIT_SWITCH

Блокировка переключения пользователя

GTK_APPLICATION_INHIBIT_SUSPEND

Блокировка приостановки сеанса или компьютера

GTK_APPLICATION_INHIBIT_IDLE

Блокировка сеанса, помеченного как бездействующий (и, возможно, заблокированного)

С версии: 3.4

Подробное описание свойств

Свойство “active-window”

  “active-window”            GtkWindow *

Окно, которое последним получило фокус.

Флаги: Чтение

Свойство “app-menu”

  “app-menu”                 GMenuModel *

Модель меню приложения GMenuModel.

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

Свойство “menubar”

  “menubar”                  GMenuModel *

Модель меню GMenuModel для строковой панели.

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

Свойство “register-session”

  “register-session”         gboolean

Установите это свойство в TRUE для регистрации у менеджера сессий.

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

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

С версии: 3.4

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

Сигнал “window-added”

void
user_function (GtkApplication *application,
               GtkWindow      *window,
               gpointer        user_data)

Выдаётся, когда GtkWindow добавляется в application с помощью gtk_application_add_window().

Параметры

application

приложение GtkApplication, выпустившее сигнал

window

только что добавленное окно GtkWindow

user_data

данные пользователя, заданные при подключении обработчика сигнала.

Флаги: Выполнить сначала

С: 3.2

Сигнал “window-removed”

void
user_function (GtkApplication *application,
               GtkWindow      *window,
               gpointer        user_data)

Выдаётся, когда GtkWindow удаляется из application, либо как побочный эффект уничтожения, либо явно с помощью gtk_application_remove_window().

Параметры

application

приложение GtkApplication, выпустившее сигнал

window

удаляемое окно GtkWindow

user_data

данные пользователя, заданные при подключении обработчика сигнала.

Флаги: Выполнить сначала

С: 3.2

© 2005–2020 The GNOME Project
Licensed under the GNU Lesser General Public License version 2.1 or later.
https://developer.gnome.org/gtk3/3.22/GtkApplication.html

Spec-Zone.ru

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