Compare commits

..

No commits in common. "9e0c2726efb37b4116e782b51d5e637f114271a2" and "542657b557cbbf8e051cbead3a9bc24b86a17e5f" have entirely different histories.

2 changed files with 81 additions and 92 deletions

View file

@ -2833,99 +2833,94 @@ impl Application for App {
fn nav_context_menu( fn nav_context_menu(
&self, &self,
) -> Option<Vec<widget::menu::Tree<cosmic::Action<Self::Message>>>> { ) -> Option<Vec<widget::menu::Tree<cosmic::Action<Self::Message>>>> {
let items = self.nav_model.iter().map(|entity| { let entity = self.nav_bar_context_id;
let favorite_index_opt = self.nav_model.data::<FavoriteIndex>(entity); let favorite_index_opt = self.nav_model.data::<FavoriteIndex>(entity);
let location_opt = self.nav_model.data::<Location>(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 if location_opt
.and_then(Location::path_opt) .and_then(Location::path_opt)
.is_some_and(|x| x.is_file()) .is_some_and(|x| x.is_file())
{ {
items.push(cosmic::widget::menu::Item::Button( items.push(cosmic::widget::menu::Item::Button(
fl!("open"), fl!("open"),
None, None,
NavMenuAction::Open(entity), NavMenuAction::Open(entity),
)); ));
items.push(cosmic::widget::menu::Item::Button( items.push(cosmic::widget::menu::Item::Button(
fl!("menu-open-with"), fl!("menu-open-with"),
None, None,
NavMenuAction::OpenWith(entity), NavMenuAction::OpenWith(entity),
)); ));
} else { } else {
items.push(cosmic::widget::menu::Item::Button( items.push(cosmic::widget::menu::Item::Button(
fl!("open-in-new-tab"), fl!("open-in-new-tab"),
None, None,
NavMenuAction::OpenInNewTab(entity), NavMenuAction::OpenInNewTab(entity),
)); ));
items.push(cosmic::widget::menu::Item::Button( items.push(cosmic::widget::menu::Item::Button(
fl!("open-in-new-window"), fl!("open-in-new-window"),
None, None,
NavMenuAction::OpenInNewWindow(entity), NavMenuAction::OpenInNewWindow(entity),
)); ));
} }
if let Some(path) = location_opt.and_then(Location::path_opt) { if let Some(path) = location_opt.and_then(Location::path_opt) {
let selected_dir = usize::from(path.is_dir()); let selected_dir = usize::from(path.is_dir());
let action_items: Vec<_> = self let action_items: Vec<_> = self
.config .config
.context_actions .context_actions
.iter() .iter()
.enumerate() .enumerate()
.filter(|(_, action)| action.matches_selection(1, selected_dir)) .filter(|(_, action)| action.matches_selection(1, selected_dir))
.map(|(i, action)| { .map(|(i, action)| {
cosmic::widget::menu::Item::Button( cosmic::widget::menu::Item::Button(
action.name.clone(), action.name.clone(),
None, None,
NavMenuAction::RunContextAction(entity, i), NavMenuAction::RunContextAction(entity, i),
) )
}) })
.collect(); .collect();
if !action_items.is_empty() { if !action_items.is_empty() {
items.push(cosmic::widget::menu::Item::Divider); items.push(cosmic::widget::menu::Item::Divider);
items.extend(action_items); 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),
));
} }
}
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::Recents)) && tab::has_recents() { if matches!(location_opt, Some(Location::Recents)) && tab::has_recents() {
items.push(cosmic::widget::menu::Item::Button( items.push(cosmic::widget::menu::Item::Button(
fl!("clear-recents-history"), fl!("clear-recents-history"),
None, None,
NavMenuAction::ClearRecents, NavMenuAction::ClearRecents,
)); ));
} }
if matches!(location_opt, Some(Location::Trash)) && !Trash::is_empty() { if matches!(location_opt, Some(Location::Trash)) && !Trash::is_empty() {
items.push(cosmic::widget::menu::Item::Button( items.push(cosmic::widget::menu::Item::Button(
fl!("empty-trash"), fl!("empty-trash"),
None, None,
NavMenuAction::EmptyTrash, NavMenuAction::EmptyTrash,
)); ));
} }
items
});
Some(cosmic::widget::menu::nav_context( Some(cosmic::widget::menu::items(&HashMap::new(), items))
&HashMap::new(),
items.collect(),
))
} }
fn nav_model(&self) -> Option<&segmented_button::SingleSelectModel> { fn nav_model(&self) -> Option<&segmented_button::SingleSelectModel> {

View file

@ -418,12 +418,6 @@ pub fn context_menu<'a>(
if tab.mode.multiple() { if tab.mode.multiple() {
children.push(menu_item(fl!("select-all"), Action::SelectAll).into()); 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() { if !children.is_empty() {
children.push(divider::horizontal::light().into()); children.push(divider::horizontal::light().into());
} }