From 60e2ee8922e64f1453a4b2e1b880fd20932e3fa9 Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Wed, 10 Apr 2019 14:39:28 +0200 Subject: ui: use Synchronize method for cross-goroutine calls to walk Signed-off-by: Alexander Neumann --- ui/confview.go | 25 ++----------------------- ui/manage_tunnels.go | 4 +++- 2 files changed, 5 insertions(+), 24 deletions(-) (limited to 'ui') diff --git a/ui/confview.go b/ui/confview.go index 230d4dd7..2101aa0a 100644 --- a/ui/confview.go +++ b/ui/confview.go @@ -403,9 +403,8 @@ func NewConfView(parent walk.Container) (*ConfView, error) { cv.peers = make(map[conf.Key]*peerView) cv.creatingThread = windows.GetCurrentThreadId() win.SetWindowLongPtr(cv.Handle(), win.GWLP_USERDATA, uintptr(unsafe.Pointer(cv))) - cv.originalWndProc = win.SetWindowLongPtr(cv.Handle(), win.GWL_WNDPROC, crossThreadMessageHijack) cv.tunnelChangedCB = service.IPCClientRegisterTunnelChange(cv.onTunnelChanged) - cv.setTunnel(nil) + cv.SetTunnel(nil) if err := walk.InitWrapperWindow(cv); err != nil { return nil, err @@ -423,18 +422,6 @@ func (cv *ConfView) Dispose() { cv.ScrollView.Dispose() } -//TODO: choose actual good value for this -const crossThreadUpdate = win.WM_APP + 17 - -var crossThreadMessageHijack = windows.NewCallback(func(hwnd win.HWND, msg uint32, wParam, lParam uintptr) uintptr { - cv := (*ConfView)(unsafe.Pointer(win.GetWindowLongPtr(hwnd, win.GWLP_USERDATA))) - if msg == crossThreadUpdate { - cv.setTunnel((*service.Tunnel)(unsafe.Pointer(wParam))) - return 0 - } - return win.CallWindowProc(cv.originalWndProc, hwnd, msg, wParam, lParam) -}) - func (cv *ConfView) TunnelTracker() *TunnelTracker { return cv.interfaze.toggleActive.tunnelTracker } @@ -461,7 +448,7 @@ func (cv *ConfView) onToggleActiveClicked() { return } - cv.setTunnel(cv.tunnel) + cv.SetTunnel(cv.tunnel) } func (cv *ConfView) onTunnelChanged(tunnel *service.Tunnel, state service.TunnelState, err error) { @@ -478,14 +465,6 @@ func (cv *ConfView) updateTunnelStatus(state service.TunnelState) { } func (cv *ConfView) SetTunnel(tunnel *service.Tunnel) { - if cv.creatingThread == windows.GetCurrentThreadId() { - cv.setTunnel(tunnel) - } else { - cv.SendMessage(crossThreadUpdate, uintptr(unsafe.Pointer(tunnel)), 0) - } -} - -func (cv *ConfView) setTunnel(tunnel *service.Tunnel) { cv.tunnel = tunnel var state service.TunnelState diff --git a/ui/manage_tunnels.go b/ui/manage_tunnels.go index 815dee00..9e3711b6 100644 --- a/ui/manage_tunnels.go +++ b/ui/manage_tunnels.go @@ -132,7 +132,9 @@ func (mtw *ManageTunnelsWindow) setup() error { // TODO: teardown in Dispose() t := time.NewTicker(time.Second) for range t.C { - mtw.updateConfView() + mtw.Synchronize(func() { + mtw.updateConfView() + }) } }() -- cgit v1.2.3-59-g8ed1b