aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/ui
diff options
context:
space:
mode:
Diffstat (limited to 'ui')
-rw-r--r--ui/managewindow.go37
1 files changed, 28 insertions, 9 deletions
diff --git a/ui/managewindow.go b/ui/managewindow.go
index 2c171bac..cd42e58a 100644
--- a/ui/managewindow.go
+++ b/ui/managewindow.go
@@ -23,7 +23,8 @@ type ManageTunnelsWindow struct {
logPage *LogPage
updatePage *UpdatePage
- tunnelChangedCB *service.TunnelChangeCallback
+ tunnelChangedCB *service.TunnelChangeCallback
+ taskbarButtonCreated bool
}
const (
@@ -32,6 +33,8 @@ const (
aboutWireGuardCmd = 0x37
)
+var taskbarButtonCreatedMsg = win.RegisterWindowMessage(windows.StringToUTF16Ptr("TaskbarButtonCreated"))
+
func init() {
walk.MustRegisterWindowClass(manageWindowWindowClass)
}
@@ -128,16 +131,22 @@ func (mtw *ManageTunnelsWindow) Dispose() {
mtw.FormBase.Dispose()
}
+func (mtw *ManageTunnelsWindow) updateProgressIndicator(globalState service.TunnelState) {
+ pi := mtw.ProgressIndicator()
+ if pi == nil {
+ return
+ }
+ switch globalState {
+ case service.TunnelStopping, service.TunnelStarting:
+ pi.SetState(walk.PIIndeterminate)
+ default:
+ pi.SetState(walk.PINoProgress)
+ }
+}
+
func (mtw *ManageTunnelsWindow) onTunnelChange(tunnel *service.Tunnel, state service.TunnelState, globalState service.TunnelState, err error) {
mtw.Synchronize(func() {
- if pi := mtw.ProgressIndicator(); pi != nil {
- switch globalState {
- case service.TunnelStopping, service.TunnelStarting:
- pi.SetState(walk.PIIndeterminate)
- default:
- pi.SetState(walk.PINoProgress)
- }
- }
+ mtw.updateProgressIndicator(globalState)
icon, err2 := iconWithOverlayForState(globalState, mtw.DPI()/3) //TODO: calculate DPI dynamically
if err2 == nil {
@@ -193,6 +202,16 @@ func (mtw *ManageTunnelsWindow) WndProc(hwnd win.HWND, msg uint32, wParam, lPara
}
raise(mtw.Handle())
return 0
+ case taskbarButtonCreatedMsg:
+ ret := mtw.FormBase.WndProc(hwnd, msg, wParam, lParam)
+ if !mtw.taskbarButtonCreated {
+ mtw.taskbarButtonCreated = true
+ globalState, err := service.IPCClientGlobalState()
+ if err == nil {
+ mtw.updateProgressIndicator(globalState)
+ }
+ }
+ return ret
}
return mtw.FormBase.WndProc(hwnd, msg, wParam, lParam)