Skip to content

Result of haccel() is dependent on item creation order #307

@npwoods

Description

@npwoods

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??)
    }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions