You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
wireguird/main.go

154 lines
3.4 KiB

//go:generate go run ./gui/get/generator/generator.go -target=./gui/get
//go:generate go run github.com/UnnoTed/fileb0x fileb0x.toml
package main
import (
"os"
"github.com/UnnoTed/go-appindicator"
"github.com/UnnoTed/horizontal"
"github.com/UnnoTed/wireguird/gui"
"github.com/UnnoTed/wireguird/static"
"github.com/gotk3/gotk3/gdk"
"github.com/gotk3/gotk3/glib"
"github.com/gotk3/gotk3/gtk"
"github.com/rs/zerolog/log"
)
var win *gtk.ApplicationWindow
func main() {
log.Logger = log.Output(horizontal.ConsoleWriter{Out: os.Stderr})
log.Info().Uint("major", gtk.GetMajorVersion()).Uint("minor", gtk.GetMinorVersion()).Uint("micro", gtk.GetMicroVersion()).Msg("GTK Version")
if err := gui.Settings.Load(); err != nil {
log.Error().Err(err).Msg("error initial settings load")
}
const appID = "com.wireguard.desktop"
application, err := gtk.ApplicationNew(appID, glib.APPLICATION_FLAGS_NONE)
if err != nil {
log.Error().Err(err).Msg("error creating application")
return
}
application.Connect("activate", func() {
if err := createWindow(application); err != nil {
log.Error().Err(err).Msg("create window error")
}
})
os.Exit(application.Run(os.Args))
}
func createTray(application *gtk.Application) (*appindicator.Indicator, error) {
menu, err := gtk.MenuNew()
if err != nil {
return nil, err
}
menuShow, err := gtk.MenuItemNewWithLabel("Show")
if err != nil {
return nil, err
}
menuQuit, err := gtk.MenuItemNewWithLabel("Quit")
if err != nil {
return nil, err
}
indicator := appindicator.New(application.GetApplicationID(), "wireguard_off", appindicator.CategoryApplicationStatus)
indicator.SetIconThemePath("/opt/wireguird/Icon")
indicator.SetTitle("Wireguird")
// indicator.SetLabel("Wireguird", "")
indicator.SetStatus(appindicator.StatusActive)
indicator.SetMenu(menu)
menuShow.Connect("activate", func() {
win.Show()
// createWindow(application)
})
if err != nil {
return nil, err
}
menuQuit.Connect("activate", func() {
application.Quit()
})
menu.Add(menuShow)
menu.Add(menuQuit)
menu.ShowAll()
return indicator, nil
}
func createWindow(application *gtk.Application) error {
data, err := static.ReadFile("wireguird.glade")
if err != nil {
log.Error().Err(err).Msg("cant read wireguird.glade")
return err
}
b, err := gtk.BuilderNew()
b.AddFromString(string(data))
if err != nil {
log.Error().Err(err).Msg("error getting main glade file")
return err
}
wobj, err := b.GetObject("main_window")
if err != nil {
log.Error().Err(err).Msg("error getting main_window")
return err
}
var ok bool
win, ok = wobj.(*gtk.ApplicationWindow)
if !ok {
panic("not window")
}
application.AddWindow(win)
win.Connect("destroy", func() {
gtk.MainQuit()
})
// win.SetDecorated(false)
css, err := gtk.CssProviderNew()
if err != nil {
log.Error().Err(err).Msg("error creating css provider")
return err
}
css.LoadFromData(`
`)
// css.LoadFromPath("./style.css")
screen, err := gdk.ScreenGetDefault()
if err != nil {
log.Error().Err(err).Msg("error getting screen")
return err
}
gtk.AddProviderForScreen(screen, css, 1)
indicator, err := createTray(application)
if err != nil {
log.Error().Err(err).Msg("create tray error")
}
if err := gui.Create(application, b, win, indicator); err != nil {
log.Error().Err(err).Msg("error gui setup")
return err
}
if !gui.Settings.StartOnTray {
win.ShowAll()
}
win.SetTitle("Wireguird")
return nil
}