From 0ee8f5265d359fed281a9496b6bf827a160f7fec Mon Sep 17 00:00:00 2001 From: Hakan Seven Date: Tue, 9 Jun 2026 18:38:35 +0300 Subject: [PATCH] fix(save): append format extension to bare filename The save dialog wrote the typed name verbatim, so entering "foo" with DWG 2018 selected produced an extensionless "foo". The extension was only added when the format pick-list changed, not on confirm. Now confirm appends the selected format's extension when the name has none (empty name falls back to drawing.); a name that already carries an extension is left untouched. Co-Authored-By: Claude Opus 4.8 --- src/app/update.rs | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/app/update.rs b/src/app/update.rs index d9a423d0d..45607ff49 100644 --- a/src/app/update.rs +++ b/src/app/update.rs @@ -646,8 +646,19 @@ impl OpenCADStudio { } Message::SaveDialogConfirm => { - let path = self.save_dialog_folder.join(&self.save_dialog_filename); - let (_, version) = crate::io::parse_save_format(&self.save_dialog_format); + let (ext, version) = crate::io::parse_save_format(&self.save_dialog_format); + // The user need not type an extension: append the selected + // format's one when the entered name carries none. + let name = self.save_dialog_filename.trim(); + let filename = if name.is_empty() { + format!("drawing.{ext}") + } else if std::path::Path::new(name).extension().is_none() { + format!("{name}.{ext}") + } else { + name.to_string() + }; + self.save_dialog_filename = filename.clone(); + let path = self.save_dialog_folder.join(&filename); let close = self.close_save_dialog_window(); let i = self.active_tab; sync_annotation_scale_header(&mut self.tabs[i].scene);