From cb9f45980daefcbf09f5211eaf4c3d42a96ceb4b Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Fri, 3 May 2019 11:26:36 +0200 Subject: ui: fix up confview ticker and list sync logic Signed-off-by: Jason A. Donenfeld --- ui/listview.go | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) (limited to 'ui/listview.go') diff --git a/ui/listview.go b/ui/listview.go index 4d196bba..78e53fda 100644 --- a/ui/listview.go +++ b/ui/listview.go @@ -68,10 +68,6 @@ func NewListView(parent walk.Container) (*ListView, error) { tv.SetDoubleBuffering(true) model := new(ListModel) - if model.tunnels, err = service.IPCClientTunnels(); err != nil { - return nil, err - } - tv.SetModel(model) tv.SetLastColumnStretched(true) tv.SetHeaderHidden(true) @@ -88,7 +84,6 @@ func NewListView(parent walk.Container) (*ListView, error) { tunnelsView.tunnelChangedCB = service.IPCClientRegisterTunnelChange(tunnelsView.onTunnelChange) tunnelsView.tunnelsChangedCB = service.IPCClientRegisterTunnelsChange(tunnelsView.onTunnelsChange) - tunnelsView.onTunnelsChange() return tunnelsView, nil } @@ -152,11 +147,15 @@ func (tv *ListView) onTunnelChange(tunnel *service.Tunnel, state service.TunnelS } func (tv *ListView) onTunnelsChange() { + tv.Load(true) +} + +func (tv *ListView) Load(asyncUI bool) { tunnels, err := service.IPCClientTunnels() if err != nil { return } - tv.Synchronize(func() { + doUI := func() { newTunnels := make(map[service.Tunnel]bool, len(tunnels)) oldTunnels := make(map[service.Tunnel]bool, len(tv.model.tunnels)) for _, tunnel := range tunnels { @@ -197,7 +196,12 @@ func (tv *ListView) onTunnelsChange() { tv.selectTunnel(firstTunnelName) } } - }) + } + if asyncUI { + tv.Synchronize(doUI) + } else { + doUI() + } } func (tv *ListView) selectTunnel(tunnelName string) { -- cgit v1.2.3-59-g8ed1b