From 253c08cbf38d7139abee2bf5842c8bbded85ee41 Mon Sep 17 00:00:00 2001 From: Drew Weymouth Date: Tue, 11 Feb 2025 17:09:03 -0300 Subject: [PATCH] disable Fyne thread checks, fix async for connect to server workflow --- Makefile | 2 +- ui/controller/controller.go | 42 ++++++++++++++++++++++--------------- 2 files changed, 26 insertions(+), 18 deletions(-) diff --git a/Makefile b/Makefile index 16d417f..27303c8 100644 --- a/Makefile +++ b/Makefile @@ -5,7 +5,7 @@ build: # so the last 3 cmds move it over manually. This is a bit fragile though # since it assumes a specific location and version of the dependency package_macos: - CGO_CFLAGS="-I/usr/local/include -I/opt/homebrew/include" CGO_LDFLAGS="-L/usr/local/lib -L/opt/homebrew/lib" fyne package -os darwin + CGO_CFLAGS="-I/usr/local/include -I/opt/homebrew/include" CGO_LDFLAGS="-L/usr/local/lib -L/opt/homebrew/lib" fyne package -os darwin -tags migrated_fynedo bundledeps_macos_homebrew: dylibbundler -od -b -x ./Supersonic.app/Contents/MacOS/supersonic -d ./Supersonic.app/Contents/Frameworks/ -p @executable_path/../Frameworks/ diff --git a/ui/controller/controller.go b/ui/controller/controller.go index e429592..a159f9c 100644 --- a/ui/controller/controller.go +++ b/ui/controller/controller.go @@ -438,7 +438,6 @@ func (c *Controller) DoConnectToServerWorkflow(server *backend.ServerConfig) { // try connecting to last used server - set up cancelable modal dialog canceled := false ctx, cancel := context.WithCancel(context.Background()) - defer cancel() dlg := dialog.NewCustom(lang.L("Connecting"), lang.L("Cancel"), widget.NewLabel(fmt.Sprintf(lang.L("Connecting to")+" %s", server.Nickname)), c.MainWindow) dlg.SetOnClosed(func() { @@ -447,25 +446,34 @@ func (c *Controller) DoConnectToServerWorkflow(server *backend.ServerConfig) { }) c.haveModal = true dlg.Show() + // try to connect - if err := c.tryConnectToServer(ctx, server, pass); err != nil { - dlg.Hide() - c.haveModal = false - if canceled { - c.PromptForLoginAndConnect() - } else { - // connection failure - dlg := dialog.NewError(err, c.MainWindow) - dlg.SetOnClosed(func() { - c.PromptForLoginAndConnect() + go func() { + defer cancel() // make sure to free up ctx resources if user does not cancel + + if err := c.tryConnectToServer(ctx, server, pass); err != nil { + fyne.Do(func() { + dlg.Hide() + c.haveModal = false + if canceled { + c.PromptForLoginAndConnect() + } else { + // connection failure + dlg := dialog.NewError(err, c.MainWindow) + dlg.SetOnClosed(func() { + c.PromptForLoginAndConnect() + }) + c.haveModal = true + dlg.Show() + } + }) + } else { + fyne.Do(func() { + dlg.Hide() + c.haveModal = false }) - c.haveModal = true - dlg.Show() } - } else { - dlg.Hide() - c.haveModal = false - } + }() } func (m *Controller) PromptForLoginAndConnect() {