Defer pane interaction when opening excerpts in diagnostics view

Nathan Sobo created

Activating a new item causes the current item to be deactivated. We're the current item, but we're on the stack, so we panic if we try to do this synchronously. If we use defer to wait until we're off the stack it works.

Change summary

crates/diagnostics/src/diagnostics.rs | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)

Detailed changes

crates/diagnostics/src/diagnostics.rs 🔗

@@ -193,7 +193,10 @@ impl ProjectDiagnosticsEditor {
                 }
             }
 
-            workspace.update(cx, |workspace, cx| {
+            // We defer the pane interaction because we ourselves are a workspace item
+            // and activating a new item causes the pane to call a method on us reentrantly,
+            // which panics if we're on the stack.
+            workspace.defer(cx, |workspace, cx| {
                 for (buffer, ranges) in new_selections_by_buffer {
                     let buffer = BufferItemHandle(buffer);
                     if !workspace.activate_pane_for_item(&buffer, cx) {