Add Clear Recents history to Recents nav bar context menu

This commit is contained in:
Jeremy Soller 2026-02-18 09:08:53 -07:00 committed by Jacob Kauffmann
parent 395b4922e4
commit 3fcaaf1ed7
5 changed files with 34 additions and 9 deletions

5
Cargo.lock generated
View file

@ -6169,8 +6169,9 @@ dependencies = [
[[package]]
name = "recently-used-xbel"
version = "1.1.0"
source = "git+https://github.com/pop-os/recently-used-xbel.git#eeba9e08b0446175d7dd4f526d21ea867ed37e87"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "63ab2febcd4f0245fbadd0b44f7cd35207128a7b210a089e65740625a45399b5"
dependencies = [
"chrono",
"dirs 5.0.1",

View file

@ -53,7 +53,7 @@ i18n-embed = { version = "0.16", features = [
i18n-embed-fl = "0.10"
rust-embed = "8"
slotmap = "1.1.1"
recently-used-xbel = { git = "https://github.com/pop-os/recently-used-xbel.git" }
recently-used-xbel = "1.2.0"
zip = "7"
uzers = "0.12.2"
md-5 = "0.10.6"

View file

@ -315,6 +315,7 @@ type-to-search-select = Selects the first matching file or folder
# Context menu
add-to-sidebar = Add to sidebar
clear-recents-history = Clear Recents history
compress = Compress
copy-to = Copy to...
delete-permanently = Delete permanently

View file

@ -313,13 +313,14 @@ pub enum PreviewKind {
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
pub enum NavMenuAction {
ClearRecents,
EmptyTrash,
Open(segmented_button::Entity),
OpenWith(segmented_button::Entity),
OpenInNewTab(segmented_button::Entity),
OpenInNewWindow(segmented_button::Entity),
Preview(segmented_button::Entity),
RemoveFromSidebar(segmented_button::Entity),
EmptyTrash,
}
impl MenuAction for NavMenuAction {
@ -2420,6 +2421,15 @@ impl Application for App {
NavMenuAction::RemoveFromSidebar(entity),
));
}
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 matches!(location_opt, Some(Location::Trash))
&& !trash::os_limited::is_empty().unwrap_or(true)
{
@ -4697,6 +4707,16 @@ impl Application for App {
}
}
Message::NavMenuAction(action) => match action {
NavMenuAction::ClearRecents => match recently_used_xbel::clear_recently_used() {
Ok(()) => {}
Err(err) => {
log::warn!("failed to clear recents history: {}", err);
}
},
NavMenuAction::EmptyTrash => {
return self
.push_dialog(DialogPage::EmptyTrash, Some(EMPTY_TRASH_BUTTON_ID.clone()));
}
NavMenuAction::Open(entity) => {
if let Some(path) = self
.nav_model
@ -4841,11 +4861,6 @@ impl Application for App {
return self.update_config();
}
}
NavMenuAction::EmptyTrash => {
return self
.push_dialog(DialogPage::EmptyTrash, Some(EMPTY_TRASH_BUTTON_ID.clone()));
}
},
Message::Recents => {
if self.config.show_recents {

View file

@ -1221,6 +1221,13 @@ fn uri_to_path(uri: String) -> Option<PathBuf> {
})
}
pub fn has_recents() -> bool {
match recently_used_xbel::parse_file() {
Ok(recent_files) => !recent_files.bookmarks.is_empty(),
Err(_) => false,
}
}
pub fn scan_recents(sizes: IconSizes) -> Vec<Item> {
let recent_files = match recently_used_xbel::parse_file() {
Ok(recent_files) => recent_files,
@ -5928,6 +5935,7 @@ impl Tab {
tab_column = tab_column.push(popover);
}
match &self.location {
Location::Recents => {}
Location::Trash => {
if let Some(items) = self.items_opt()
&& !items.is_empty()