package main import ( "fmt" "os" "github.com/subgraph/fw-daemon/sgfw" "github.com/gotk3/gotk3/glib" "github.com/gotk3/gotk3/gtk" ) func failDialog(parent *gtk.Window, format string, args ...interface{}) { d := gtk.MessageDialogNew(parent, 0, gtk.MESSAGE_ERROR, gtk.BUTTONS_CLOSE, format, args...) d.Run() os.Exit(1) } func activate(app *gtk.Application) { win := app.GetActiveWindow() if win != nil { win.Present() return } var swRulesPermanent *gtk.ScrolledWindow var swRulesSession *gtk.ScrolledWindow var swRulesSystem *gtk.ScrolledWindow b := newBuilder("Dialog") b.getItems( "window", &win, "swRulesPermanent", &swRulesPermanent, "swRulesSession", &swRulesSession, "swRulesSystem", &swRulesSystem, ) //win.SetIconName("security-high-symbolic") win.SetIconName("security-medium") boxPermanent, _ := gtk.ListBoxNew() swRulesPermanent.Add(boxPermanent) boxSession, _ := gtk.ListBoxNew() swRulesSession.Add(boxSession) boxSystem, _ := gtk.ListBoxNew() swRulesSystem.Add(boxSystem) dbus, err := newDbusObject() if err != nil { failDialog(win, "Failed to connect to dbus system bus: %v", err) } rlPermanent := newRuleList(dbus, win, boxPermanent) if _, err := dbus.isEnabled(); err != nil { failDialog(win, "Unable is connect to firewall daemon. Is it running?") } rlPermanent.loadRules(sgfw.RULE_MODE_PERMANENT) rlSession := newRuleList(dbus, win, boxSession) if _, err := dbus.isEnabled(); err != nil { failDialog(win, "Unable is connect to firewall daemon. Is it running?") } rlSession.loadRules(sgfw.RULE_MODE_SESSION) rlSystem := newRuleList(dbus, win, boxSystem) if _, err := dbus.isEnabled(); err != nil { failDialog(win, "Unable is connect to firewall daemon. Is it running?") } rlSystem.loadRules(sgfw.RULE_MODE_SYSTEM) loadConfig(win, b, dbus) app.AddWindow(win) win.ShowAll() } func main() { app, err := gtk.ApplicationNew("com.subgraph.Firewall.settings", glib.APPLICATION_FLAGS_NONE) if err != nil { panic(fmt.Sprintf("gtk.ApplicationNew() failed: %v", err)) } app.Connect("activate", activate) app.Run(os.Args) }