From a21dbdd0d66234d7cd0e338d7d16ac1964750421 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Thu, 23 Jun 2022 14:28:10 +0200 Subject: [PATCH] Update window edited status when pane item is removed --- crates/gpui/src/app.rs | 6 +++--- crates/workspace/src/pane.rs | 2 ++ crates/workspace/src/workspace.rs | 3 +++ crates/zed/src/zed.rs | 3 +++ 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/crates/gpui/src/app.rs b/crates/gpui/src/app.rs index 245ee0da1e..5fa5544808 100644 --- a/crates/gpui/src/app.rs +++ b/crates/gpui/src/app.rs @@ -22,7 +22,7 @@ use smallvec::SmallVec; use smol::prelude::*; use std::{ any::{type_name, Any, TypeId}, - cell::{RefCell, RefMut}, + cell::RefCell, collections::{hash_map::Entry, BTreeMap, HashMap, HashSet, VecDeque}, fmt::{self, Debug}, hash::{Hash, Hasher}, @@ -567,8 +567,8 @@ impl TestAppContext { .assert_dropped(handle.id()) } - fn window_mut(&self, window_id: usize) -> RefMut { - RefMut::map(self.cx.borrow_mut(), |state| { + fn window_mut(&self, window_id: usize) -> std::cell::RefMut { + std::cell::RefMut::map(self.cx.borrow_mut(), |state| { let (_, window) = state .presenters_and_platform_windows .get_mut(&window_id) diff --git a/crates/workspace/src/pane.rs b/crates/workspace/src/pane.rs index f790912c5c..09051d7266 100644 --- a/crates/workspace/src/pane.rs +++ b/crates/workspace/src/pane.rs @@ -110,6 +110,7 @@ pub enum Event { Activate, ActivateItem { local: bool }, Remove, + RemoveItem, Split(SplitDirection), ChangeItemTitle, } @@ -575,6 +576,7 @@ impl Pane { } let item = pane.items.remove(item_ix); + cx.emit(Event::RemoveItem); if pane.items.is_empty() { item.deactivated(cx); pane.update_toolbar(cx); diff --git a/crates/workspace/src/workspace.rs b/crates/workspace/src/workspace.rs index 0a7c0c1e82..942e9a091a 100644 --- a/crates/workspace/src/workspace.rs +++ b/crates/workspace/src/workspace.rs @@ -1482,6 +1482,9 @@ impl Workspace { } self.update_window_edited(cx); } + pane::Event::RemoveItem => { + self.update_window_edited(cx); + } } } else { error!("pane {} not found", pane_id); diff --git a/crates/zed/src/zed.rs b/crates/zed/src/zed.rs index 0f869d5b5b..0f5e561b04 100644 --- a/crates/zed/src/zed.rs +++ b/crates/zed/src/zed.rs @@ -462,7 +462,10 @@ mod tests { .downcast::() .unwrap() }); + assert!(!cx.is_window_edited(workspace.window_id())); + editor.update(cx, |editor, cx| editor.insert("EDIT", cx)); + assert!(cx.is_window_edited(workspace.window_id())); assert!(!cx.simulate_window_close(workspace.window_id())); executor.run_until_parked();