From d15558870d5f2afe947eef1e9f16ca522db26434 Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Fri, 3 May 2024 09:08:36 -0600 Subject: [PATCH] Allow icon themes to change mime icons --- src/mime_icon.rs | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/mime_icon.rs b/src/mime_icon.rs index 9b5da63..33a847a 100644 --- a/src/mime_icon.rs +++ b/src/mime_icon.rs @@ -30,12 +30,20 @@ impl MimeIconCache { self.cache .entry(key) .or_insert_with_key(|key| { - for icon_name in self.shared_mime_info.lookup_icon_names(&key.mime) { - if let Some(path) = icon::from_name(icon_name).size(key.size).path() { - return Some(icon::from_path(path)); - } + let mut icon_names = self.shared_mime_info.lookup_icon_names(&key.mime); + if icon_names.is_empty() { + return None; } - None + let icon_name = icon_names.remove(0); + let mut named = icon::from_name(icon_name).size(key.size); + let mut fallback_names = Vec::new(); + for fallback_name in icon_names { + fallback_names.push(fallback_name.into()); + } + if fallback_names.is_empty() { + named = named.fallback(Some(icon::IconFallback::Names(fallback_names))); + } + Some(named.handle()) }) .clone() }