Compare commits
2 commits
542657b557
...
9e0c2726ef
| Author | SHA1 | Date | |
|---|---|---|---|
| 9e0c2726ef | |||
| 30e562c8c2 |
2 changed files with 93 additions and 82 deletions
169
src/app.rs
169
src/app.rs
|
|
@ -2833,94 +2833,99 @@ impl Application for App {
|
|||
fn nav_context_menu(
|
||||
&self,
|
||||
) -> Option<Vec<widget::menu::Tree<cosmic::Action<Self::Message>>>> {
|
||||
let entity = self.nav_bar_context_id;
|
||||
let favorite_index_opt = self.nav_model.data::<FavoriteIndex>(entity);
|
||||
let location_opt = self.nav_model.data::<Location>(entity);
|
||||
let items = self.nav_model.iter().map(|entity| {
|
||||
let favorite_index_opt = self.nav_model.data::<FavoriteIndex>(entity);
|
||||
let location_opt = self.nav_model.data::<Location>(entity);
|
||||
|
||||
let mut items = Vec::with_capacity(7);
|
||||
let mut items = Vec::with_capacity(7);
|
||||
|
||||
if location_opt
|
||||
.and_then(Location::path_opt)
|
||||
.is_some_and(|x| x.is_file())
|
||||
{
|
||||
items.push(cosmic::widget::menu::Item::Button(
|
||||
fl!("open"),
|
||||
None,
|
||||
NavMenuAction::Open(entity),
|
||||
));
|
||||
items.push(cosmic::widget::menu::Item::Button(
|
||||
fl!("menu-open-with"),
|
||||
None,
|
||||
NavMenuAction::OpenWith(entity),
|
||||
));
|
||||
} else {
|
||||
items.push(cosmic::widget::menu::Item::Button(
|
||||
fl!("open-in-new-tab"),
|
||||
None,
|
||||
NavMenuAction::OpenInNewTab(entity),
|
||||
));
|
||||
items.push(cosmic::widget::menu::Item::Button(
|
||||
fl!("open-in-new-window"),
|
||||
None,
|
||||
NavMenuAction::OpenInNewWindow(entity),
|
||||
));
|
||||
}
|
||||
if let Some(path) = location_opt.and_then(Location::path_opt) {
|
||||
let selected_dir = usize::from(path.is_dir());
|
||||
let action_items: Vec<_> = self
|
||||
.config
|
||||
.context_actions
|
||||
.iter()
|
||||
.enumerate()
|
||||
.filter(|(_, action)| action.matches_selection(1, selected_dir))
|
||||
.map(|(i, action)| {
|
||||
cosmic::widget::menu::Item::Button(
|
||||
action.name.clone(),
|
||||
None,
|
||||
NavMenuAction::RunContextAction(entity, i),
|
||||
)
|
||||
})
|
||||
.collect();
|
||||
|
||||
if !action_items.is_empty() {
|
||||
items.push(cosmic::widget::menu::Item::Divider);
|
||||
items.extend(action_items);
|
||||
if location_opt
|
||||
.and_then(Location::path_opt)
|
||||
.is_some_and(|x| x.is_file())
|
||||
{
|
||||
items.push(cosmic::widget::menu::Item::Button(
|
||||
fl!("open"),
|
||||
None,
|
||||
NavMenuAction::Open(entity),
|
||||
));
|
||||
items.push(cosmic::widget::menu::Item::Button(
|
||||
fl!("menu-open-with"),
|
||||
None,
|
||||
NavMenuAction::OpenWith(entity),
|
||||
));
|
||||
} else {
|
||||
items.push(cosmic::widget::menu::Item::Button(
|
||||
fl!("open-in-new-tab"),
|
||||
None,
|
||||
NavMenuAction::OpenInNewTab(entity),
|
||||
));
|
||||
items.push(cosmic::widget::menu::Item::Button(
|
||||
fl!("open-in-new-window"),
|
||||
None,
|
||||
NavMenuAction::OpenInNewWindow(entity),
|
||||
));
|
||||
}
|
||||
}
|
||||
items.push(cosmic::widget::menu::Item::Divider);
|
||||
if matches!(location_opt, Some(Location::Path(..))) {
|
||||
items.push(cosmic::widget::menu::Item::Button(
|
||||
fl!("show-details"),
|
||||
None,
|
||||
NavMenuAction::Preview(entity),
|
||||
));
|
||||
}
|
||||
items.push(cosmic::widget::menu::Item::Divider);
|
||||
if favorite_index_opt.is_some() {
|
||||
items.push(cosmic::widget::menu::Item::Button(
|
||||
fl!("remove-from-sidebar"),
|
||||
None,
|
||||
NavMenuAction::RemoveFromSidebar(entity),
|
||||
));
|
||||
}
|
||||
if let Some(path) = location_opt.and_then(Location::path_opt) {
|
||||
let selected_dir = usize::from(path.is_dir());
|
||||
let action_items: Vec<_> = self
|
||||
.config
|
||||
.context_actions
|
||||
.iter()
|
||||
.enumerate()
|
||||
.filter(|(_, action)| action.matches_selection(1, selected_dir))
|
||||
.map(|(i, action)| {
|
||||
cosmic::widget::menu::Item::Button(
|
||||
action.name.clone(),
|
||||
None,
|
||||
NavMenuAction::RunContextAction(entity, i),
|
||||
)
|
||||
})
|
||||
.collect();
|
||||
|
||||
if matches!(location_opt, Some(Location::Recents)) && tab::has_recents() {
|
||||
items.push(cosmic::widget::menu::Item::Button(
|
||||
fl!("clear-recents-history"),
|
||||
None,
|
||||
NavMenuAction::ClearRecents,
|
||||
));
|
||||
}
|
||||
if !action_items.is_empty() {
|
||||
items.push(cosmic::widget::menu::Item::Divider);
|
||||
items.extend(action_items);
|
||||
}
|
||||
}
|
||||
items.push(cosmic::widget::menu::Item::Divider);
|
||||
if matches!(location_opt, Some(Location::Path(..))) {
|
||||
items.push(cosmic::widget::menu::Item::Button(
|
||||
fl!("show-details"),
|
||||
None,
|
||||
NavMenuAction::Preview(entity),
|
||||
));
|
||||
}
|
||||
items.push(cosmic::widget::menu::Item::Divider);
|
||||
if favorite_index_opt.is_some() {
|
||||
items.push(cosmic::widget::menu::Item::Button(
|
||||
fl!("remove-from-sidebar"),
|
||||
None,
|
||||
NavMenuAction::RemoveFromSidebar(entity),
|
||||
));
|
||||
}
|
||||
|
||||
if matches!(location_opt, Some(Location::Trash)) && !Trash::is_empty() {
|
||||
items.push(cosmic::widget::menu::Item::Button(
|
||||
fl!("empty-trash"),
|
||||
None,
|
||||
NavMenuAction::EmptyTrash,
|
||||
));
|
||||
}
|
||||
if matches!(location_opt, Some(Location::Recents)) && tab::has_recents() {
|
||||
items.push(cosmic::widget::menu::Item::Button(
|
||||
fl!("clear-recents-history"),
|
||||
None,
|
||||
NavMenuAction::ClearRecents,
|
||||
));
|
||||
}
|
||||
|
||||
Some(cosmic::widget::menu::items(&HashMap::new(), items))
|
||||
if matches!(location_opt, Some(Location::Trash)) && !Trash::is_empty() {
|
||||
items.push(cosmic::widget::menu::Item::Button(
|
||||
fl!("empty-trash"),
|
||||
None,
|
||||
NavMenuAction::EmptyTrash,
|
||||
));
|
||||
}
|
||||
items
|
||||
});
|
||||
|
||||
Some(cosmic::widget::menu::nav_context(
|
||||
&HashMap::new(),
|
||||
items.collect(),
|
||||
))
|
||||
}
|
||||
|
||||
fn nav_model(&self) -> Option<&segmented_button::SingleSelectModel> {
|
||||
|
|
|
|||
|
|
@ -418,6 +418,12 @@ pub fn context_menu<'a>(
|
|||
if tab.mode.multiple() {
|
||||
children.push(menu_item(fl!("select-all"), Action::SelectAll).into());
|
||||
}
|
||||
if !Trash::is_empty() {
|
||||
if !children.is_empty() {
|
||||
children.push(divider::horizontal::light().into());
|
||||
}
|
||||
children.push(menu_item(fl!("empty-trash"), Action::EmptyTrash).into());
|
||||
}
|
||||
if !children.is_empty() {
|
||||
children.push(divider::horizontal::light().into());
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue