bug-demo.zip
haccel() seems to behave differently depending on the order in which items are added. This can be illustrated in the following code. The only difference between the two code paths is when items are added to the root menu, and in the second case haccel() returns zero
use muda::Menu;
use muda::MenuItem;
use muda::Submenu;
use muda::accelerator::Accelerator;
use muda::accelerator::Code;
use muda::accelerator::Modifiers;
fn main() {
{
let menu = Menu::new();
let file_menu = Submenu::new("&File", true);
menu.append_items(&[&file_menu]).unwrap(); // Add "File" menu before adding the items
let accelerator = Some(Accelerator::new(Some(Modifiers::ALT), Code::KeyA));
let alpha_menu = MenuItem::new("Alpha", true, accelerator);
let accelerator = Some(Accelerator::new(Some(Modifiers::ALT), Code::KeyB));
let bravo_menu = MenuItem::new("Bravo", true, accelerator);
let accelerator = Some(Accelerator::new(Some(Modifiers::ALT), Code::KeyC));
let charlie_menu = MenuItem::new("Charlie", true, accelerator);
file_menu
.append_items(&[&alpha_menu, &bravo_menu, &charlie_menu])
.unwrap();
println!("haccel={:?}", menu.haccel()); // prints a non zero value
}
{
let menu = Menu::new();
let file_menu = Submenu::new("&File", true);
let accelerator = Some(Accelerator::new(Some(Modifiers::ALT), Code::KeyA));
let alpha_menu = MenuItem::new("Alpha", true, accelerator);
let accelerator = Some(Accelerator::new(Some(Modifiers::ALT), Code::KeyB));
let bravo_menu = MenuItem::new("Bravo", true, accelerator);
let accelerator = Some(Accelerator::new(Some(Modifiers::ALT), Code::KeyC));
let charlie_menu = MenuItem::new("Charlie", true, accelerator);
file_menu
.append_items(&[&alpha_menu, &bravo_menu, &charlie_menu])
.unwrap();
menu.append_items(&[&file_menu]).unwrap(); // Add "File" menu after adding the items
println!("haccel={:?}", menu.haccel()); // prints a zero value (bug??)
}
}
bug-demo.zip
haccel()seems to behave differently depending on the order in which items are added. This can be illustrated in the following code. The only difference between the two code paths is when items are added to the root menu, and in the second casehaccel()returns zero