aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/ui/managewindow.go
diff options
context:
space:
mode:
Diffstat (limited to 'ui/managewindow.go')
-rw-r--r--ui/managewindow.go57
1 files changed, 44 insertions, 13 deletions
diff --git a/ui/managewindow.go b/ui/managewindow.go
index b13e0afd..7f0bd608 100644
--- a/ui/managewindow.go
+++ b/ui/managewindow.go
@@ -12,7 +12,7 @@ import (
)
type ManageTunnelsWindow struct {
- *walk.MainWindow
+ walk.FormBase
tabs *walk.TabWidget
tunnelsPage *TunnelsPage
@@ -22,28 +22,36 @@ type ManageTunnelsWindow struct {
tunnelChangedCB *service.TunnelChangeCallback
}
+const (
+ manageWindowWindowClass = "WireGuard UI - Manage Tunnels"
+ selectCorrectTabMsg = win.WM_USER + 8993
+)
+
+func init() {
+ walk.MustRegisterWindowClass(manageWindowWindowClass)
+}
+
func NewManageTunnelsWindow() (*ManageTunnelsWindow, error) {
var err error
- var disposables walk.Disposables
- defer disposables.Treat()
+ font, err := walk.NewFont("Segoe UI", 9, 0)
+ if err != nil {
+ return nil, err
+ }
- mtw := &ManageTunnelsWindow{}
+ mtw := new(ManageTunnelsWindow)
+ mtw.SetName("WireGuard")
- mtw.MainWindow, err = walk.NewMainWindowWithName("WireGuard")
+ err = walk.InitWindow(mtw, nil, manageWindowWindowClass, win.WS_OVERLAPPEDWINDOW, win.WS_EX_CONTROLPARENT)
if err != nil {
return nil, err
}
- disposables.Add(mtw)
+ mtw.SetPersistent(true)
if icon, err := loadLogoIcon(mtw.DPI() / 3); err == nil { //TODO: calculate DPI dynamically
mtw.SetIcon(icon)
}
mtw.SetTitle("WireGuard")
- font, err := walk.NewFont("Segoe UI", 9, 0)
- if err != nil {
- return nil, err
- }
mtw.AddDisposable(font)
mtw.SetFont(font)
mtw.SetSize(walk.Size{640, 480})
@@ -77,8 +85,6 @@ func NewManageTunnelsWindow() (*ManageTunnelsWindow, error) {
}
mtw.tabs.Pages().Add(mtw.logPage.TabPage)
- disposables.Spare()
-
mtw.tunnelChangedCB = service.IPCClientRegisterTunnelChange(mtw.onTunnelChange)
globalState, _ := service.IPCClientGlobalState()
mtw.onTunnelChange(nil, service.TunnelUnknown, globalState, nil)
@@ -91,7 +97,7 @@ func (mtw *ManageTunnelsWindow) Dispose() {
mtw.tunnelChangedCB.Unregister()
mtw.tunnelChangedCB = nil
}
- mtw.MainWindow.Dispose()
+ mtw.FormBase.Dispose()
}
func (mtw *ManageTunnelsWindow) onTunnelChange(tunnel *service.Tunnel, state service.TunnelState, globalState service.TunnelState, err error) {
@@ -122,3 +128,28 @@ func (mtw *ManageTunnelsWindow) UpdateFound() {
mtw.tabs.Pages().Add(updatePage.TabPage)
}
}
+
+func (mtw *ManageTunnelsWindow) WndProc(hwnd win.HWND, msg uint32, wParam, lParam uintptr) uintptr {
+ switch msg {
+ case win.WM_QUERYENDSESSION:
+ if lParam == win.ENDSESSION_CLOSEAPP {
+ return win.TRUE
+ }
+ case win.WM_ENDSESSION:
+ if lParam == win.ENDSESSION_CLOSEAPP && wParam == 1 {
+ walk.App().Exit(198)
+ }
+ case selectCorrectTabMsg:
+ if !mtw.Visible() {
+ mtw.tunnelsPage.listView.SelectFirstActiveTunnel()
+ if mtw.tabs.Pages().Len() != 3 {
+ mtw.tabs.SetCurrentIndex(0)
+ }
+ }
+ if mtw.tabs.Pages().Len() == 3 {
+ mtw.tabs.SetCurrentIndex(2)
+ }
+ }
+
+ return mtw.FormBase.WndProc(hwnd, msg, wParam, lParam)
+}