您的示例对我来说似乎是一个很好的开始,但我认为您应该添加一个应用程序 ID 和一些应用程序标志。
三个很好的资源是GTK+3 参考手册的 GtkApplication 文档、GNOME Wiki“HowDoI”部分的页面“使用 GtkApplication”和GIO 参考手册的 GApplication 文档。GApplication 或 Vala 绑定中的 GLib.Application 是 GtkApplication 的父类。
“HowDoI”页面建议:
GtkApplication 没有为你实现 main() 。你必须自己这样做。你的 main() 函数应该尽可能小,除了创建 GtkApplication 并运行它之外几乎什么都不做。“真正的工作”应该始终响应 GtkApplication 发出的信号来完成。
您main()
在 Genie 中的功能是:
init
new MyApplication().run( args )
这就像你能得到的一样简单。
“HowDoI”页面还建议:
当您的应用程序启动时,将触发启动信号。这使您有机会执行与显示新窗口没有直接关系的初始化任务。在此之后,根据应用程序的启动方式,下一步将调用 activate 或 open。
您没有使用示例执行任何启动任务,这很好。所以没有必要使用startup
信号,但是你activate
通过用def override activate ()
. activate
当 Gtk.Application 运行时,它实际上是默认信号,但是当设置适当的时候,可以发出替代信号ApplicatonFlags
。例如,如果HANDLES_OPEN
设置了标志,则open
如果存在未解析的命令行参数,则将发送信号。未解析的参数被视为文件名或 URI。默认标志是FLAGS_NONE
,稍后将在示例代码中明确说明。
GTK+3 参考手册中关于 GtkApplication 的部分指出:
目前,GtkApplication 处理 GTK+ 初始化、应用程序唯一性、会话管理,通过导出操作和菜单提供一些基本的脚本性和桌面外壳集成,并管理其生命周期自动与应用程序生命周期相关联的顶级窗口列表。 . 如果没有给出应用程序 ID,那么某些功能(最显着的应用程序唯一性)将被禁用。只有 GTK+ 3.6 或更高版本才允许使用空应用程序 ID。
应用程序 ID 应由至少两个用点分隔的名称组成。如果应用程序第二次运行,则第二个实例的窗口成为第一个应用程序的一部分,但随后关闭第二个应用程序实例。这是应用程序唯一性功能,可以使用ApplicationFlags.NON_UNIQUE
. 应用程序使用应用程序 ID 在会话总线上注册。如果您使用的是 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_all()
这会添加一个应用程序 ID 并使其ApplicationFlags
显式化。