# gpui_macos: Migrate \`PlatformWindow::prompt\` to \`objc2\` on MacOS \(\#59572\) · gitcafe/zed

[View on GitCafe](https://git.cafe/gitcafe/zed/commit/a60addb9a96b171563813f936e43dbecc310ca0b)

Repository: [gitcafe/zed](https://git.cafe/gitcafe/zed)

Visibility: public

Requested revision: a60addb9a96b171563813f936e43dbecc310ca0b

Requested commit: a60addb9a96b171563813f936e43dbecc310ca0b

Commit: a60addb9a96b171563813f936e43dbecc310ca0b

Tree: 1eef59db8fba761f26c2cd0c2edcffe8935249df

Author: tidely

Committer: GitHub

## Message

````
gpui_macos: Migrate `PlatformWindow::prompt` to `objc2` on MacOS (#59572)

# Objective

Rust 1.96 emits a warning when compiling the `block` crate, that it will
no longer compile past some future version of Rust. The `block` crate
provides `ConcreteBlock` and `RcBlock`, which are stack- and heap-based
functions often passed as callbacks to MacOS. The old `objc` crate
family is deprecated and no longer maintained.

The goal of the PR is to replace one call to `block::ConcreteBlock` by
migrating a standalone portion of code to the objc2 crate family. A full
migration to `objc2` by Zed has been long on the horizon (#22408)

Additional benefits: The new code is completely typed, uses automatic
memory management, and reduces lines of unsafe Rust from 50+ to 1. The
lingering unsafe converts a raw pointer stored by `self` to the
respective `objc2` type, since the rest of the window implementation
does not use the new crates yet.

## Solution

Migrate `PlatformWindow::prompt`'s MacOS implementation to `objc2`.

## Testing

Direct platform code is quite fragile and hard to test, however you can
exercise the codepath by running the following `gpui` example and
clicking on the prompt buttons.

```sh
cargo run -p gpui --example window
```

I've also built Zed with these changes and tried codepaths which
activate prompts, such as deleting a file.

## Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content adheres to Zed's UI standards
([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
and
[icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md)
guidelines)
- [ ] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

---

Release Notes:

- N/A or Added/Fixed/Improved ...
````

## Parents

- [98c6c1403b14463d6274b791f5a5471cdb4345f3](https://git.cafe/gitcafe/zed/commit/98c6c1403b14463d6274b791f5a5471cdb4345f3?format=markdown)

[Source at this commit](https://git.cafe/gitcafe/zed/tree/a60addb9a96b171563813f936e43dbecc310ca0b?format=markdown)
