muda
Menu Utilities library for Desktop Applications.
Platforms supported:
- Windows
- macOS
- Linux (gtk Only)
Platform-specific notes:
- On Windows, accelerators don't work unless the win32 message loop calls
TranslateAcceleratorW. SeeMenu::init_for_hwndfor more details
Cargo Features
common-controls-v6: UseTaskDialogIndirectAPI fromComCtl32.dllv6 on Windows for showing the predefinedAboutmenu item dialog.libxdo: Enables linking tolibxdoon Linux which is used for the predefinedCopy,Cut,PasteandSelectAllmenu item.serde: Enables de/serializing the dpi types.gtk: Enables thegtkcrate dependency on Linux. This is required formudato function properly on Linux.
Dependencies (Linux Only)
gtk is used for menus and 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:
Debian / Ubuntu:
Example
Create the menu and add your items
let menu = new;
let menu_item2 = new;
let submenu = with_items;
Then add your root menu to a Window on Windows and Linux or use it as your global app menu on macOS
// --snip--
unsafe ;
menu.init_for_gtk_window;
menu.init_for_nsapp;
Context menus (Popup menus)
You can also use a [Menu] or a [Submenu] show a context menu.
// --snip--
let position = PhysicalPosition ;
unsafe ;
menu.show_context_menu_for_gtk_window;
unsafe ;
Processing menu events
You can use MenuEvent::receiver to get a reference to the MenuEventReceiver
which you can use to listen to events when a menu item is activated
if let Ok = receiver.try_recv
Note for winit or tao users:
You should use [MenuEvent::set_event_handler] and forward
the menu events to the event loop by using EventLoopProxy
so that the event loop is awakened on each menu event.
let event_loop = with_user_event.build.unwrap;
let proxy = event_loop.create_proxy;
set_event_handler;
License
Apache-2.0/MIT