Browse Source

Merge pull request #1720 from CommonGuy/fix-filedialog-bugs

Fix filedialog bugs
Steven Kirk 7 years ago
parent
commit
c4e6e6d7db
1 changed files with 12 additions and 6 deletions
  1. 12 6
      src/Windows/Avalonia.Win32/SystemDialogImpl.cs

+ 12 - 6
src/Windows/Avalonia.Win32/SystemDialogImpl.cs

@@ -13,6 +13,9 @@ namespace Avalonia.Win32
 
     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)
         {
             var hWnd = parent?.Handle?.Handle ?? IntPtr.Zero;
@@ -29,7 +32,7 @@ namespace Avalonia.Win32
 
                 uint 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)
                     options |= (uint)UnmanagedMethods.FOS.FOS_ALLOWMULTISELECT;
                 frm.SetOptions(options);
@@ -37,13 +40,16 @@ namespace Avalonia.Win32
                 var defaultExtension = (dialog as SaveFileDialog)?.DefaultExtension ?? "";
                 frm.SetDefaultExtension(defaultExtension);
                 frm.SetFileName(dialog.InitialFileName ?? "");
-                frm.SetTitle(dialog.Title);
+                frm.SetTitle(dialog.Title ?? "");
 
                 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)
                     filters.Add(new UnmanagedMethods.COMDLG_FILTERSPEC { pszName = "All files", pszSpec = "*.*" });
@@ -106,7 +112,7 @@ namespace Avalonia.Win32
                 var frm = (UnmanagedMethods.IFileDialog)unk;
                 uint 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);
 
                 if (dialog.InitialDirectory != null)