diff --git a/v2/internal/frontend/desktop/linux/dialog.go b/v2/internal/frontend/desktop/linux/dialog.go index 106b9f1bd..91c9122f7 100644 --- a/v2/internal/frontend/desktop/linux/dialog.go +++ b/v2/internal/frontend/desktop/linux/dialog.go @@ -48,13 +48,12 @@ func (f *Frontend) OpenDirectoryDialog(dialogOptions frontend.OpenDialogOptions) func (f *Frontend) SaveFileDialog(dialogOptions frontend.SaveDialogOptions) (string, error) { options := frontend.OpenDialogOptions{ - DefaultDirectory: dialogOptions.DefaultDirectory, - DefaultFilename: dialogOptions.DefaultFilename, - Title: dialogOptions.Title, - Filters: dialogOptions.Filters, - ShowHiddenFiles: dialogOptions.ShowHiddenFiles, + DefaultDirectory: dialogOptions.DefaultDirectory, + DefaultFilename: dialogOptions.DefaultFilename, + Title: dialogOptions.Title, + Filters: dialogOptions.Filters, + ShowHiddenFiles: dialogOptions.ShowHiddenFiles, CanCreateDirectories: dialogOptions.CanCreateDirectories, - TreatPackagesAsDirectories: dialogOptions.TreatPackagesAsDirectories, } f.mainWindow.OpenFileDialog(options, 0, GTK_FILE_CHOOSER_ACTION_SAVE) results := <-openFileResults diff --git a/v2/internal/frontend/desktop/linux/window.go b/v2/internal/frontend/desktop/linux/window.go index 8ffc16257..817815ee2 100644 --- a/v2/internal/frontend/desktop/linux/window.go +++ b/v2/internal/frontend/desktop/linux/window.go @@ -206,6 +206,7 @@ typedef struct OpenFileDialogOptions { void* webview; char* title; char* defaultFilename; + char* defaultDirectory; int createDirectories; int multipleFiles; int showHiddenFiles; @@ -223,9 +224,13 @@ void freeFileFilterArray(GtkFileFilter** filters) { int opendialog(gpointer data) { struct OpenFileDialogOptions *options = data; + char *label = "_Open"; + if (options->action == GTK_FILE_CHOOSER_ACTION_SAVE) { + label = "_Save"; + } GtkWidget *dlgWidget = gtk_file_chooser_dialog_new(options->title, options->webview, options->action, "_Cancel", GTK_RESPONSE_CANCEL, - "_Open", GTK_RESPONSE_ACCEPT, + label, GTK_RESPONSE_ACCEPT, NULL); GtkFileChooser *fc = GTK_FILE_CHOOSER(dlgWidget); @@ -253,6 +258,11 @@ int opendialog(gpointer data) { gtk_file_chooser_set_show_hidden(fc, TRUE); } + if (options->defaultDirectory != NULL) { + gtk_file_chooser_set_current_folder (fc, options->defaultDirectory); + free(options->defaultDirectory); + } + if (options->action == GTK_FILE_CHOOSER_ACTION_SAVE) { if (options->defaultFilename != NULL) { gtk_file_chooser_set_current_name(fc, options->defaultFilename); @@ -572,7 +582,7 @@ func (w *Window) OpenFileDialog(dialogOptions frontend.OpenDialogOptions, multip filters[index] = thisFilter } mem.Free() - filters[arraySize-1] = (*C.struct__GtkFileFilter)(unsafe.Pointer(uintptr(0))) + filters[arraySize-1] = nil } if dialogOptions.CanCreateDirectories { @@ -586,5 +596,10 @@ func (w *Window) OpenFileDialog(dialogOptions frontend.OpenDialogOptions, multip if dialogOptions.DefaultFilename != "" { data.defaultFilename = C.CString(dialogOptions.DefaultFilename) } + + if dialogOptions.DefaultDirectory != "" { + data.defaultDirectory = C.CString(dialogOptions.DefaultDirectory) + } + C.ExecuteOnMainThread(C.opendialog, C.gpointer(&data)) }