muda is a Menu Utilities library for Desktop Applications.

Example

Create the menu and add your items

```rs let menu = Menu::new(); let menuitem2 = MenuItem::new("Menu item #2", false, None); let submenu = Submenu::withitems("Submenu Outer", true,&[ &MenuItem::new("Menu item #1", true, Some(Accelerator::new(Some(Modifiers::ALT), Code::KeyD))), &PredefinedMenuItem::separator(), &menuitem2, &MenuItem::new("Menu item #3", true, None), &PredefinedMenuItem::separator(), &Submenu::withitems("Submenu Inner", true,&[ &MenuItem::new("Submenu item #1", true, None), &PredefinedMenuItem::separator(), &menu_item2, ]) ]);

```

Then Add your root menu to a Window on Windows and Linux Only or use it as your global app menu on macOS

```rs // --snip--

[cfg(target_os = "windows")]

menu.initforhwnd(window.hwnd() as isize);

[cfg(target_os = "linux")]

menu.initforgtkwindow(&gtkwindow);

[cfg(target_os = "macos")]

menu.initfornsapp(); ```

Context menus (Popup menus)

You can also use a [Menu] or a [Submenu] show a context menu.

```rs // --snip-- let x = 100; let y = 120;

[cfg(target_os = "windows")]

menu.showcontextmenuforhwnd(window.hwnd() as isize, x, y);

[cfg(target_os = "linux")]

menu.showcontextmenuforgtkwindow(&gtkwindow, x, y);

[cfg(target_os = "macos")]

menu.showcontextmenufornsview(nsview, x, y); ```

Processing menu events

You can use menu_event_receiver to get a reference to the MenuEventReceiver which you can use to listen to events when a menu item is activated rs if let Ok(event) = menu_event_receiver().try_recv() { match event.id { _ if event.id == save_item.id() => { println!("Save menu item activated"); }, _ => {} } }

Platform-specific notes:

Accelerators on Windows

Accelerators don't work unless the win32 message loop calls TranslateAcceleratorW

See Menu::init_for_hwnd for more details

Linux

libxdo is used to make the predfined Copy, Cut, Paste and SelectAll menu items work. Be sure to install following packages before building:

Arch Linux / Manjaro: sh pacman -S xdotool

Debian / Ubuntu: sh sudo apt install libxdo-dev

License

Apache-2.0/MIT