Вы пример выглядит довольно хорошее начало для меня, но я думаю, вы должны добавить ID приложения и некоторые флаги приложений.
Три полезных ресурса - это GTK+3 Reference Manual's documentation for GtkApplication, страница раздела «HowDoI» GNOME Wiki под названием "Using GtkApplication" и GIO Reference Manual's documentation for GApplication. GApplication или GLib.Application в привязке Vala, является родительским классом для GtkApplication.
На странице "HowDoI" советует:
GtkApplication не реализует основной() для вас. Вы должны сделать это сами. Ваша функция main() должна быть как можно меньше и делать почти ничего, кроме создания GtkApplication и запускать ее. «Реальная работа» всегда должна выполняться в ответ на сигналы, запускаемые GtkApplication.
Ваша main()
функция Genie является:
init
new MyApplication().run(args)
и это примерно так же просто, как вы можете получить.
На странице «HowDoI» также советует:
При запуске приложения, сигнал запуска будет уволен. Это дает вам возможность выполнять задачи инициализации, которые напрямую не связаны с отображением нового окна. После этого, в зависимости от того, как приложение запускается, активируется или открывается, будет вызываться дальше.
У вас нет заданий запуска с вашим примером, и это нормально. Поэтому нет необходимости использовать сигнал startup
, но вы используете сигнал activate
, переопределяя виртуальную функцию с помощью def override activate()
. activate
фактически является сигналом по умолчанию, когда запускается Gtk.Application, но могут быть выбраны альтернативные сигналы, когда установлены соответствующие ApplicatonFlags
. Например, если установлен флаг HANDLES_OPEN
, тогда сигнал open
будет отправлен, если есть аргументы командной строки, которые не были проанализированы. Непараметрированные аргументы считаются именами файлов или URI. Флаги по умолчанию: FLAGS_NONE
, и это будет сделано явно в примере кода позже.
раздел В GTK + 3 Справочное руководство по GtkApplication гласит:
В настоящее время GtkApplication обрабатывает GTK + инициализации, приложения уникальность, управление сеансами, предоставляет некоторые базовые создания сценариев и настольных оболочки интеграции экспортируя действия и меню и управляет список окон верхнего уровня, жизненный цикл которых автоматически привязан к жизненному циклу вашего приложения ... Если идентификатор приложения не задан, некоторые функции (в особенности уникальность приложения) будут отключены. Идентификатор нулевого приложения разрешен только с GTK + 3.6 или новее.
Идентификатор приложения должен состоять как минимум из двух имен, разделенных точкой. Если приложение запускается второй раз, то окно второго экземпляра становится частью первого приложения, но второй экземпляр приложения затем закрывается. Это уникальная функция приложения и может быть отключена с помощью ApplicationFlags.NON_UNIQUE
. Приложение регистрируется на шине сеанса, используя идентификатор приложения. Если вы используете Linux, вы можете использовать такой инструмент, как D-Feet, чтобы увидеть, как приложение появляется на шине сеанса, а также что происходит при повторном запуске приложения (вам нужно обновить представление).
Время для кода:
// compila con valac --pkg gtk+-3.0 nombre_archivo.gs
[indent=4]
uses Gtk
init
new MyApplication("org.genie.Example.SimpleGtkApplication",
ApplicationFlags.FLAGS_NONE
).run(args)
class MyApplication:Gtk.Application
construct(application_id:string, flags:ApplicationFlags)
if !id_is_valid(application_id)
error("application id %s is not valid", application_id)
this.application_id = application_id
this.flags = flags
def override activate()
var window = new Gtk.ApplicationWindow(this)
window.title = "Welcome to GNOME"
window.set_default_size(400, 400)
window.show()
Это добавляет идентификатор приложения и делает ApplicationFlags
явным.
Большое спасибо за ваш ответ. Ваш ответ помогает мне лучше понять это. Я продолжу практиковать с классом Gtk.Application в Genie. – Webierta