feat: support MIME subclasses in file chooser dialog

This commit is contained in:
norepro 2026-07-02 08:52:14 -07:00 committed by GitHub
parent 3ef7913abd
commit 43a4228ca4
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 11 additions and 1 deletions

View file

@ -40,7 +40,7 @@ use crate::localize::LANGUAGE_SORTER;
use crate::mounter::{MOUNTERS, MounterItem, MounterItems, MounterKey, MounterMessage};
use crate::tab::{self, ItemMetadata, Location, SearchLocation, Tab};
use crate::zoom::{zoom_in_view, zoom_out_view, zoom_to_default};
use crate::{fl, home_dir, menu};
use crate::{fl, home_dir, menu, mime_icon};
#[derive(Clone, Debug)]
pub struct DialogMessage(cosmic::Action<Message>);
@ -1919,11 +1919,13 @@ impl Application for App {
items.retain(|item| {
// Directories are always shown
item.metadata.is_dir()
// Check for mime type match (first because it is faster)
|| mimes.iter().any(|filter_mime| {
if filter_mime.subtype() == mime::STAR {
filter_mime.type_() == item.mime.type_()
} else {
*filter_mime == item.mime
|| mime_icon::is_mime_subclass_of(&item.mime, filter_mime)
}
})
// Check for glob match (last because it is slower)

View file

@ -124,3 +124,11 @@ pub fn parent_mime_types(mime: &Mime) -> Option<Vec<Mime>> {
let mime_icon_cache = MIME_ICON_CACHE.lock().unwrap();
mime_icon_cache.shared_mime_info.get_parents_aliased(mime)
}
pub fn is_mime_subclass_of(mime_type: &Mime, base: &Mime) -> bool {
let mime_icon_cache = MIME_ICON_CACHE.lock().unwrap();
mime_icon_cache
.shared_mime_info
.mime_type_subclass(mime_type, base)
}