Fix memory leak of `ProjectPanel`

Antonio Scandurra and Nathan Sobo created

Co-Authored-By: Nathan Sobo <nathan@zed.dev>

Change summary

crates/project_panel/src/project_panel.rs | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)

Detailed changes

crates/project_panel/src/project_panel.rs 🔗

@@ -161,7 +161,7 @@ impl ProjectPanel {
             this
         });
         cx.subscribe(&project_panel, {
-            let project_panel = project_panel.clone();
+            let project_panel = project_panel.downgrade();
             move |workspace, _, event, cx| match event {
                 &Event::OpenedEntry {
                     entry_id,
@@ -180,7 +180,9 @@ impl ProjectPanel {
                                 )
                                 .detach_and_log_err(cx);
                             if !focus_opened_item {
-                                cx.focus(&project_panel);
+                                if let Some(project_panel) = project_panel.upgrade(cx) {
+                                    cx.focus(&project_panel);
+                                }
                             }
                         }
                     }