GtkApplication
GtkApplication — Класс приложения
Функции
Свойства
| GtkWindow * | активное-окно | Чтение |
| GMenuModel * | меню-приложения | Чтение/Запись |
| GMenuModel * | строка-меню | Чтение/Запись |
| gboolean | зарегистрировать-сессию | Чтение/Запись |
Сигналы
Типы и значения
| 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 или резервное копирование диска. Менеджер сессий может не учитывать блокировку, но можно ожидать, что он проинформирует пользователя о негативных последствиях завершения сессии, когда блокировки присутствуют.
Функции
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 | ||
window |
С: 3.0
gtk_application_remove_window ()
void gtk_application_remove_window (GtkApplication *application,GtkWindow *window);
Удаляет окно из application .
Если window принадлежит application, то этот вызов эквивалентен установке свойства “application” для window на NULL.
Приложение может прекратить работу в результате вызова этой функции.
Параметры
application | ||
window |
С: 3.0
gtk_application_get_windows ()
GList *
gtk_application_get_windows (GtkApplication *application); Возвращает список GtkWindows, связанных с application .
Список отсортирован по последнему активированному окну, так что первый элемент — это текущее активное окно. (Полезно для выбора родительского окна для транзитивного окна.)
Возвращаемый список не должен изменяться. Он будет оставаться действительным до следующего изменения фокуса или создания/удаления окна.
Параметры
application |
С: 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 | ||
id | идентификационный номер |
С: 3.6
gtk_application_get_active_window ()
GtkWindow *
gtk_application_get_active_window (GtkApplication *application); Возвращает активное окно для приложения.
Активное окно — это последнее окно, которое получило фокус (в рамках приложения). Это окно может не иметь фокуса в данный момент, если им пользуется другое приложение — это просто последнее окно, получившее фокус в этом приложении.
Параметры
application |
Возвращает
активное окно.
[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 | [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, возвращённый функцией |
С: 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 | ||
app_menu | a GMenuModel, или | [allow-none] |
С версии: 3.4
gtk_application_get_menubar ()
GMenuModel *
gtk_application_get_menubar (GtkApplication *application); Возвращает модель меню, которая была установлена с помощью gtk_application_set_menubar().
Параметры
application |
Возвращает
меню для окон application.
[transfer none]
С версии: 3.4
gtk_application_set_menubar ()
void gtk_application_set_menubar (GtkApplication *application,GMenuModel *menubar);
Устанавливает или отменяет строку меню для окон application.
Это строка меню в традиционном понимании.
Это можно сделать только в первичном экземпляре приложения, после его регистрации. “startup” — подходящее место для этого вызова.
В зависимости от среды рабочего стола, это может появиться вверху каждого окна или вверху экрана. В некоторых средах, если установлены как меню приложения, так и строка меню, меню приложения будет представлено как первый элемент строки меню. Другие среды обрабатывают эти два элемента как совершенно отдельные — например, меню приложения может быть отображено оболочкой рабочего стола, в то время как строка меню (если установлена) остаётся в каждом отдельном окне.
Используйте базовый интерфейс GActionMap, чтобы добавить действия, чтобы реагировать на выбор пользователем этих пунктов меню.
Параметры
application | ||
menubar | a GMenuModel, или | [allow-none] |
С версии: 3.4
gtk_application_get_menu_by_id ()
GMenu * gtk_application_get_menu_by_id (GtkApplication *application,const gchar *id);
Получает меню из автоматически загруженных ресурсов. См. Автоматические ресурсы для получения дополнительной информации.
Параметры
application | ||
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 | ||
accelerator | строка ускорителя | |
action_name | имя действия для запуска | |
parameter | параметр, передаваемый при запуске действия, или | [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 | ||
action_name | имя действия для запуска | |
parameter | параметр, передаваемый при запуске действия, или | [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 | список акселераторов в формате, понятном | [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 | акселератор, который может быть проанализирован с помощью |
С версии: 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);
};
Члены
| Сигнал, излучаемый, когда окно GtkWindow добавлено в приложение через | |
| Сигнал, излучаемый, когда окно GtkWindow удалено из приложения, либо как побочный эффект уничтожения, либо явно с помощью |
перечисление 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 для строковой панели.
Флаги: Чтение / Запись
Подробности сигналов
Сигнал “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