Defer hiding the dock and going back/forward when Pane is on the stack

Antonio Scandurra created

Change summary

crates/workspace/src/pane.rs    |  8 +++++---
crates/workspace/src/toolbar.rs | 20 +++++++++++++-------
2 files changed, 18 insertions(+), 10 deletions(-)

Detailed changes

crates/workspace/src/pane.rs 🔗

@@ -1645,9 +1645,11 @@ impl Pane {
                     cx,
                     |this, cx| {
                         if let Some(workspace) = this.workspace.upgrade(cx) {
-                            workspace.update(cx, |workspace, cx| {
-                                Dock::hide_dock(workspace, &Default::default(), cx)
-                            })
+                            cx.window_context().defer(move |cx| {
+                                workspace.update(cx, |workspace, cx| {
+                                    Dock::hide_dock(workspace, &Default::default(), cx)
+                                })
+                            });
                         }
                     },
                     None,

crates/workspace/src/toolbar.rs 🔗

@@ -138,10 +138,13 @@ impl View for Toolbar {
                                     .upgrade(cx)
                                     .and_then(|pane| pane.read(cx).workspace().upgrade(cx))
                                 {
-                                    workspace.update(cx, |workspace, cx| {
-                                        Pane::go_back(workspace, Some(pane.clone()), cx)
-                                            .detach_and_log_err(cx);
-                                    });
+                                    let pane = pane.clone();
+                                    cx.window_context().defer(move |cx| {
+                                        workspace.update(cx, |workspace, cx| {
+                                            Pane::go_back(workspace, Some(pane.clone()), cx)
+                                                .detach_and_log_err(cx);
+                                        });
+                                    })
                                 }
                             }
                         },
@@ -163,9 +166,12 @@ impl View for Toolbar {
                                     .upgrade(cx)
                                     .and_then(|pane| pane.read(cx).workspace().upgrade(cx))
                                 {
-                                    workspace.update(cx, |workspace, cx| {
-                                        Pane::go_forward(workspace, Some(pane.clone()), cx)
-                                            .detach_and_log_err(cx);
+                                    let pane = pane.clone();
+                                    cx.window_context().defer(move |cx| {
+                                        workspace.update(cx, |workspace, cx| {
+                                            Pane::go_forward(workspace, Some(pane.clone()), cx)
+                                                .detach_and_log_err(cx);
+                                        });
                                     });
                                 }
                             }