From eda8291678dac99fd082e778c5260754ab26f8f6 Mon Sep 17 00:00:00 2001 From: Michael Aaron Murphy Date: Thu, 11 Jun 2026 17:54:12 +0200 Subject: [PATCH] fix(mime_app): track mime type app default by mime --- src/app.rs | 2 +- src/mime_app.rs | 12 ++++++------ src/tab.rs | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/app.rs b/src/app.rs index 10b8c76..58ac81f 100644 --- a/src/app.rs +++ b/src/app.rs @@ -5940,7 +5940,7 @@ impl Application for App { widget::button::custom( widget::row::with_children([ icon(app.icon()).size(32).into(), - if app.is_default() && !displayed_default { + if app.is_default(mime) && !displayed_default { displayed_default = true; widget::text::body(fl!( "default-app", diff --git a/src/mime_app.rs b/src/mime_app.rs index a76a84c..bb84f80 100644 --- a/src/mime_app.rs +++ b/src/mime_app.rs @@ -11,7 +11,7 @@ use std::ffi::OsStr; use std::os::unix::ffi::OsStrExt; use std::path::{Path, PathBuf}; use std::sync::atomic::AtomicBool; -use std::sync::{Arc, atomic}; +use std::sync::{Arc, RwLock, atomic}; use std::time::{self, Instant}; use std::{fs, io, process}; @@ -191,7 +191,7 @@ pub struct MimeApp { pub exec: Option, icon_name: Box, icon: std::sync::OnceLock, - is_default: Arc, + is_default: Arc>>>, no_display: Arc, } @@ -206,8 +206,8 @@ impl MimeApp { ) } - pub fn is_default(&self) -> bool { - self.is_default.load(atomic::Ordering::Relaxed) + pub fn is_default(&self, mime: &Mime) -> bool { + self.is_default.read().unwrap().contains(mime.essence_str()) } pub fn no_display(&self) -> bool { @@ -343,7 +343,7 @@ impl MimeAppCache { exec: desktop_entry.exec().map(String::from), icon_name: desktop_entry.icon().unwrap_or_default().into(), icon: std::sync::OnceLock::new(), - is_default: Arc::new(AtomicBool::new(false)), + is_default: Arc::new(RwLock::default()), no_display: Arc::new(AtomicBool::new(false)), }); @@ -414,7 +414,7 @@ impl MimeAppCache { apps.retain(|app| { let found = app.id.as_str() == default; if found { - app.is_default.store(true, atomic::Ordering::Relaxed); + app.is_default.write().unwrap().insert(default.into()); cache.push(app.clone()); } diff --git a/src/tab.rs b/src/tab.rs index 0aaaddc..d5deaaf 100644 --- a/src/tab.rs +++ b/src/tab.rs @@ -2378,7 +2378,7 @@ impl Item { .iter() .map(|app| Cow::Owned(app.name.clone())) .collect::>>(), - mime_apps.iter().position(|x| x.is_default()), + mime_apps.iter().position(|x| x.is_default(&self.mime)), move |index| index, ) .icons(Cow::Owned(mime_app_cache.icons(&self.mime))), @@ -6462,7 +6462,7 @@ impl Tab { .iter() .map(|app| Cow::Owned(app.name.clone())) .collect::>>(), - mime_apps.iter().position(|x| x.is_default()), + mime_apps.iter().position(|x| x.is_default(&mime)), move |index| (index, mime_closure.clone()), ) .icons(Cow::Owned(mime_app_cache.icons(&mime))),