|
@@ -13,6 +13,9 @@ namespace Avalonia.Win32
|
|
|
|
|
|
|
|
class SystemDialogImpl : ISystemDialogImpl
|
|
class SystemDialogImpl : ISystemDialogImpl
|
|
|
{
|
|
{
|
|
|
|
|
+ private const UnmanagedMethods.FOS DefaultDialogOptions = UnmanagedMethods.FOS.FOS_FORCEFILESYSTEM | UnmanagedMethods.FOS.FOS_NOVALIDATE |
|
|
|
|
|
+ UnmanagedMethods.FOS.FOS_NOTESTFILECREATE | UnmanagedMethods.FOS.FOS_DONTADDTORECENT;
|
|
|
|
|
+
|
|
|
public unsafe Task<string[]> ShowFileDialogAsync(FileDialog dialog, IWindowImpl parent)
|
|
public unsafe Task<string[]> ShowFileDialogAsync(FileDialog dialog, IWindowImpl parent)
|
|
|
{
|
|
{
|
|
|
var hWnd = parent?.Handle?.Handle ?? IntPtr.Zero;
|
|
var hWnd = parent?.Handle?.Handle ?? IntPtr.Zero;
|
|
@@ -29,7 +32,7 @@ namespace Avalonia.Win32
|
|
|
|
|
|
|
|
uint options;
|
|
uint options;
|
|
|
frm.GetOptions(out options);
|
|
frm.GetOptions(out options);
|
|
|
- options |= (uint)(UnmanagedMethods.FOS.FOS_NOVALIDATE | UnmanagedMethods.FOS.FOS_NOTESTFILECREATE | UnmanagedMethods.FOS.FOS_DONTADDTORECENT);
|
|
|
|
|
|
|
+ options |= (uint)(DefaultDialogOptions);
|
|
|
if (openDialog?.AllowMultiple == true)
|
|
if (openDialog?.AllowMultiple == true)
|
|
|
options |= (uint)UnmanagedMethods.FOS.FOS_ALLOWMULTISELECT;
|
|
options |= (uint)UnmanagedMethods.FOS.FOS_ALLOWMULTISELECT;
|
|
|
frm.SetOptions(options);
|
|
frm.SetOptions(options);
|
|
@@ -37,13 +40,16 @@ namespace Avalonia.Win32
|
|
|
var defaultExtension = (dialog as SaveFileDialog)?.DefaultExtension ?? "";
|
|
var defaultExtension = (dialog as SaveFileDialog)?.DefaultExtension ?? "";
|
|
|
frm.SetDefaultExtension(defaultExtension);
|
|
frm.SetDefaultExtension(defaultExtension);
|
|
|
frm.SetFileName(dialog.InitialFileName ?? "");
|
|
frm.SetFileName(dialog.InitialFileName ?? "");
|
|
|
- frm.SetTitle(dialog.Title);
|
|
|
|
|
|
|
+ frm.SetTitle(dialog.Title ?? "");
|
|
|
|
|
|
|
|
var filters = new List<UnmanagedMethods.COMDLG_FILTERSPEC>();
|
|
var filters = new List<UnmanagedMethods.COMDLG_FILTERSPEC>();
|
|
|
- foreach (var filter in dialog.Filters)
|
|
|
|
|
|
|
+ if (dialog.Filters != null)
|
|
|
{
|
|
{
|
|
|
- var extMask = string.Join(";", filter.Extensions.Select(e => "*." + e));
|
|
|
|
|
- filters.Add(new UnmanagedMethods.COMDLG_FILTERSPEC { pszName = filter.Name, pszSpec = extMask });
|
|
|
|
|
|
|
+ foreach (var filter in dialog.Filters)
|
|
|
|
|
+ {
|
|
|
|
|
+ var extMask = string.Join(";", filter.Extensions.Select(e => "*." + e));
|
|
|
|
|
+ filters.Add(new UnmanagedMethods.COMDLG_FILTERSPEC { pszName = filter.Name, pszSpec = extMask });
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
if (filters.Count == 0)
|
|
if (filters.Count == 0)
|
|
|
filters.Add(new UnmanagedMethods.COMDLG_FILTERSPEC { pszName = "All files", pszSpec = "*.*" });
|
|
filters.Add(new UnmanagedMethods.COMDLG_FILTERSPEC { pszName = "All files", pszSpec = "*.*" });
|
|
@@ -106,7 +112,7 @@ namespace Avalonia.Win32
|
|
|
var frm = (UnmanagedMethods.IFileDialog)unk;
|
|
var frm = (UnmanagedMethods.IFileDialog)unk;
|
|
|
uint options;
|
|
uint options;
|
|
|
frm.GetOptions(out options);
|
|
frm.GetOptions(out options);
|
|
|
- options |= (uint)(UnmanagedMethods.FOS.FOS_PICKFOLDERS | UnmanagedMethods.FOS.FOS_FORCEFILESYSTEM | UnmanagedMethods.FOS.FOS_NOVALIDATE | UnmanagedMethods.FOS.FOS_NOTESTFILECREATE | UnmanagedMethods.FOS.FOS_DONTADDTORECENT);
|
|
|
|
|
|
|
+ options |= (uint)(UnmanagedMethods.FOS.FOS_PICKFOLDERS | DefaultDialogOptions);
|
|
|
frm.SetOptions(options);
|
|
frm.SetOptions(options);
|
|
|
|
|
|
|
|
if (dialog.InitialDirectory != null)
|
|
if (dialog.InitialDirectory != null)
|