feat: view folder's content in trash
- [x] I have disclosed use of any AI generated code in my commit messages. - If you are using an LLM, and do not fully understand the changes it is making to the code base, do not create a PR. - In our experience, AI generated code often results in overly complex code that lacks enough context for a proper fix or feature inclusion. This results in considerably longer code reviews. Due to this, AI authored or partially authored PRs may be closed without comment. - [x] I understand these changes in full and will be able to respond to review comments. - [x] My change is accurately described in the commit message. - [x] My contribution is tested and working as described. - [x] I have read the [Developer Certificate of Origin](https://developercertificate.org/) and certify my contribution under its conditions.
This commit is contained in:
parent
50deb28a11
commit
49107187a4
6 changed files with 154 additions and 29 deletions
51
src/menu.rs
51
src/menu.rs
|
|
@ -18,7 +18,9 @@ use std::sync::LazyLock;
|
|||
use crate::app::{Action, Message};
|
||||
use crate::config::{Config, ContextActionPreset};
|
||||
use crate::fl;
|
||||
use crate::tab::{self, HeadingOptions, Location, LocationMenuAction, SearchLocation, Tab};
|
||||
use crate::tab::{
|
||||
self, HeadingOptions, ItemMetadata, Location, LocationMenuAction, SearchLocation, Tab,
|
||||
};
|
||||
use crate::trash::{Trash, TrashExt};
|
||||
|
||||
static MENU_ID: LazyLock<cosmic::widget::Id> =
|
||||
|
|
@ -135,6 +137,7 @@ pub fn context_menu<'a>(
|
|||
let mut selected_desktop_entry = None;
|
||||
let mut selected_types: Vec<Mime> = vec![];
|
||||
let mut selected_mount_point = 0;
|
||||
let mut any_trash_item = false;
|
||||
if let Some(items) = tab.items_opt() {
|
||||
for item in items {
|
||||
if item.selected {
|
||||
|
|
@ -155,6 +158,9 @@ pub fn context_menu<'a>(
|
|||
}
|
||||
_ => (),
|
||||
}
|
||||
if matches!(&item.metadata, ItemMetadata::Trash { .. }) {
|
||||
any_trash_item = true;
|
||||
}
|
||||
selected_types.push(item.mime.clone());
|
||||
}
|
||||
}
|
||||
|
|
@ -276,27 +282,38 @@ pub fn context_menu<'a>(
|
|||
|
||||
//TODO: Print?
|
||||
children.push(menu_item(fl!("show-details"), Action::Preview).into());
|
||||
if matches!(tab.mode, tab::Mode::App) {
|
||||
if any_trash_item {
|
||||
children.push(divider::horizontal::light().into());
|
||||
children.push(menu_item(fl!("add-to-sidebar"), Action::AddToSidebar).into());
|
||||
}
|
||||
children.push(divider::horizontal::light().into());
|
||||
if tab.location.is_recents() {
|
||||
children.push(
|
||||
menu_item(fl!("remove-from-recents"), Action::RemoveFromRecents).into(),
|
||||
menu_item(fl!("restore-from-trash"), Action::RestoreFromTrash).into(),
|
||||
);
|
||||
children.push(divider::horizontal::light().into());
|
||||
}
|
||||
if selected_mount_point == 0 {
|
||||
if modifiers.shift() && !modifiers.control() {
|
||||
children.push(
|
||||
menu_item(fl!("delete-permanently"), Action::PermanentlyDelete).into(),
|
||||
);
|
||||
} else {
|
||||
children.push(menu_item(fl!("move-to-trash"), Action::Delete).into());
|
||||
children.push(menu_item(fl!("delete-permanently"), Action::Delete).into());
|
||||
} else {
|
||||
if matches!(tab.mode, tab::Mode::App) {
|
||||
children.push(divider::horizontal::light().into());
|
||||
children
|
||||
.push(menu_item(fl!("add-to-sidebar"), Action::AddToSidebar).into());
|
||||
}
|
||||
children.push(divider::horizontal::light().into());
|
||||
if tab.location.is_recents() {
|
||||
children.push(
|
||||
menu_item(fl!("remove-from-recents"), Action::RemoveFromRecents).into(),
|
||||
);
|
||||
children.push(divider::horizontal::light().into());
|
||||
}
|
||||
if selected_mount_point == 0 {
|
||||
if modifiers.shift() && !modifiers.control() {
|
||||
children.push(
|
||||
menu_item(fl!("delete-permanently"), Action::PermanentlyDelete)
|
||||
.into(),
|
||||
);
|
||||
} else {
|
||||
children.push(menu_item(fl!("move-to-trash"), Action::Delete).into());
|
||||
}
|
||||
} else if selected == 1 {
|
||||
children.push(menu_item(fl!("eject"), Action::Eject).into());
|
||||
}
|
||||
} else if selected == 1 {
|
||||
children.push(menu_item(fl!("eject"), Action::Eject).into());
|
||||
}
|
||||
} else {
|
||||
//TODO: need better designs for menu with no selection
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue