diff --git a/worf/src/lib/gui.rs b/worf/src/lib/gui.rs index 4442f18..5d5395f 100644 --- a/worf/src/lib/gui.rs +++ b/worf/src/lib/gui.rs @@ -771,9 +771,12 @@ fn build_ui_from_menu_items( let meta_clone = Rc::>::clone(meta); let ui_clone = Rc::>::clone(ui); + + glib::idle_add_local(move || { let mut done = false; { + ui_clone.main_box.unset_sort_func(); let mut lock = ui_clone.menu_rows.write().unwrap(); for _ in 0..25 { @@ -793,14 +796,15 @@ fn build_ui_from_menu_items( meta_clone.search_ignored_words.as_ref(), ); } + let items_sort = ArcMenuMap::clone(&ui_clone.menu_rows); + ui_clone.main_box.set_sort_func(move |child1, child2| { + sort_flow_box_childs(child1, child2, &items_sort) + }); + if done { let lock = ui_clone.menu_rows.read().unwrap(); - let items_sort = ArcMenuMap::clone(&ui_clone.menu_rows); - ui_clone.main_box.set_sort_func(move |child1, child2| { - sort_flow_box_childs(child1, child2, &items_sort) - }); - + select_first_visible_child(&lock, &ui_clone.main_box); log::debug!( diff --git a/worf/src/lib/modes/math.rs b/worf/src/lib/modes/math.rs index aa75ce6..03d05ed 100644 --- a/worf/src/lib/modes/math.rs +++ b/worf/src/lib/modes/math.rs @@ -1,3 +1,4 @@ +use regex::Regex; use crate::config::Config; use crate::gui; use crate::gui::{ItemProvider, MenuItem}; @@ -21,10 +22,19 @@ impl MathProvider { } impl ItemProvider for MathProvider { + #[allow(clippy::cast_possible_truncation)] fn get_elements(&mut self, search: Option<&str>) -> (bool, Vec>) { if let Some(search_text) = search { - let result = match meval::eval_str(search_text) { - Ok(result) => result.to_string(), + + let re = Regex::new(r"0x[0-9a-fA-F]+").unwrap(); + let result = re.replace_all(search_text, |caps: ®ex::Captures| { + let hex_str = &caps[0][2..]; // Skip "0x" + let decimal = u64::from_str_radix(hex_str, 16).unwrap(); + decimal.to_string() + }); + + let result = match meval::eval_str(result) { + Ok(result) => format!("{} (0x{:X})", result, result as i64), Err(e) => format!("failed to calculate {e:?}"), };