aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/ui/confview.go
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2019-04-29 16:07:16 +0200
committerJason A. Donenfeld <Jason@zx2c4.com>2019-04-29 16:07:16 +0200
commit98b226b737693690306b2d74190118a501d4457f (patch)
tree81ec223697bff32606e1c7427b452faf8844ab0a /ui/confview.go
parentservice: pass global state with notification (diff)
downloadwireguard-windows-98b226b737693690306b2d74190118a501d4457f.tar.xz
wireguard-windows-98b226b737693690306b2d74190118a501d4457f.zip
ui: make IPC calls in go routines
Diffstat (limited to 'ui/confview.go')
-rw-r--r--ui/confview.go45
1 files changed, 31 insertions, 14 deletions
diff --git a/ui/confview.go b/ui/confview.go
index 57d0b0bf..a8e92957 100644
--- a/ui/confview.go
+++ b/ui/confview.go
@@ -420,16 +420,20 @@ func (cv *ConfView) Dispose() {
func (cv *ConfView) onToggleActiveClicked() {
cv.interfaze.toggleActive.button.SetEnabled(false)
- oldState, err := cv.tunnel.Toggle()
- if err != nil {
- if oldState == service.TunnelUnknown {
- walk.MsgBox(cv.Form(), "Failed to determine tunnel state", err.Error(), walk.MsgBoxIconError)
- } else if oldState == service.TunnelStopped {
- walk.MsgBox(cv.Form(), "Failed to activate tunnel", err.Error(), walk.MsgBoxIconError)
- } else if oldState == service.TunnelStarted {
- walk.MsgBox(cv.Form(), "Failed to deactivate tunnel", err.Error(), walk.MsgBoxIconError)
+ go func() {
+ oldState, err := cv.tunnel.Toggle()
+ if err != nil {
+ cv.Synchronize(func() {
+ if oldState == service.TunnelUnknown {
+ walk.MsgBox(cv.Form(), "Failed to determine tunnel state", err.Error(), walk.MsgBoxIconError)
+ } else if oldState == service.TunnelStopped {
+ walk.MsgBox(cv.Form(), "Failed to activate tunnel", err.Error(), walk.MsgBoxIconError)
+ } else if oldState == service.TunnelStarted {
+ walk.MsgBox(cv.Form(), "Failed to deactivate tunnel", err.Error(), walk.MsgBoxIconError)
+ }
+ })
}
- }
+ }()
}
func (cv *ConfView) onTunnelChanged(tunnel *service.Tunnel, state service.TunnelState, globalState service.TunnelState, err error) {
@@ -448,14 +452,27 @@ func (cv *ConfView) SetTunnel(tunnel *service.Tunnel) {
var config conf.Config
var state service.TunnelState
if tunnel != nil {
- if state, _ = tunnel.State(); state == service.TunnelStarted {
- config, _ = tunnel.RuntimeConfig()
- }
- if config.Name == "" {
- config, _ = tunnel.StoredConfig()
+ title := "Interface: " + tunnel.Name
+ if title != cv.name.Title() {
+ //TODO: display some sort of loading screen here!
}
+ go func() {
+ if state, _ = tunnel.State(); state == service.TunnelStarted {
+ config, _ = tunnel.RuntimeConfig()
+ }
+ if config.Name == "" {
+ config, _ = tunnel.StoredConfig()
+ }
+ cv.Synchronize(func() {
+ cv.setTunnel(tunnel, &config, state)
+ })
+ }()
+ } else {
+ cv.setTunnel(tunnel, &config, state)
}
+}
+func (cv *ConfView) setTunnel(tunnel *service.Tunnel, config *conf.Config, state service.TunnelState) {
cv.name.SetVisible(tunnel != nil)
hasSuspended := false