From 8341ea8b54afb102f349f9afd9f4e87933703e26 Mon Sep 17 00:00:00 2001 From: electricmessiah Date: Wed, 8 Jul 2026 17:59:54 -0400 Subject: [PATCH 1/2] Feat: prefill Save dialog with current tab name --- src/platform/win32.rs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/platform/win32.rs b/src/platform/win32.rs index db63363..7d46b7f 100644 --- a/src/platform/win32.rs +++ b/src/platform/win32.rs @@ -1,4 +1,6 @@ +use std::ffi::OsStr; use std::io::BufRead; +use std::os::windows::ffi::OsStrExt; use std::path::{Path, PathBuf}; use std::sync::Arc; use std::sync::atomic::{AtomicBool, Ordering}; @@ -2748,7 +2750,7 @@ fn save_document_at( encoding_override: Option, force_save_as: bool, ) -> Result { - let (encoding, existing_path) = { + let (encoding, existing_path, display_name) = { let doc_tab = state .docs .get(index) @@ -2756,10 +2758,11 @@ fn save_document_at( ( encoding_override.unwrap_or(doc_tab.doc.encoding), doc_tab.doc.path.clone(), + doc_tab.doc.display_name.clone(), ) }; let path = if force_save_as || existing_path.is_none() { - match save_file_dialog(hwnd)? { + match save_file_dialog(hwnd, &display_name)? { Some(path) => path, None => return Ok(false), } @@ -5862,8 +5865,14 @@ fn open_file_dialog(hwnd: HWND) -> Result> { ))) } -fn save_file_dialog(hwnd: HWND) -> Result> { +fn save_file_dialog(hwnd: HWND, default_name: &str) -> Result> { let mut buffer = vec![0u16; 1024]; + let default_wide: Vec = OsStr::new(default_name) + .encode_wide() + .filter(|&unit| unit != 0) + .collect(); + let copy_len = default_wide.len().min(buffer.len() - 1); + buffer[..copy_len].copy_from_slice(&default_wide[..copy_len]); let filter = w!("All Files\0*.*\0\0"); let mut ofn = OPENFILENAMEW { From c05f9d3fb4304dc622d688535e187a316b2e0f8e Mon Sep 17 00:00:00 2001 From: electricmessiah Date: Wed, 8 Jul 2026 18:03:28 -0400 Subject: [PATCH 2/2] Fix: default Save dialog to .txt extension when none typed --- src/platform/win32.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/platform/win32.rs b/src/platform/win32.rs index 7d46b7f..d9c1f04 100644 --- a/src/platform/win32.rs +++ b/src/platform/win32.rs @@ -5874,6 +5874,7 @@ fn save_file_dialog(hwnd: HWND, default_name: &str) -> Result> { let copy_len = default_wide.len().min(buffer.len() - 1); buffer[..copy_len].copy_from_slice(&default_wide[..copy_len]); let filter = w!("All Files\0*.*\0\0"); + let def_ext = w!("txt"); let mut ofn = OPENFILENAMEW { lStructSize: std::mem::size_of::() as u32, @@ -5881,6 +5882,7 @@ fn save_file_dialog(hwnd: HWND, default_name: &str) -> Result> { lpstrFile: PWSTR(buffer.as_mut_ptr()), nMaxFile: buffer.len() as u32, lpstrFilter: PCWSTR(filter.as_ptr()), + lpstrDefExt: PCWSTR(def_ext.as_ptr()), Flags: OFN_EXPLORER | OFN_PATHMUSTEXIST | OFN_OVERWRITEPROMPT, ..Default::default() };