diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2019-04-29 21:01:57 +0200 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2019-04-29 21:01:57 +0200 |
commit | eb65b129a1c08cabaa59facfd39a051cb9b2ea65 (patch) | |
tree | f6a8ecfcfc647373f6a572ef8c305e34ef01d1ba /ui/tunnelsview.go | |
parent | ui: select newly created/edited tunnels (diff) | |
download | wireguard-windows-eb65b129a1c08cabaa59facfd39a051cb9b2ea65.tar.xz wireguard-windows-eb65b129a1c08cabaa59facfd39a051cb9b2ea65.zip |
ui: rework tunnel adding logic and fix bugs
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to 'ui/tunnelsview.go')
-rw-r--r-- | ui/tunnelsview.go | 30 |
1 files changed, 15 insertions, 15 deletions
diff --git a/ui/tunnelsview.go b/ui/tunnelsview.go index 58816d09..15dc22ca 100644 --- a/ui/tunnelsview.go +++ b/ui/tunnelsview.go @@ -7,6 +7,7 @@ package ui import ( "sort" + "strings" "github.com/lxn/walk" "golang.zx2c4.com/wireguard/windows/service" @@ -176,34 +177,33 @@ func (tv *TunnelsView) onTunnelsChange() { } } } - tunnelsAdded := 0 - lastTunnelName := "" + didAdd := false + firstTunnelName := "" for tunnel := range newTunnels { if !oldTunnels[tunnel] { + //TODO: use proper tunnel string sorting/comparison algorithm, as the other comments indicate too. + if len(firstTunnelName) == 0 || strings.Compare(firstTunnelName, tunnel.Name) > 0 { + firstTunnelName = tunnel.Name + } tv.model.tunnels = append(tv.model.tunnels, tunnel) - tunnelsAdded++ - lastTunnelName = tunnel.Name + didAdd = true } } - if tunnelsAdded > 0 { + if didAdd { tv.model.PublishRowsReset() tv.model.Sort(tv.model.SortedColumn(), tv.model.SortOrder()) - // If adding a tunnel for the first time when the previously were none, select it if len(tv.SelectedIndexes()) == 0 { - tv.selectTunnel(lastTunnelName) + tv.selectTunnel(firstTunnelName) } } }) } -// Tiny helper to select a tunnel by name. func (tv *TunnelsView) selectTunnel(tunnelName string) { - tv.Synchronize(func() { - for i, tunnel := range tv.model.tunnels { - if tunnel.Name == tunnelName { - tv.SetCurrentIndex(i) - break - } + for i, tunnel := range tv.model.tunnels { + if tunnel.Name == tunnelName { + tv.SetCurrentIndex(i) + break } - }) + } } |