diff --git a/v2/internal/ffenestri/ffenestri.h b/v2/internal/ffenestri/ffenestri.h index 490bf9fb..139d5d3f 100644 --- a/v2/internal/ffenestri/ffenestri.h +++ b/v2/internal/ffenestri/ffenestri.h @@ -29,6 +29,5 @@ extern void Fullscreen(void *app); extern void UnFullscreen(void *app); extern void ToggleFullscreen(void *app); extern void DisableFrame(void *app); -extern void OpenDialog(void *appPointer, char *callbackID, char *title, char *filter, int allowFiles, int allowDirs ); - +extern void OpenDialog(void *appPointer, char *callbackID, char *title, char *filter, int allowFiles, int allowDirs, int allowMultiple, int showHiddenFiles, int canCreateDirectories, int resolveAliases, int treatPackagesAsDirectories); #endif diff --git a/v2/internal/ffenestri/ffenestri_client.go b/v2/internal/ffenestri/ffenestri_client.go index 97e6eb00..5770157e 100644 --- a/v2/internal/ffenestri/ffenestri_client.go +++ b/v2/internal/ffenestri/ffenestri_client.go @@ -127,5 +127,10 @@ func (c *Client) OpenDialog(dialogOptions *options.OpenDialog, callbackID string c.app.string2CString(dialogOptions.Filter), c.app.bool2Cint(dialogOptions.AllowFiles), c.app.bool2Cint(dialogOptions.AllowDirectories), + c.app.bool2Cint(dialogOptions.AllowMultiple), + c.app.bool2Cint(dialogOptions.ShowHiddenFiles), + c.app.bool2Cint(dialogOptions.CanCreateDirectories), + c.app.bool2Cint(dialogOptions.ResolveAliases), + c.app.bool2Cint(dialogOptions.TreatPackagesAsDirectories), ) } diff --git a/v2/internal/ffenestri/ffenestri_darwin.c b/v2/internal/ffenestri/ffenestri_darwin.c index 348bc963..af1a60df 100644 --- a/v2/internal/ffenestri/ffenestri_darwin.c +++ b/v2/internal/ffenestri/ffenestri_darwin.c @@ -416,7 +416,7 @@ char* OpenFileDialog(struct Application *app, char *title, char *filter) { // OpenDialog opens a dialog to select files/directories // NOTE: The result is a string that will need to be freed! -void OpenDialog(struct Application *app, char* callbackID, char *title, char *filter, int allowFiles, int allowDirs, int allowMultiple) { +void OpenDialog(struct Application *app, char *callbackID, char *title, char *filter, int allowFiles, int allowDirs, int allowMultiple, int showHiddenFiles, int canCreateDirectories, int resolveAliases, int treatPackagesAsDirectories) { Debug("OpenDialog Called with callback id: %s", callbackID); // Create an open panel @@ -427,11 +427,15 @@ void OpenDialog(struct Application *app, char* callbackID, char *title, char *fi // TODO: Filters // No filters: [dialog setAllowsOtherFileTypes:YES]; - // TODO: Other options msg(dialog, s("setCanChooseFiles:"), allowFiles); msg(dialog, s("setCanChooseDirectories:"), allowDirs); msg(dialog, s("setAllowsMultipleSelection:"), allowMultiple); + msg(dialog, s("setShowsHiddenFiles:"), showHiddenFiles); + msg(dialog, s("setCanCreateDirectories:"), canCreateDirectories); + msg(dialog, s("setResolvesAliases:"), resolveAliases); + msg(dialog, s("setTreatsFilePackagesAsDirectories:"), treatPackagesAsDirectories); + // Setup callback handler msg(dialog, s("beginSheetModalForWindow:completionHandler:"), app->mainWindow, ^(id result) { JsonNode *response = json_mkarray(); diff --git a/v2/pkg/options/dialog.go b/v2/pkg/options/dialog.go index a58f23b7..3637b130 100644 --- a/v2/pkg/options/dialog.go +++ b/v2/pkg/options/dialog.go @@ -2,9 +2,13 @@ package options // OpenDialog contains the options for the OpenDialog runtime method type OpenDialog struct { - Title string - Filter string - AllowFiles bool - AllowDirectories bool - AllowMultiple bool + Title string + Filter string + AllowFiles bool + AllowDirectories bool + AllowMultiple bool + ShowHiddenFiles bool + CanCreateDirectories bool + ResolveAliases bool + TreatPackagesAsDirectories bool } diff --git a/v2/test/runtime/runtime.go b/v2/test/runtime/runtime.go index 1e37a82b..e52b4fe2 100644 --- a/v2/test/runtime/runtime.go +++ b/v2/test/runtime/runtime.go @@ -110,6 +110,19 @@ func (r *RuntimeTest) OpenDialogMultiple(title string, filter string) []string { return r.runtime.Dialog.Open(dialogOptions) } +// OpenDialogAllOptions will call the Runtime.Dialog.OpenDialog method allowing multiple selection +func (r *RuntimeTest) OpenDialogAllOptions() []string { + dialogOptions := &options.OpenDialog{ + AllowFiles: true, + AllowDirectories: true, + ShowHiddenFiles: true, + CanCreateDirectories: true, + TreatPackagesAsDirectories: true, + ResolveAliases: true, + } + return r.runtime.Dialog.Open(dialogOptions) +} + // HideWindow will call the Runtime.Window.Hide method and then call // Runtime.Window.Show 3 seconds later. func (r *RuntimeTest) HideWindow() {