fix(mime_app): track mime type app default by mime

This commit is contained in:
Michael Aaron Murphy 2026-06-11 17:54:12 +02:00
parent 6d4af69318
commit eda8291678
No known key found for this signature in database
GPG key ID: B2732D4240C9212C
3 changed files with 9 additions and 9 deletions

View file

@ -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",

View file

@ -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<String>,
icon_name: Box<str>,
icon: std::sync::OnceLock<widget::icon::Handle>,
is_default: Arc<AtomicBool>,
is_default: Arc<RwLock<FxHashSet<Box<str>>>>,
no_display: Arc<AtomicBool>,
}
@ -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());
}

View file

@ -2378,7 +2378,7 @@ impl Item {
.iter()
.map(|app| Cow::Owned(app.name.clone()))
.collect::<Vec<Cow<'static, str>>>(),
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::<Vec<Cow<'static, str>>>(),
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))),