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 () |
| GMenuModel * | gtk_application_get_menubar () |
| void | gtk_application_set_menubar () |
| GMenu * | gtk_application_get_menu_by_id () |
| char ** | gtk_application_list_action_descriptions () |
| char ** | gtk_application_get_accels_for_action () |
| void | gtk_application_set_accels_for_action () |
| char ** | gtk_application_get_actions_for_accel () |
Свойства
| GtkWindow * | active-window | Чтение |
| GMenuModel * | menubar | Чтение/Запись |
| gboolean | register-session | Чтение/Запись |
| gboolean | screensaver-active | Чтение |
Сигналы
| void | query-end | Выполняется первым |
| void | window-added | Выполняется первым |
| void | window-removed | Выполняется первым |
Типы и значения
| struct | GtkApplication |
| struct | GtkApplicationClass |
| перечисление | 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, а также к методам «активировать» и «открыть» GApplication.
Автоматические ресурсы
GtkApplication автоматически загрузит меню из ресурса GtkBuilder по пути "gtk/menus.ui", относительно базового пути к ресурсам приложения (см. g_application_set_resource_base_path()). Меню с ID "menubar" используется в качестве главного меню приложения. Дополнительные меню (в основном подменю) могут быть именованы и доступны через gtk_application_get_menu_by_id(), что позволяет динамически заполнять часть структуры меню.
Также можно вручную задать главное меню с помощью gtk_application_set_menubar().
GtkApplication также автоматически настроит путь поиска иконок для темы иконок по умолчанию, добавив "icons" к базовому пути к ресурсам. Это позволяет вашему приложению легко хранить свои значки в виде ресурсов. Дополнительную информацию см. в gtk_icon_theme_add_resource_path().
Если есть ресурс по пути "gtk/help-overlay.ui", который определяет GtkShortcutsWindow с ID "help_overlay", то GtkApplication ассоциирует экземпляр этого окна сопоставления клавиш с каждым GtkApplicationWindow и настраивает клавишу Ctrl-? для его открытия. Чтобы создать элемент меню, отображающий окно сопоставления клавиш, свяжите элемент с действием win.show-help-overlay.
Простое приложение
GtkApplication необязательно регистрируется в менеджере сессий пользователя (если задано свойство “register-session”) и предлагает различные функции, связанные с жизненным циклом сессии.
Приложение может блокировать различные способы завершения сессии с помощью функции gtk_application_inhibit(). Типичные примеры использования такого рода блокировки — длительные, непрерывные операции, такие как запись CD или резервное копирование диска. Менеджер сессий может не учитывать блокировку, но ожидается, что он проинформирует пользователя о негативных последствиях завершения сессии при наличии блокировок.
Функции
gtk_application_new ()
GtkApplication * gtk_application_new (const char *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().
Если идентификатор приложения не задан, некоторые функции (в основном, уникальность приложения) будут отключены.
Параметры
application_id | Идентификатор приложения. | [allow-none] |
flags | флаги приложения |
Возвращает
новый экземпляр GtkApplication
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 |
gtk_application_remove_window ()
void gtk_application_remove_window (GtkApplication *application,GtkWindow *window);
Удаляет окно из application .
Если window принадлежит application, то этот вызов эквивалентен установке свойства “application” окна window на NULL.
Приложение может завершить работу в результате вызова этой функции.
Параметры
application | экземпляр GtkApplication | |
window | экземпляр GtkWindow |
gtk_application_get_windows ()
GList *
gtk_application_get_windows (GtkApplication *application); Возвращает список GtkWindows, связанных с application .
Список отсортирован по последнему сфокусированному окну, так что первый элемент — это текущее активное окно. (Полезно для выбора родительского окна для временного окна.)
Возвращённый список не должен изменяться. Он останется действительным только до следующего изменения фокуса или создания или удаления окна.
Параметры
application | экземпляр GtkApplication |
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 или NULL, если такого окна нет.
[nullable][transfer none]
gtk_application_get_active_window ()
GtkWindow *
gtk_application_get_active_window (GtkApplication *application); Получает «активное» окно приложения.
Активное окно — это окно, которое было сфокусировано последним (в пределах приложения). Это окно может не иметь фокуса в данный момент, если им владеет другое приложение — это просто последнее сфокусированное окно в этом приложении.
Параметры
application | экземпляр GtkApplication |
Возвращает
активное окно или NULL, если такого нет.
[transfer none][nullable]
gtk_application_inhibit ()
guint gtk_application_inhibit (GtkApplication *application,GtkWindow *window,GtkApplicationInhibitFlags flags,const char *reason);
Сообщите диспетчеру сеанса, что определённые типы действий должны быть запрещены. Это не гарантируется на всех платформах и для всех типов действий.
Приложения должны вызывать этот метод, когда они начинают операцию, которую не следует прерывать, например, создание CD или DVD. Типы действий, которые могут быть заблокированы, определяются параметром flags. Когда приложение завершит операцию, оно должно вызвать gtk_application_uninhibit(), чтобы снять ингибитор. Обратите внимание, что приложение может иметь несколько ингибиторов, и все они должны быть удалены индивидуально. Ингибиторы также очищаются при выходе из приложения.
Приложения не должны ожидать, что они всегда смогут заблокировать действие. В большинстве случаев пользователю будет предоставлен вариант принудительного выполнения действия.
Причины должны быть краткими и по существу.
Если указан window, диспетчер сеанса может направить пользователя к этому окну, чтобы узнать больше о том, почему действие запрещено.
Параметры
application | приложение GtkApplication | |
window | окно GtkWindow или | [allow-none] |
flags | какие типы действий должны быть запрещены | |
reason | короткая, читаемая человеком строка, объясняющая, почему эти операции запрещены. | [allow-none] |
Возвращаемое значение
Не нулевое значение, которое используется для уникальной идентификации этого запроса. Оно должно быть использовано в качестве аргумента к gtk_application_uninhibit() для удаления запроса. Если платформа не поддерживает запрет или запрос не удался по какой-либо причине, возвращается 0.
gtk_application_uninhibit ()
void gtk_application_uninhibit (GtkApplication *application,guint cookie);
Удаляет ингибитор, который был установлен с помощью gtk_application_inhibit(). Ингибиторы также очищаются при выходе приложения.
Параметры
application | приложение GtkApplication | |
cookie | значение, возвращённое методом |
gtk_application_get_menubar ()
GMenuModel *
gtk_application_get_menubar (GtkApplication *application); Возвращает модель меню, которая была установлена с помощью gtk_application_set_menubar().
Параметры
application | приложение GtkApplication |
Возвращаемое значение
панель меню для окон application .
[nullable][transfer none]
gtk_application_set_menubar ()
void gtk_application_set_menubar (GtkApplication *application,GMenuModel *menubar);
Устанавливает или сбрасывает панель меню для окон application .
Это панель меню в традиционном понимании.
Это может быть выполнено только в основном экземпляре приложения после его регистрации. “Запуск” — хорошее место для этого.
В зависимости от среды рабочего стола это может отображаться в верхней части каждого окна или в верхней части экрана. В некоторых средах, если установлено как меню приложения, так и панель меню, меню приложения будет представлено как первый элемент панели меню. В других средах они рассматриваются как совершенно отдельные — например, меню приложения может отображаться оболочкой рабочего стола, а панель меню (если она установлена) остаётся в каждом отдельном окне.
Используйте базовый интерфейс GActionMap для добавления действий и для реагирования на выбор пользователем этих пунктов меню.
Параметры
application | приложение GtkApplication | |
menubar | модель меню GMenuModel или | [allow-none] |
gtk_application_get_menu_by_id ()
GMenu * gtk_application_get_menu_by_id (GtkApplication *application,const char *id);
Получает меню из автоматически загруженных ресурсов. Дополнительную информацию см. в разделе Автоматические ресурсы.
Параметры
application | приложение GtkApplication | |
id | идентификатор меню для поиска |
Возвращаемое значение
Получает меню с заданным идентификатором из автоматически загруженных ресурсов.
[nullable][transfer none]
gtk_application_list_action_descriptions ()
char **
gtk_application_list_action_descriptions
(GtkApplication *application); Выводит подробные имена действий, у которых есть связанные ускорители. См. gtk_application_set_accels_for_action().
Параметры
application | приложение GtkApplication |
Возвращаемое значение
массив строк, завершённый NULL, освобождается с помощью g_strfreev() при завершении.
[transfer full]
gtk_application_get_accels_for_action ()
char ** gtk_application_get_accels_for_action (GtkApplication *application,const char *detailed_action_name);
Получает ускорители, которые в настоящее время связаны с заданным действием.
Параметры
application | приложение GtkApplication | |
detailed_action_name | подробное имя действия, указывающее действие и цель для получения ускорителей |
Возвращаемое значение
ускорители для detailed_action_name, как массив, завершённый NULL. Освободить с помощью g_strfreev() при необходимости.
[transfer full]
gtk_application_set_accels_for_action ()
void gtk_application_set_accels_for_action (GtkApplication *application,const char *detailed_action_name,const char * 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] |
gtk_application_get_actions_for_accel ()
char ** gtk_application_get_actions_for_accel (GtkApplication *application,const char *accel);
Возвращает список действий (возможно, пустой), которым соответствует accel. Каждый элемент в списке — это подробное имя действия в обычном формате.
Это может быть полезно для определения, существует ли сочетание клавиш, чтобы предотвратить установку конфликтующего сочетания (например, из редактора сочетаний клавиш или системы плагинов). Обратите внимание, что наличие нескольких действий на одно сочетание клавиш может быть полезным в случаях, когда действия никогда не появляются в одном контексте.
В случае отсутствия действий для данного сочетания клавиш возвращается пустой массив. NULL никогда не возвращается.
Ошибка программиста — передача недопустимой строки сочетания клавиш. Если вы не уверены, сначала проверьте её с помощью gtk_accelerator_parse().
Параметры
application | приложение GtkApplication | |
accel | сочетание клавиш, которое может быть обработано |
Возвращаемое значение
NULL-завершающийся массив действий для accel .
[transfer full]
Типы и значения
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 из приложения, либо как побочный эффект уничтожения, либо явно через |
enum GtkApplicationInhibitFlags
Типы пользовательских действий, которые могут быть заблокированы с помощью gtk_application_inhibit().
Члены
GTK_APPLICATION_INHIBIT_LOGOUT | Запретить завершение пользовательской сессии с помощью выхода или выключения компьютера | |
GTK_APPLICATION_INHIBIT_SWITCH | Запретить переключение пользователей | |
GTK_APPLICATION_INHIBIT_SUSPEND | Запретить приостановку сессии или компьютера | |
GTK_APPLICATION_INHIBIT_IDLE | Запретить помечание сессии как неактивной (и, возможно, блокировку) |
Подробное описание свойств
Свойство “active-window”
“active-window” GtkWindow *
Окно, которое в последний раз имело фокус.
Владелец: GtkApplication
Флаги: Чтение
Свойство “menubar”
“menubar” GMenuModel *
GMenuModel для строки меню.
Владелец: GtkApplication
Флаги: Чтение / Запись
Свойство “register-session”
“register-session” gboolean
Установите это свойство в TRUE, чтобы зарегистрироваться в менеджере сессий. Это позволит GTK+ отслеживать состояние сессии (например, свойство “screensaver-active”).
Владелец: GtkApplication
Флаги: Чтение / Запись
Значение по умолчанию: FALSE
Свойство “screensaver-active”
“screensaver-active” gboolean
Это свойство равно TRUE, если GTK+ считает, что экранная заставка в данный момент активна. GTK+ отслеживает состояние сессии (включая это) только когда “register-session” установлено в TRUE.
Отслеживание состояния экранной заставки поддерживается в Linux.
Владелец: GtkApplication
Флаги: Чтение
Значение по умолчанию: FALSE
Подробности сигналов
Сигнал “query-end”
void user_function (GtkApplication *application, gpointer user_data)
Выдаётся, когда менеджер сессий собирается завершить сессию, только если “register-session” является TRUE. Приложения могут подключиться к этому сигналу и вызвать gtk_application_inhibit() с GTK_APPLICATION_INHIBIT_LOGOUT, чтобы отложить завершение сессии до сохранения состояния.
Параметры
application | приложение GtkApplication, которое выпустило сигнал | |
user_data | данные пользователя, установленные при подключении обработчика сигнала. |
Флаги: Выполнить сначала
Сигнал “window-added”
void user_function (GtkApplication *application, GtkWindow *window, gpointer user_data)
Выдаётся, когда GtkWindow добавляется в application с помощью gtk_application_add_window().
Параметры
application | приложение GtkApplication, которое выпустило сигнал | |
window | недавно добавленное окно GtkWindow | |
user_data | данные пользователя, установленные при подключении обработчика сигнала. |
Флаги: Выполнить сначала
Сигнал “window-removed”
void user_function (GtkApplication *application, GtkWindow *window, gpointer user_data)
Выдаётся, когда GtkWindow удаляется из application, либо как побочный эффект уничтожения, либо явно с помощью gtk_application_remove_window().
Параметры
application | приложение GtkApplication, которое выпустило сигнал | |
window | удаляемое окно GtkWindow | |
user_data | данные пользователя, установленные при подключении обработчика сигнала. |
Флаги: Выполнить сначала
© 2005–2020 The GNOME Project
Licensed under the GNU Lesser General Public License version 2.1 or later.
https://developer-old.gnome.org/gtk4/4.0/GtkApplication.html