From 42577aa4679390f8437d902ba22bd3e6dff7eda5 Mon Sep 17 00:00:00 2001 From: Hojjat Date: Tue, 9 Jun 2026 16:50:50 -0600 Subject: [PATCH] fix: take user's Added Association into account when hiding apps --- src/app.rs | 2 +- src/mime_app.rs | 25 ++++++++++++++++++++----- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/src/app.rs b/src/app.rs index 8996b5c..292bb83 100644 --- a/src/app.rs +++ b/src/app.rs @@ -2307,7 +2307,7 @@ impl App { .mime_app_cache .apps() .iter() - .filter(|mime_app| !mime_app.no_display) + .filter(|mime_app| !mime_app.no_display()) .filter(|&mime_app| dedupe.insert(&mime_app.id)) .map(|mime_app| (mime_app, MimeAppMatch::Other)) .collect::>(); diff --git a/src/mime_app.rs b/src/mime_app.rs index 232cdff..f1f643c 100644 --- a/src/mime_app.rs +++ b/src/mime_app.rs @@ -185,7 +185,7 @@ pub struct MimeApp { icon_name: Box, icon: std::sync::OnceLock, is_default: Arc, - pub no_display: bool, + no_display: Arc, } impl MimeApp { @@ -200,7 +200,11 @@ impl MimeApp { } pub fn is_default(&self) -> bool { - self.is_default.load(atomic::Ordering::SeqCst) + self.is_default.load(atomic::Ordering::Relaxed) + } + + pub fn no_display(&self) -> bool { + self.no_display.load(atomic::Ordering::Relaxed) } pub fn icon(&self) -> widget::icon::Handle { @@ -277,9 +281,7 @@ impl MimeAppCache { icon_name: desktop_entry.icon().unwrap_or_default().into(), icon: std::sync::OnceLock::new(), is_default: Arc::new(AtomicBool::new(false)), - no_display: desktop_entry - .mime_type() - .is_none_or(|supported| supported.is_empty()), + no_display: Arc::new(AtomicBool::new(false)), }); tracing::info!(target: "mime-apps", id = app.id, "detected desktop entry"); @@ -364,6 +366,19 @@ impl MimeAppCache { tracing::debug!(target: "mime-apps", mime = mime.essence_str(), apps = ?(cache.iter().map(|app| &*app.id).collect::>()), "mime defaults found") } + let associated: rustc_hash::FxHashSet<&str> = self + .cache + .values() + .flatten() + .map(|app| app.id.as_str()) + .collect(); + for app in &self.apps { + app.no_display.store( + !associated.contains(app.id.as_str()), + atomic::Ordering::Relaxed, + ); + } + let elapsed = start.elapsed(); tracing::info!(target: "mime-apps", "loaded mime app cache in {elapsed:?}"); }