Application lifecycle
main thread
The main function, and therefore the main loop,
should run on the main thread.
func init() {
// Ensure that the ui's main thread is
// locked to the main thread.
runtime.LockOSThread()
}
initialisation
Call gtk.Init (or gtk.InitCheck) before calling
any other gtk functions.
Typically the program’s command-line arguments will
be passed to gtk.Init.
gtk.Init(os.Args)
window creation
Most applications will create a window when initialising.
window := gtk.WindowNew(gtk.GTK_WINDOW_TOPLEVEL)
termination
If an application has only one window, then it might terminate when the window is closed.
// Connect to the window's "destroy" signal.
window.Widget().ConnectDestroy(func(_ *gtk.Widget) {
gtk.MainQuit()
})
main loop
To run the main loop, call gtk.Main.
The function will not return from the main loop
until gtk.MainQuit is called.
gtk.Main()
minimal application
Putting all of the above together yields a minimal application. A window is created, and the application will exit when the window is closed.
package main
import (
"github.com/pekim/gobbi/lib/gtk"
"os"
"runtime"
)
func init() {
runtime.LockOSThread()
}
func main() {
gtk.Init(os.Args)
window := gtk.WindowNew(gtk.GTK_WINDOW_TOPLEVEL)
window.Widget().ConnectDestroy(gtk.MainQuit)
window.Widget().ShowAll()
gtk.Main()
}
gtk.Application
A preferred approach to gtk application and window
management is to use gtk.Application.
The gtk_application
example illustrates this.