Add confirm_quit setting

This commit is contained in:
Max Brunsfeld 2023-01-20 13:02:38 -08:00
parent be2c601176
commit 2f42af2ac3
5 changed files with 31 additions and 13 deletions

View file

@ -14,6 +14,7 @@ use collections::VecDeque;
pub use editor;
use editor::{Editor, MultiBuffer};
use futures::StreamExt;
use gpui::{
actions,
geometry::{
@ -22,7 +23,8 @@ use gpui::{
},
impl_actions,
platform::{WindowBounds, WindowOptions},
AssetSource, AsyncAppContext, ClipboardItem, TitlebarOptions, ViewContext, WindowKind,
AssetSource, AsyncAppContext, ClipboardItem, PromptLevel, TitlebarOptions, ViewContext,
WindowKind,
};
use language::Rope;
use lazy_static::lazy_static;
@ -421,7 +423,25 @@ fn quit(_: &Quit, cx: &mut gpui::MutableAppContext) {
// prompt in the active window before switching to a different window.
workspaces.sort_by_key(|workspace| !cx.window_is_active(workspace.window_id()));
let should_confirm = cx.global::<Settings>().confirm_quit;
cx.spawn(|mut cx| async move {
dbg!(should_confirm, workspaces.first());
if let (true, Some(workspace)) = (should_confirm, workspaces.first()) {
let answer = cx
.prompt(
workspace.window_id(),
PromptLevel::Info,
"Are you sure you want to quit?",
&["Quit", "Cancel"],
)
.next()
.await;
if answer != Some(0) {
return Ok(());
}
}
// If the user cancels any save prompt, then keep the app open.
for workspace in workspaces {
if !workspace