From 2c8f144e6b26d029e64821dfcabc3a6c060329a1 Mon Sep 17 00:00:00 2001 From: Smit Barmase Date: Mon, 4 Aug 2025 23:08:22 +0530 Subject: [PATCH] workspace: Fix not able to close tab when buffer save fails (#35589) Closes #26216, Closes #35517 Now we prompt user if buffer save failed, asking them to close without saving or cancel the action. Release Notes: - Fixed issue where closing read-only or deleted buffer would not close that tab. Co-authored-by: Lukas Wirth --- crates/workspace/src/pane.rs | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/crates/workspace/src/pane.rs b/crates/workspace/src/pane.rs index ad1c74a040..2062255f4b 100644 --- a/crates/workspace/src/pane.rs +++ b/crates/workspace/src/pane.rs @@ -1664,10 +1664,33 @@ impl Pane { } if should_save { - if !Self::save_item(project.clone(), &pane, &*item_to_close, save_intent, cx) - .await? + match Self::save_item(project.clone(), &pane, &*item_to_close, save_intent, cx) + .await { - break; + Ok(success) => { + if !success { + break; + } + } + Err(err) => { + let answer = pane.update_in(cx, |_, window, cx| { + let detail = Self::file_names_for_prompt( + &mut [&item_to_close].into_iter(), + cx, + ); + window.prompt( + PromptLevel::Warning, + &format!("Unable to save file: {}", &err), + Some(&detail), + &["Close Without Saving", "Cancel"], + cx, + ) + })?; + match answer.await { + Ok(0) => {} + Ok(1..) | Err(_) => break, + } + } } }