Browse Source

Replace use of InitialDirectory in file dialogs.

pull/3904/head
Steven Kirk 6 years ago
parent
commit
af12a3e9cc
  1. 2
      src/Avalonia.Dialogs/ManagedFileChooserViewModel.cs
  2. 6
      src/Avalonia.Native/SystemDialogs.cs
  3. 4
      src/Avalonia.X11/NativeDialogs/GtkNativeFileDialogs.cs
  4. 12
      src/Windows/Avalonia.Win32/SystemDialogImpl.cs

2
src/Avalonia.Dialogs/ManagedFileChooserViewModel.cs

@ -136,7 +136,7 @@ namespace Avalonia.Dialogs
: dialog is OpenFolderDialog ? "Select directory" : dialog is OpenFolderDialog ? "Select directory"
: throw new ArgumentException(nameof(dialog))); : throw new ArgumentException(nameof(dialog)));
var directory = dialog.InitialDirectory; var directory = dialog.Directory;
if (directory == null || !Directory.Exists(directory)) if (directory == null || !Directory.Exists(directory))
{ {

6
src/Avalonia.Native/SystemDialogs.cs

@ -28,7 +28,7 @@ namespace Avalonia.Native
_native.OpenFileDialog(nativeParent, _native.OpenFileDialog(nativeParent,
events, ofd.AllowMultiple, events, ofd.AllowMultiple,
ofd.Title ?? "", ofd.Title ?? "",
ofd.InitialDirectory ?? "", ofd.Directory ?? "",
ofd.InitialFileName ?? "", ofd.InitialFileName ?? "",
string.Join(";", dialog.Filters.SelectMany(f => f.Extensions))); string.Join(";", dialog.Filters.SelectMany(f => f.Extensions)));
} }
@ -37,7 +37,7 @@ namespace Avalonia.Native
_native.SaveFileDialog(nativeParent, _native.SaveFileDialog(nativeParent,
events, events,
dialog.Title ?? "", dialog.Title ?? "",
dialog.InitialDirectory ?? "", dialog.Directory ?? "",
dialog.InitialFileName ?? "", dialog.InitialFileName ?? "",
string.Join(";", dialog.Filters.SelectMany(f => f.Extensions))); string.Join(";", dialog.Filters.SelectMany(f => f.Extensions)));
} }
@ -51,7 +51,7 @@ namespace Avalonia.Native
var nativeParent = GetNativeWindow(parent); var nativeParent = GetNativeWindow(parent);
_native.SelectFolderDialog(nativeParent, events, dialog.Title ?? "", dialog.InitialDirectory ?? ""); _native.SelectFolderDialog(nativeParent, events, dialog.Title ?? "", dialog.Directory ?? "");
return events.Task.ContinueWith(t => { events.Dispose(); return t.Result.FirstOrDefault(); }); return events.Task.ContinueWith(t => { events.Dispose(); return t.Result.FirstOrDefault(); });
} }

4
src/Avalonia.X11/NativeDialogs/GtkNativeFileDialogs.cs

@ -112,7 +112,7 @@ namespace Avalonia.X11.NativeDialogs
() => ShowDialog(dialog.Title, platformImpl, () => ShowDialog(dialog.Title, platformImpl,
dialog is OpenFileDialog ? GtkFileChooserAction.Open : GtkFileChooserAction.Save, dialog is OpenFileDialog ? GtkFileChooserAction.Open : GtkFileChooserAction.Save,
(dialog as OpenFileDialog)?.AllowMultiple ?? false, (dialog as OpenFileDialog)?.AllowMultiple ?? false,
Path.Combine(string.IsNullOrEmpty(dialog.InitialDirectory) ? "" : dialog.InitialDirectory, Path.Combine(string.IsNullOrEmpty(dialog.Directory) ? "" : dialog.Directory,
string.IsNullOrEmpty(dialog.InitialFileName) ? "" : dialog.InitialFileName), dialog.Filters)); string.IsNullOrEmpty(dialog.InitialFileName) ? "" : dialog.InitialFileName), dialog.Filters));
} }
@ -125,7 +125,7 @@ namespace Avalonia.X11.NativeDialogs
return await await RunOnGlibThread(async () => return await await RunOnGlibThread(async () =>
{ {
var res = await ShowDialog(dialog.Title, platformImpl, var res = await ShowDialog(dialog.Title, platformImpl,
GtkFileChooserAction.SelectFolder, false, dialog.InitialDirectory, null); GtkFileChooserAction.SelectFolder, false, dialog.Directory, null);
return res?.FirstOrDefault(); return res?.FirstOrDefault();
}); });
} }

12
src/Windows/Avalonia.Win32/SystemDialogImpl.cs

@ -56,11 +56,11 @@ namespace Avalonia.Win32
frm.SetFileTypes((uint)filters.Count, filters.ToArray()); frm.SetFileTypes((uint)filters.Count, filters.ToArray());
frm.SetFileTypeIndex(0); frm.SetFileTypeIndex(0);
if (dialog.InitialDirectory != null) if (dialog.Directory != null)
{ {
UnmanagedMethods.IShellItem directoryShellItem; UnmanagedMethods.IShellItem directoryShellItem;
Guid riid = UnmanagedMethods.ShellIds.IShellItem; Guid riid = UnmanagedMethods.ShellIds.IShellItem;
if (UnmanagedMethods.SHCreateItemFromParsingName(dialog.InitialDirectory, IntPtr.Zero, ref riid, out directoryShellItem) == (uint)UnmanagedMethods.HRESULT.S_OK) if (UnmanagedMethods.SHCreateItemFromParsingName(dialog.Directory, IntPtr.Zero, ref riid, out directoryShellItem) == (uint)UnmanagedMethods.HRESULT.S_OK)
{ {
frm.SetFolder(directoryShellItem); frm.SetFolder(directoryShellItem);
frm.SetDefaultFolder(directoryShellItem); frm.SetDefaultFolder(directoryShellItem);
@ -114,21 +114,21 @@ namespace Avalonia.Win32
options |= (uint)(UnmanagedMethods.FOS.FOS_PICKFOLDERS | DefaultDialogOptions); options |= (uint)(UnmanagedMethods.FOS.FOS_PICKFOLDERS | DefaultDialogOptions);
frm.SetOptions(options); frm.SetOptions(options);
if (dialog.InitialDirectory != null) if (dialog.Directory != null)
{ {
UnmanagedMethods.IShellItem directoryShellItem; UnmanagedMethods.IShellItem directoryShellItem;
Guid riid = UnmanagedMethods.ShellIds.IShellItem; Guid riid = UnmanagedMethods.ShellIds.IShellItem;
if (UnmanagedMethods.SHCreateItemFromParsingName(dialog.InitialDirectory, IntPtr.Zero, ref riid, out directoryShellItem) == (uint)UnmanagedMethods.HRESULT.S_OK) if (UnmanagedMethods.SHCreateItemFromParsingName(dialog.Directory, IntPtr.Zero, ref riid, out directoryShellItem) == (uint)UnmanagedMethods.HRESULT.S_OK)
{ {
frm.SetFolder(directoryShellItem); frm.SetFolder(directoryShellItem);
} }
} }
if (dialog.DefaultDirectory != null) if (dialog.Directory != null)
{ {
UnmanagedMethods.IShellItem directoryShellItem; UnmanagedMethods.IShellItem directoryShellItem;
Guid riid = UnmanagedMethods.ShellIds.IShellItem; Guid riid = UnmanagedMethods.ShellIds.IShellItem;
if (UnmanagedMethods.SHCreateItemFromParsingName(dialog.DefaultDirectory, IntPtr.Zero, ref riid, out directoryShellItem) == (uint)UnmanagedMethods.HRESULT.S_OK) if (UnmanagedMethods.SHCreateItemFromParsingName(dialog.Directory, IntPtr.Zero, ref riid, out directoryShellItem) == (uint)UnmanagedMethods.HRESULT.S_OK)
{ {
frm.SetDefaultFolder(directoryShellItem); frm.SetDefaultFolder(directoryShellItem);
} }

Loading…
Cancel
Save