From 6ebec39f5c972a7a93c3b4734f7393e9032ed235 Mon Sep 17 00:00:00 2001 From: Alexander Mohr Date: Tue, 22 Apr 2025 20:30:43 +0200 Subject: [PATCH] fix parsing icons --- src/lib/desktop.rs | 1 - src/lib/gui.rs | 7 ++++++- src/lib/mode.rs | 21 ++++++++++++--------- 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/src/lib/desktop.rs b/src/lib/desktop.rs index f3239a4..7b075a1 100644 --- a/src/lib/desktop.rs +++ b/src/lib/desktop.rs @@ -145,7 +145,6 @@ pub fn find_desktop_files() -> Vec { .filter_map(|icon_dir| find_file_case_insensitive(&icon_dir, regex)) .flat_map(|desktop_files| { desktop_files.into_iter().filter_map(|desktop_file| { - log::debug!("loading desktop file {desktop_file:?}"); fs::read_to_string(desktop_file) .ok() .and_then(|content| freedesktop_file_parser::parse(&content).ok()) diff --git a/src/lib/gui.rs b/src/lib/gui.rs index 9830c34..adcb2b3 100644 --- a/src/lib/gui.rs +++ b/src/lib/gui.rs @@ -819,7 +819,12 @@ fn create_menu_row( row.set_child(Some(&row_box)); if let Some(image_path) = &menu_item.icon_path { - let image = Image::from_icon_name(image_path); + let image = if image_path.starts_with("/") { + Image::from_file(image_path) + } else { + Image::from_icon_name(image_path) + }; + image.set_pixel_size( config .image_size diff --git a/src/lib/mode.rs b/src/lib/mode.rs index b25b6d2..25194f7 100644 --- a/src/lib/mode.rs +++ b/src/lib/mode.rs @@ -1,21 +1,21 @@ +use std::collections::HashMap; +use std::io::Read; use std::os::unix::prelude::CommandExt; use std::path::{Path, PathBuf}; use std::process::{Command, Stdio}; use std::{env, fmt, fs, io}; +use std::time::Instant; +use anyhow::Context; +use freedesktop_file_parser::EntryType; +use regex::Regex; +use serde::{Deserialize, Serialize}; use crate::config::{Config, expand_path}; use crate::desktop::{ - DesktopError, default_icon, find_desktop_files, get_locale_variants, lookup_name_with_locale, + default_icon, find_desktop_files, get_locale_variants, lookup_name_with_locale, }; use crate::gui; use crate::gui::{ItemProvider, MenuItem}; -use anyhow::Context; -use freedesktop_file_parser::EntryType; -use gtk4::AccessibleRole::Menu; -use regex::Regex; -use serde::{Deserialize, Serialize}; -use std::collections::HashMap; -use std::io::Read; #[derive(Debug)] pub enum ModeError { @@ -60,6 +60,7 @@ impl DRunProvider { let (cache_path, d_run_cache) = load_d_run_cache(); + let start = Instant::now(); let mut entries: Vec> = Vec::new(); for file in find_desktop_files().iter().filter(|f| { f.entry.hidden.is_none_or(|hidden| !hidden) @@ -147,6 +148,8 @@ impl DRunProvider { entries.push(entry); } + log::info!("parsing desktop files took {}ms", start.elapsed().as_millis()); + gui::sort_menu_items_alphabetically_honor_initial_score(&mut entries); DRunProvider { @@ -370,7 +373,7 @@ impl DMenuProvider { let mut input = String::new(); io::stdin() .read_to_string(&mut input) - .map_err(|e| ModeError::StdInReadFail)?; + .map_err(|_| ModeError::StdInReadFail)?; let items: Vec> = input .lines()