Update window edited status when pane item is removed

Antonio Scandurra created

Change summary

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(-)

Detailed changes

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<platform::test::Window> {
-        RefMut::map(self.cx.borrow_mut(), |state| {
+    fn window_mut(&self, window_id: usize) -> std::cell::RefMut<platform::test::Window> {
+        std::cell::RefMut::map(self.cx.borrow_mut(), |state| {
             let (_, window) = state
                 .presenters_and_platform_windows
                 .get_mut(&window_id)

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);

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);

crates/zed/src/zed.rs 🔗

@@ -462,7 +462,10 @@ mod tests {
                 .downcast::<Editor>()
                 .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();