Fix item closing overly triggering save dialogues (#21374)
Closes https://github.com/zed-industries/zed/issues/12029 Allows to introspect project items inside items more deeply, checking them for being dirty. For that: * renames `project::Item` into `project::ProjectItem` * adds an `is_dirty(&self) -> bool` method to the renamed trait * changes the closing logic to only care about dirty project items when checking for save prompts conditions * save prompts are raised only if the item is singleton without a project path; or if the item has dirty project items that are not open elsewhere Release Notes: - Fixed item closing overly triggering save dialogues
This commit is contained in:
parent
c2cd84a749
commit
28849dd2a8
19 changed files with 600 additions and 85 deletions
|
@ -111,7 +111,7 @@ const MAX_PROJECT_SEARCH_HISTORY_SIZE: usize = 500;
|
|||
const MAX_SEARCH_RESULT_FILES: usize = 5_000;
|
||||
const MAX_SEARCH_RESULT_RANGES: usize = 10_000;
|
||||
|
||||
pub trait Item {
|
||||
pub trait ProjectItem {
|
||||
fn try_open(
|
||||
project: &Model<Project>,
|
||||
path: &ProjectPath,
|
||||
|
@ -121,6 +121,7 @@ pub trait Item {
|
|||
Self: Sized;
|
||||
fn entry_id(&self, cx: &AppContext) -> Option<ProjectEntryId>;
|
||||
fn project_path(&self, cx: &AppContext) -> Option<ProjectPath>;
|
||||
fn is_dirty(&self) -> bool;
|
||||
}
|
||||
|
||||
#[derive(Clone)]
|
||||
|
@ -4354,7 +4355,7 @@ impl ResolvedPath {
|
|||
}
|
||||
}
|
||||
|
||||
impl Item for Buffer {
|
||||
impl ProjectItem for Buffer {
|
||||
fn try_open(
|
||||
project: &Model<Project>,
|
||||
path: &ProjectPath,
|
||||
|
@ -4373,6 +4374,10 @@ impl Item for Buffer {
|
|||
path: file.path().clone(),
|
||||
})
|
||||
}
|
||||
|
||||
fn is_dirty(&self) -> bool {
|
||||
self.is_dirty()
|
||||
}
|
||||
}
|
||||
|
||||
impl Completion {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue