From 456d4b003eaed73ac055ce7ec19ae3d0c4a49bfb Mon Sep 17 00:00:00 2001 From: Jason Rodney Hansen Date: Sun, 14 Dec 2025 09:04:25 -0700 Subject: [PATCH] Ask for confirmation when deleting from trash --- i18n/en/cosmic_files.ftl | 2 +- src/app.rs | 37 +++++++++++++++++++++++++++++++++++-- 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/i18n/en/cosmic_files.ftl b/i18n/en/cosmic_files.ftl index ead8ae2..fc51354 100644 --- a/i18n/en/cosmic_files.ftl +++ b/i18n/en/cosmic_files.ftl @@ -91,7 +91,7 @@ other-apps = Other applications related-apps = Related applications ## Permanently delete Dialog -selected-items = the {$items} selected items +selected-items = The {$items} selected items permanently-delete-question = Permanently delete? delete = Delete permanently-delete-warning = {$target} will be permanently deleted. This action can't be undone. diff --git a/src/app.rs b/src/app.rs index 28de070..e6e0242 100644 --- a/src/app.rs +++ b/src/app.rs @@ -101,6 +101,9 @@ use crate::{ static PERMANENT_DELETE_BUTTON_ID: LazyLock = LazyLock::new(|| widget::Id::new("permanent-delete-button")); +static DELETE_TRASH_BUTTON_ID: LazyLock = + LazyLock::new(|| widget::Id::new("delete-trash-button")); + static CONFIRM_OPEN_WITH_BUTTON_ID: LazyLock = LazyLock::new(|| widget::Id::new("confirm-open-with-button")); @@ -534,6 +537,9 @@ pub enum DialogPage { PermanentlyDelete { paths: Box<[PathBuf]>, }, + DeleteTrash { + items: Vec, + }, RenameItem { from: PathBuf, parent: PathBuf, @@ -2683,8 +2689,10 @@ impl Application for App { } } if !trash_items.is_empty() { - return self - .operation(Operation::DeleteTrash { items: trash_items }); + return self.update(Message::DialogPush( + DialogPage::DeleteTrash { items: trash_items }, + Some(DELETE_TRASH_BUTTON_ID.clone()), + )); } } } else { @@ -2883,6 +2891,9 @@ impl Application for App { DialogPage::PermanentlyDelete { paths } => { tasks.push(self.operation(Operation::PermanentlyDelete { paths })); } + DialogPage::DeleteTrash { items } => { + tasks.push(self.operation(Operation::DeleteTrash { items })); + } DialogPage::RenameItem { from, parent, name, .. } => { @@ -5323,6 +5334,28 @@ impl Application for App { target = target ))) } + DialogPage::DeleteTrash { items } => { + let target = if items.len() == 1 { + format!("\"{}\"", items[0].name.to_string_lossy()) + } else { + fl!("selected-items", items = items.len()) + }; + + widget::dialog() + .title(fl!("permanently-delete-question")) + .primary_action( + widget::button::destructive(fl!("delete")) + .on_press(Message::DialogComplete) + .id(DELETE_TRASH_BUTTON_ID.clone()), + ) + .secondary_action( + widget::button::standard(fl!("cancel")).on_press(Message::DialogCancel), + ) + .control(widget::text(fl!( + "permanently-delete-warning", + target = target + ))) + } DialogPage::RenameItem { from, parent,