Render panel in this test to make sure it can receive focus

Julia created

Change summary

crates/gpui2/src/app.rs                    |  1 -
crates/gpui2/src/window.rs                 | 11 ++++++-----
crates/project_panel2/src/project_panel.rs | 10 +++++++---
crates/workspace2/src/workspace2.rs        |  1 +
4 files changed, 14 insertions(+), 9 deletions(-)

Detailed changes

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::<Vec<_>>()

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

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

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