Revert "Remove borrow from reveal_path()"

Mikayla Maki created

Change summary

crates/gpui/src/app.rs                   |  2 
crates/gpui/src/platform/mac.rs          |  8 +++++-
crates/gpui/src/platform/mac/platform.rs | 27 +++++++++++++++++--------
3 files changed, 25 insertions(+), 12 deletions(-)

Detailed changes

crates/gpui/src/app.rs 🔗

@@ -191,7 +191,7 @@ impl App {
     pub fn new(asset_source: impl AssetSource) -> Result<Self> {
         let platform = platform::current::platform();
         let foreground = Rc::new(executor::Foreground::platform(platform.dispatcher())?);
-        let foreground_platform = platform::current::foreground_platform();
+        let foreground_platform = platform::current::foreground_platform(foreground.clone());
         let app = Self(Rc::new(RefCell::new(MutableAppContext::new(
             foreground,
             Arc::new(executor::Background::new()),

crates/gpui/src/platform/mac.rs 🔗

@@ -23,12 +23,16 @@ pub use renderer::Surface;
 use std::{ops::Range, rc::Rc, sync::Arc};
 use window::Window;
 
+use crate::executor;
+
 pub(crate) fn platform() -> Arc<dyn super::Platform> {
     Arc::new(MacPlatform::new())
 }
 
-pub(crate) fn foreground_platform() -> Rc<dyn super::ForegroundPlatform> {
-    Rc::new(MacForegroundPlatform::new())
+pub(crate) fn foreground_platform(
+    foreground: Rc<executor::Foreground>,
+) -> Rc<dyn super::ForegroundPlatform> {
+    Rc::new(MacForegroundPlatform::new(foreground))
 }
 
 trait BoolExt {

crates/gpui/src/platform/mac/platform.rs 🔗

@@ -152,10 +152,11 @@ pub struct MacForegroundPlatformState {
     open_urls: Option<Box<dyn FnMut(Vec<String>)>>,
     finish_launching: Option<Box<dyn FnOnce()>>,
     menu_actions: Vec<Box<dyn Action>>,
+    foreground: Rc<executor::Foreground>,
 }
 
 impl MacForegroundPlatform {
-    pub fn new() -> Self {
+    pub fn new(foreground: Rc<executor::Foreground>) -> Self {
         Self(RefCell::new(MacForegroundPlatformState {
             become_active: Default::default(),
             resign_active: Default::default(),
@@ -167,6 +168,7 @@ impl MacForegroundPlatform {
             open_urls: Default::default(),
             finish_launching: Default::default(),
             menu_actions: Default::default(),
+            foreground,
         }))
     }
 
@@ -454,14 +456,21 @@ impl platform::ForegroundPlatform for MacForegroundPlatform {
 
     fn reveal_path(&self, path: &Path) {
         unsafe {
-            let full_path = ns_string(path.to_str().unwrap_or(""));
-            let root_full_path = ns_string("");
-            let workspace: id = msg_send![class!(NSWorkspace), sharedWorkspace];
-            let _: BOOL = msg_send![
-                workspace,
-                selectFile: full_path
-                inFileViewerRootedAtPath: root_full_path
-            ];
+            let path = path.to_path_buf();
+            self.0
+                .borrow()
+                .foreground
+                .spawn(async move {
+                    let full_path = ns_string(path.to_str().unwrap_or(""));
+                    let root_full_path = ns_string("");
+                    let workspace: id = msg_send![class!(NSWorkspace), sharedWorkspace];
+                    let _: BOOL = msg_send![
+                        workspace,
+                        selectFile: full_path
+                        inFileViewerRootedAtPath: root_full_path
+                    ];
+                })
+                .detach();
         }
     }
 }