diff --git a/src/app.rs b/src/app.rs index f71d5c0..257116a 100644 --- a/src/app.rs +++ b/src/app.rs @@ -96,6 +96,7 @@ pub enum Action { DesktopViewOptions, EditHistory, EditLocation, + EmptyTrash, ExtractHere, Gallery, HistoryNext, @@ -155,6 +156,7 @@ impl Action { Action::EditLocation => { Message::TabMessage(entity_opt, tab::Message::EditLocationEnable) } + Action::EmptyTrash => Message::TabMessage(None, tab::Message::EmptyTrash), Action::ExtractHere => Message::ExtractHere(entity_opt), Action::Gallery => Message::TabMessage(entity_opt, tab::Message::GalleryToggle), Action::HistoryNext => Message::TabMessage(entity_opt, tab::Message::GoNext), diff --git a/src/menu.rs b/src/menu.rs index a47cb29..e803e89 100644 --- a/src/menu.rs +++ b/src/menu.rs @@ -89,6 +89,7 @@ pub fn context_menu<'a>( let mut selected_dir = 0; let mut selected = 0; + let mut selected_trash_only = false; let mut selected_types: Vec = vec![]; tab.items_opt().map(|items| { for item in items.iter() { @@ -97,12 +98,16 @@ pub fn context_menu<'a>( if item.metadata.is_dir() { selected_dir += 1; } + if item.location_opt == Some(Location::Trash) { + selected_trash_only = true; + } selected_types.push(item.mime.clone()); } } }); selected_types.sort_unstable(); selected_types.dedup(); + selected_trash_only = selected_trash_only && selected == 1; let mut children: Vec> = Vec::new(); match (&tab.mode, &tab.location) { @@ -110,7 +115,12 @@ pub fn context_menu<'a>( tab::Mode::App | tab::Mode::Desktop, Location::Desktop(..) | Location::Path(..) | Location::Search(..) | Location::Recents, ) => { - if selected > 0 { + if selected_trash_only { + children.push(menu_item(fl!("open"), Action::Open).into()); + if tab::trash_entries() > 0 { + children.push(menu_item(fl!("empty-trash"), Action::EmptyTrash).into()); + } + } else if selected > 0 { if selected_dir == 1 && selected == 1 || selected_dir == 0 { children.push(menu_item(fl!("open"), Action::Open).into()); }