Spec-Zone.ru › GTK 3.20

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 * active-window Чтение
GMenuModel * app-menu Чтение / Запись
GMenuModel * menubar Чтение / Запись
gboolean register-session Чтение / Запись

Сигналы

void window-added Первое выполнение
void window-removed Первое выполнение

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

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 или выполнение резервного копирования диска. Менеджер сеансов может не учитывать блокиратор, но он может информировать пользователя о негативных последствиях завершения сеанса при наличии блокираторов.

См. также

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 или 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]

Возвращает

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

С: 3.4

gtk_application_uninhibit ()

void
gtk_application_uninhibit (GtkApplication *application,
                           guint cookie);

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

Параметры

application

приложение GtkApplication

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.

[transfer none]

С: 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

a GtkApplication

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

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

a GtkApplication

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

a 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

a GtkApplication

accel

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

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

a NULL-terminated array of actions for 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().

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 *

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

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

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

  “app-menu”                 GMenuModel *

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

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

Свойство “menubar”

  “menubar”                  GMenuModel *

GMenuModel для строчной панели меню.

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

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

  “register-session”         gboolean

Установите это свойство в TRUE, чтобы зарегистрироваться в менеджере сеансов.

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

Значение по умолчанию: ЛОЖЬ

С: 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.20/GtkApplication.html

Spec-Zone.ru

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