GtkApplication
GtkApplication — Класс приложения
Функции
Свойства
| GtkWindow * | active-window | Чтение |
| GMenuModel * | app-menu | Чтение / Запись |
| GMenuModel * | menubar | Чтение / Запись |
| gboolean | register-session | Чтение / Запись |
Сигналы
Типы и значения
| 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_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 | экземпляр 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 |
С версии: 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 или 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 | [allow-none] | |
flags | типы действий, которые должны быть запрещены | |
reason | короткое, понятное пользователю сообщение, объясняющее, почему эти операции запрещены. | [allow-none] |
Возвращает
ненулевое значение, используемое для уникальной идентификации этого запроса. Оно должно использоваться в качестве аргумента для gtk_application_uninhibit() для удаления запроса. Если платформа не поддерживает ингибирование или запрос не удался по какой-либо причине, возвращается 0.
С: 3.4
gtk_application_uninhibit ()
void gtk_application_uninhibit (GtkApplication *application,guint cookie);
Удаляет ингибитор, установленный с помощью gtk_application_inhibit(). Ингибиторы также очищаются при выходе приложения.
Параметры
application | приложение GtkApplication | |
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.
[transfer none]
С: 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 |
Возвращаемое значение
a NULL-terminated array of strings, освобождаемый с помощью 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 | ||
detailed_action_name | подробное имя действия, указывающее действие и целевой объект для получения активаторов |
Возвращаемое значение
активаторы для detailed_action_name , как NULL-terminated array. Освобождайте с помощью 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 | ||
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 | ||
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 из приложения, либо как побочный эффект от уничтожения, либо явно через |
enum 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 *
Окно, которое последним получило фокус.
Флаги: Чтение
Подробности сигналов
Сигнал “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.20/GtkApplication.html