diff --git a/crates/gpui2/src/app.rs b/crates/gpui2/src/app.rs index deb03498bc7d1783aac36acdd8bb88428d7c5c64..771b56115198441d4f14506639d391cb7897747f 100644 --- a/crates/gpui2/src/app.rs +++ b/crates/gpui2/src/app.rs @@ -611,7 +611,6 @@ impl AppContext { .values() .filter_map(|window| { let window = window.as_ref()?; - dbg!(window.focus_invalidated); (window.dirty || window.focus_invalidated).then_some(window.handle) }) .collect::>() diff --git a/crates/gpui2/src/window.rs b/crates/gpui2/src/window.rs index 895ae788627aa7d608762cef2ca0c4b6b4bbd15e..557b2155f86caa58f3509c8120eda6bf223c28e7 100644 --- a/crates/gpui2/src/window.rs +++ b/crates/gpui2/src/window.rs @@ -470,6 +470,7 @@ impl<'a> WindowContext<'a> { #[cfg(any(test, feature = "test-support"))] { + println!("invalidating focus"); self.window.focus_invalidated = true; } @@ -1237,6 +1238,11 @@ impl<'a> WindowContext<'a> { /// Draw pixels to the display for this window based on the contents of its scene. pub(crate) fn draw(&mut self) -> Scene { + #[cfg(any(test, feature = "test-support"))] + { + self.window.focus_invalidated = false; + } + self.text_system().start_frame(); self.window.platform_window.clear_input_handler(); self.window.layout_engine.as_mut().unwrap().clear(); @@ -1290,11 +1296,6 @@ impl<'a> WindowContext<'a> { let current_focus_path = self.window.rendered_frame.focus_path(); if previous_focus_path != current_focus_path { - #[cfg(any(test, feature = "test-support"))] - { - self.window.focus_invalidated = false; - } - if !previous_focus_path.is_empty() && current_focus_path.is_empty() { self.window .blur_listeners diff --git a/crates/project_panel2/src/project_panel.rs b/crates/project_panel2/src/project_panel.rs index 5e71266c2177c857d6d5fbd6f34c1d3f59ef68da..f7789c1a62af282840bc53acdcf5758a6257dd8c 100644 --- a/crates/project_panel2/src/project_panel.rs +++ b/crates/project_panel2/src/project_panel.rs @@ -739,7 +739,6 @@ impl ProjectPanel { }); self.filename_editor.update(cx, |editor, cx| { editor.clear(cx); - println!("focusing"); editor.focus(cx); }); self.update_visible_entries(Some((worktree_id, NEW_ENTRY_ID)), cx); @@ -1672,7 +1671,7 @@ mod tests { path::{Path, PathBuf}, sync::atomic::{self, AtomicUsize}, }; - use workspace::AppState; + use workspace::{dock::PanelHandle, AppState}; #[gpui::test] async fn test_visible_list(cx: &mut gpui::TestAppContext) { @@ -2281,7 +2280,12 @@ mod tests { let workspace = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); let cx = &mut VisualTestContext::from_window(*workspace, cx); let panel = workspace - .update(cx, |workspace, cx| ProjectPanel::new(workspace, cx)) + .update(cx, |workspace, cx| { + let panel = ProjectPanel::new(workspace, cx); + workspace.add_panel(panel.clone(), cx); + workspace.toggle_dock(panel.read(cx).position(cx), cx); + panel + }) .unwrap(); select_path(&panel, "root1", cx); diff --git a/crates/workspace2/src/workspace2.rs b/crates/workspace2/src/workspace2.rs index a7dc76f41da49fe4bf9139ed2bf7b0ae8b6f4b23..3cfb1f2458dfb2cfd90a3aa28790c457642ce3a6 100644 --- a/crates/workspace2/src/workspace2.rs +++ b/crates/workspace2/src/workspace2.rs @@ -532,6 +532,7 @@ impl Workspace { cx.notify() }) .detach(); + cx.on_blur_window(|this, cx| { let focus_handle = this.focus_handle(cx); cx.focus(&focus_handle);