Merge pull request #598 from joshuamegnauth54/desktop-view-empty-trash

fix: Trash icons should show the trash menu
This commit is contained in:
Jeremy Soller 2024-10-16 21:07:04 -06:00 committed by GitHub
commit d29baf1a8f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 13 additions and 1 deletions

View file

@ -96,6 +96,7 @@ pub enum Action {
DesktopViewOptions, DesktopViewOptions,
EditHistory, EditHistory,
EditLocation, EditLocation,
EmptyTrash,
ExtractHere, ExtractHere,
Gallery, Gallery,
HistoryNext, HistoryNext,
@ -155,6 +156,7 @@ impl Action {
Action::EditLocation => { Action::EditLocation => {
Message::TabMessage(entity_opt, tab::Message::EditLocationEnable) Message::TabMessage(entity_opt, tab::Message::EditLocationEnable)
} }
Action::EmptyTrash => Message::TabMessage(None, tab::Message::EmptyTrash),
Action::ExtractHere => Message::ExtractHere(entity_opt), Action::ExtractHere => Message::ExtractHere(entity_opt),
Action::Gallery => Message::TabMessage(entity_opt, tab::Message::GalleryToggle), Action::Gallery => Message::TabMessage(entity_opt, tab::Message::GalleryToggle),
Action::HistoryNext => Message::TabMessage(entity_opt, tab::Message::GoNext), Action::HistoryNext => Message::TabMessage(entity_opt, tab::Message::GoNext),

View file

@ -89,6 +89,7 @@ pub fn context_menu<'a>(
let mut selected_dir = 0; let mut selected_dir = 0;
let mut selected = 0; let mut selected = 0;
let mut selected_trash_only = false;
let mut selected_types: Vec<Mime> = vec![]; let mut selected_types: Vec<Mime> = vec![];
tab.items_opt().map(|items| { tab.items_opt().map(|items| {
for item in items.iter() { for item in items.iter() {
@ -97,12 +98,16 @@ pub fn context_menu<'a>(
if item.metadata.is_dir() { if item.metadata.is_dir() {
selected_dir += 1; selected_dir += 1;
} }
if item.location_opt == Some(Location::Trash) {
selected_trash_only = true;
}
selected_types.push(item.mime.clone()); selected_types.push(item.mime.clone());
} }
} }
}); });
selected_types.sort_unstable(); selected_types.sort_unstable();
selected_types.dedup(); selected_types.dedup();
selected_trash_only = selected_trash_only && selected == 1;
let mut children: Vec<Element<_>> = Vec::new(); let mut children: Vec<Element<_>> = Vec::new();
match (&tab.mode, &tab.location) { match (&tab.mode, &tab.location) {
@ -110,7 +115,12 @@ pub fn context_menu<'a>(
tab::Mode::App | tab::Mode::Desktop, tab::Mode::App | tab::Mode::Desktop,
Location::Desktop(..) | Location::Path(..) | Location::Search(..) | Location::Recents, 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 { if selected_dir == 1 && selected == 1 || selected_dir == 0 {
children.push(menu_item(fl!("open"), Action::Open).into()); children.push(menu_item(fl!("open"), Action::Open).into());
} }