From 6f75b004633cd5c7fe2ec0c7707dd9d7b969057d Mon Sep 17 00:00:00 2001 From: atterpac Date: Sun, 7 Apr 2024 18:40:10 -0600 Subject: [PATCH] Proper syncing and canceling of dialogs s s s --- v3/pkg/application/dialogs.go | 1 + v3/pkg/application/dialogs_linux.go | 24 ++++++++++++++---------- v3/pkg/application/linux_cgo.go | 3 +-- 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/v3/pkg/application/dialogs.go b/v3/pkg/application/dialogs.go index bd54059f3..1cfc01b71 100644 --- a/v3/pkg/application/dialogs.go +++ b/v3/pkg/application/dialogs.go @@ -272,6 +272,7 @@ func (d *OpenFileDialogStruct) PromptForSingleSelection() (string, error) { if err == nil { result = <-selections } + close(selections) return result, err } diff --git a/v3/pkg/application/dialogs_linux.go b/v3/pkg/application/dialogs_linux.go index be480d176..4d0e53743 100644 --- a/v3/pkg/application/dialogs_linux.go +++ b/v3/pkg/application/dialogs_linux.go @@ -10,10 +10,12 @@ func (a *linuxApp) showAboutDialog(title string, message string, icon []byte) { about.SetTitle(title). SetMessage(message). SetIcon(icon) - runQuestionDialog( - pointer(parent), - about, - ) + InvokeAsync(func() { + runQuestionDialog( + pointer(parent), + about, + ) + }) } type linuxDialog struct { @@ -28,13 +30,15 @@ func (m *linuxDialog) show() { parent, _ = window.(*WebviewWindow).NativeWindowHandle() } - response := runQuestionDialog(pointer(parent), m.dialog) - if response >= 0 && response < len(m.dialog.Buttons) { - button := m.dialog.Buttons[response] - if button.Callback != nil { - go button.Callback() + InvokeAsync(func() { + response := runQuestionDialog(pointer(parent), m.dialog) + if response >= 0 && response < len(m.dialog.Buttons) { + button := m.dialog.Buttons[response] + if button.Callback != nil { + go button.Callback() + } } - } + }) } func newDialogImpl(d *MessageDialog) *linuxDialog { diff --git a/v3/pkg/application/linux_cgo.go b/v3/pkg/application/linux_cgo.go index 5d0931be6..f92b47c88 100644 --- a/v3/pkg/application/linux_cgo.go +++ b/v3/pkg/application/linux_cgo.go @@ -1570,11 +1570,10 @@ func runChooserDialog(window pointer, allowMultiple, createFolders, showHidden b } count++ } - close(selections) - C.gtk_widget_destroy((*C.GtkWidget)(unsafe.Pointer(fc))) } }() }) + C.gtk_widget_destroy((*C.GtkWidget)(unsafe.Pointer(fc))) return selections, nil }