瀏覽代碼

fix(core): dialog's `defaultPath` behavior on Linux, closes #2232 (#2382)

Lucas Fernandes Nogueira 4 年之前
父節點
當前提交
8b2cc2615d

+ 5 - 0
.changes/fix-dialog-save-default-path-linux.md

@@ -0,0 +1,5 @@
+---
+"tauri": patch
+---
+
+Fixes `defaultPath` option on dialog API not setting the file name if it doesn't exist on Linux.

+ 5 - 22
core/tauri/src/endpoints/dialog.rs

@@ -114,35 +114,18 @@ impl Cmd {
   }
   }
 }
 }
 
 
-#[cfg(all(target_os = "linux", any(dialog_open, dialog_save)))]
+#[cfg(any(dialog_open, dialog_save))]
 fn set_default_path(
 fn set_default_path(
   mut dialog_builder: FileDialogBuilder,
   mut dialog_builder: FileDialogBuilder,
   default_path: PathBuf,
   default_path: PathBuf,
 ) -> FileDialogBuilder {
 ) -> FileDialogBuilder {
   if default_path.is_file() || !default_path.exists() {
   if default_path.is_file() || !default_path.exists() {
-    dialog_builder = dialog_builder.set_file_name(&default_path.to_string_lossy().to_string());
-    dialog_builder.set_directory(default_path.parent().unwrap())
-  } else {
-    dialog_builder.set_directory(default_path)
-  }
-}
-
-#[cfg(all(any(windows, target_os = "macos"), any(dialog_open, dialog_save)))]
-fn set_default_path(
-  mut dialog_builder: FileDialogBuilder,
-  default_path: PathBuf,
-) -> FileDialogBuilder {
-  if default_path.is_file() {
-    if let Some(parent) = default_path.parent() {
+    if let (Some(parent), Some(file_name)) = (default_path.parent(), default_path.file_name()) {
       dialog_builder = dialog_builder.set_directory(parent);
       dialog_builder = dialog_builder.set_directory(parent);
+      dialog_builder = dialog_builder.set_file_name(&file_name.to_string_lossy().to_string());
+    } else {
+      dialog_builder = dialog_builder.set_directory(default_path);
     }
     }
-    dialog_builder = dialog_builder.set_file_name(
-      &default_path
-        .file_name()
-        .unwrap()
-        .to_string_lossy()
-        .to_string(),
-    );
     dialog_builder
     dialog_builder
   } else {
   } else {
     dialog_builder.set_directory(default_path)
     dialog_builder.set_directory(default_path)

+ 1 - 1
core/tauri/src/updater/core.rs

@@ -91,7 +91,7 @@ impl RemoteRelease {
 
 
     let download_url;
     let download_url;
     #[cfg(target_os = "windows")]
     #[cfg(target_os = "windows")]
-    let mut with_elevated_task = false;
+    let with_elevated_task;
 
 
     match release.get("platforms") {
     match release.get("platforms") {
       //
       //

+ 5 - 1
tooling/api/src/dialog.ts

@@ -57,7 +57,11 @@ interface OpenDialogOptions {
 interface SaveDialogOptions {
 interface SaveDialogOptions {
   /** The filters of the dialog. */
   /** The filters of the dialog. */
   filters?: DialogFilter[]
   filters?: DialogFilter[]
-  /** Initial directory or file path. It must exist. */
+  /**
+   * Initial directory or file path.
+   * If it's a directory path, the dialog interface will change to that folder.
+   * If it's not an existing directory, the file name will be set to the dialog's file name input and the dialog will be set to the parent folder.
+   */
   defaultPath?: string
   defaultPath?: string
 }
 }