From 0567a6dbe7dc122ba90e019320708e0cbc51b635 Mon Sep 17 00:00:00 2001 From: Herman K Date: Tue, 14 Nov 2023 00:42:09 +0200 Subject: [PATCH] current_folder added to open file / folder picker (#13596) Co-authored-by: Herman Kirshin --- .../Avalonia.FreeDesktop.csproj | 2 +- src/Avalonia.FreeDesktop/DBusSystemDialog.cs | 15 +++++++++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/Avalonia.FreeDesktop/Avalonia.FreeDesktop.csproj b/src/Avalonia.FreeDesktop/Avalonia.FreeDesktop.csproj index 28a288f22a..27a1af95ff 100644 --- a/src/Avalonia.FreeDesktop/Avalonia.FreeDesktop.csproj +++ b/src/Avalonia.FreeDesktop/Avalonia.FreeDesktop.csproj @@ -13,7 +13,7 @@ - + diff --git a/src/Avalonia.FreeDesktop/DBusSystemDialog.cs b/src/Avalonia.FreeDesktop/DBusSystemDialog.cs index 8f4942813a..1b22393337 100644 --- a/src/Avalonia.FreeDesktop/DBusSystemDialog.cs +++ b/src/Avalonia.FreeDesktop/DBusSystemDialog.cs @@ -20,27 +20,30 @@ namespace Avalonia.FreeDesktop return null; var dbusFileChooser = new OrgFreedesktopPortalFileChooser(DBusHelper.Connection, "org.freedesktop.portal.Desktop", "/org/freedesktop/portal/desktop"); + uint version = 0; try { - await dbusFileChooser.GetVersionPropertyAsync(); + version = await dbusFileChooser.GetVersionPropertyAsync(); } catch { return null; } - return new DBusSystemDialog(DBusHelper.Connection, handle, dbusFileChooser); + return new DBusSystemDialog(DBusHelper.Connection, handle, dbusFileChooser, version); } private readonly Connection _connection; private readonly OrgFreedesktopPortalFileChooser _fileChooser; private readonly IPlatformHandle _handle; + private readonly uint _version; - private DBusSystemDialog(Connection connection, IPlatformHandle handle, OrgFreedesktopPortalFileChooser fileChooser) + private DBusSystemDialog(Connection connection, IPlatformHandle handle, OrgFreedesktopPortalFileChooser fileChooser, uint version) { _connection = connection; _fileChooser = fileChooser; _handle = handle; + _version = version; } public override bool CanOpen => true; @@ -58,6 +61,8 @@ namespace Avalonia.FreeDesktop if (filters is not null) chooserOptions.Add("filters", filters); + if (options.SuggestedStartLocation?.TryGetLocalPath() is { } folderPath && _version >= 4) + chooserOptions.Add("current_folder", new DBusVariantItem("ay", new DBusByteArrayItem(Encoding.UTF8.GetBytes(folderPath + "\0")))); chooserOptions.Add("multiple", new DBusVariantItem("b", new DBusBoolItem(options.AllowMultiple))); objectPath = await _fileChooser.OpenFileAsync(parentWindow, options.Title ?? string.Empty, chooserOptions); @@ -120,7 +125,9 @@ namespace Avalonia.FreeDesktop { "directory", new DBusVariantItem("b", new DBusBoolItem(true)) }, { "multiple", new DBusVariantItem("b", new DBusBoolItem(options.AllowMultiple)) } }; - + if (options.SuggestedStartLocation?.TryGetLocalPath() is { } folderPath && _version >= 4) + chooserOptions.Add("current_folder", new DBusVariantItem("ay", new DBusByteArrayItem(Encoding.UTF8.GetBytes(folderPath + "\0")))); + var objectPath = await _fileChooser.OpenFileAsync(parentWindow, options.Title ?? string.Empty, chooserOptions); var request = new OrgFreedesktopPortalRequest(_connection, "org.freedesktop.portal.Desktop", objectPath); var tsc = new TaskCompletionSource();