| Vulnerabilities | |||||
|---|---|---|---|---|---|
| Version | Suggest | Low | Medium | High | Critical |
| 0.18.0 | 0 | 0 | 0 | 0 | 0 |
| 0.17.2 | 0 | 0 | 0 | 0 | 0 |
| 0.17.1 | 0 | 0 | 0 | 0 | 0 |
| 0.17.0 | 0 | 0 | 0 | 0 | 0 |
| 0.16.1 | 0 | 0 | 0 | 0 | 0 |
| 0.16.0 | 0 | 0 | 0 | 0 | 0 |
| 0.15.3 | 0 | 0 | 0 | 0 | 0 |
| 0.15.2 | 0 | 0 | 0 | 0 | 0 |
| 0.15.1 | 0 | 0 | 0 | 0 | 0 |
| 0.15.0 | 0 | 0 | 0 | 0 | 0 |
| 0.14.1 | 0 | 0 | 0 | 0 | 0 |
| 0.14.0 | 0 | 0 | 0 | 0 | 0 |
| 0.13.5 | 0 | 0 | 0 | 0 | 0 |
| 0.13.4 | 0 | 0 | 0 | 0 | 0 |
| 0.13.3 | 0 | 0 | 0 | 0 | 0 |
| 0.13.2 | 0 | 0 | 0 | 0 | 0 |
| 0.13.1 | 0 | 0 | 0 | 0 | 0 |
| 0.13.0 | 0 | 0 | 0 | 0 | 0 |
| 0.12.2 | 0 | 0 | 0 | 0 | 0 |
| 0.12.1 | 0 | 0 | 0 | 0 | 0 |
| 0.12.0 | 0 | 0 | 0 | 0 | 0 |
| 0.11.5 | 0 | 0 | 0 | 0 | 0 |
| 0.11.4 | 0 | 0 | 0 | 0 | 0 |
| 0.11.3 | 0 | 0 | 0 | 0 | 0 |
| 0.11.2 | 0 | 0 | 0 | 0 | 0 |
| 0.11.1 | 0 | 0 | 0 | 0 | 0 |
| 0.11.0 | 0 | 0 | 0 | 0 | 0 |
| 0.10.0 | 0 | 0 | 0 | 0 | 0 |
| 0.9.4 | 0 | 0 | 0 | 0 | 0 |
| 0.9.3 | 0 | 0 | 0 | 0 | 0 |
| 0.9.2 | 0 | 0 | 0 | 0 | 0 |
| 0.9.1 | 0 | 0 | 0 | 0 | 0 |
| 0.9.0 | 0 | 0 | 0 | 0 | 0 |
| 0.8.7 | 0 | 0 | 0 | 0 | 0 |
| 0.8.6 | 0 | 0 | 0 | 0 | 0 |
| 0.8.5 | 0 | 0 | 0 | 0 | 0 |
| 0.8.4 | 0 | 0 | 0 | 0 | 0 |
| 0.8.3 | 0 | 0 | 0 | 0 | 0 |
| 0.8.2 | 0 | 0 | 0 | 0 | 0 |
| 0.8.1 | 0 | 0 | 0 | 0 | 0 |
| 0.8.0 | 0 | 0 | 0 | 0 | 0 |
| 0.7.3 | 0 | 0 | 0 | 0 | 0 |
| 0.7.2 | 0 | 0 | 0 | 0 | 0 |
| 0.7.1 | 0 | 0 | 0 | 0 | 0 |
| 0.7.0 | 0 | 0 | 0 | 0 | 0 |
| 0.6.0 | 0 | 0 | 0 | 0 | 0 |
| 0.5.0 | 0 | 0 | 0 | 0 | 0 |
| 0.4.5 | 0 | 0 | 0 | 0 | 0 |
| 0.4.4 | 0 | 0 | 0 | 0 | 0 |
| 0.4.3 | 0 | 0 | 0 | 0 | 0 |
| 0.4.2 | 0 | 0 | 0 | 0 | 0 |
| 0.4.1 | 0 | 0 | 0 | 0 | 0 |
| 0.4.0 | 0 | 0 | 0 | 0 | 0 |
| 0.3.0 | 0 | 0 | 0 | 0 | 0 |
| 0.2.0 | 0 | 0 | 0 | 0 | 0 |
| 0.1.1 | 0 | 0 | 0 | 0 | 0 |
| 0.1.0 | 0 | 0 | 0 | 0 | 0 |
| 0.0.0 | 0 | 0 | 0 | 0 | 0 |
0.18.0 - This version is safe to use because it has no known security vulnerabilities at this time. Find out if your coding project uses this component and get notified of any reported security vulnerabilities with Meterian-X Open Source Security Platform
Maintain your licence declarations and avoid unwanted licences to protect your IP the way you intended.
MIT - MIT LicenseMenu Utilities library for Desktop Applications.
TranslateAcceleratorW.
See Menu::init_for_hwnd for more detailscommon-controls-v6: Use TaskDialogIndirect API from ComCtl32.dll v6 on Windows for showing the predefined About menu item dialog.libxdo: Enables linking to libxdo on Linux or FreeBSD which is used for the predefined Copy, Cut, Paste and SelectAll menu item.serde: Enables de/serializing the dpi types.gtk: Enables the gtk crate dependency on Linux or FreeBSD. This is required for muda to function properly on Linux or FreeBSD.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:
pacman -S gtk3 xdotoolsudo apt install libgtk-3-dev libxdo-devInstall this dependencies in order to compile muda. Instructions using pkg:
pkg install -y rust glib pkgconf gtk3Create the menu and add your items
let menu = Menu::new();
let menu_item2 = MenuItem::new("Menu item #2", false, None);
let submenu = Submenu::with_items("Submenu Outer", true,&[
&MenuItem::new("Menu item #1", true, Some(Accelerator::new(Some(Modifiers::ALT), Code::KeyD))),
&PredefinedMenuItem::separator(),
&menu_item2,
&MenuItem::new("Menu item #3", true, None),
&PredefinedMenuItem::separator(),
&Submenu::with_items("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 or use it as your global app menu on macOS
// --snip--
#[cfg(target_os = "windows")]
unsafe { menu.init_for_hwnd(window.hwnd() as isize) };
#[cfg(target_os = "linux")]
menu.init_for_gtk_window(>k_window, Some(&vertical_gtk_box));
#[cfg(target_os = "macos")]
menu.init_for_nsapp();You can also use a [Menu] or a [Submenu] show a context menu.
// --snip--
let position = muda::PhysicalPosition { x: 100., y: 120. };
#[cfg(target_os = "windows")]
unsafe { menu.show_context_menu_for_hwnd(window.hwnd() as isize, Some(position.into())) };
#[cfg(target_os = "linux")]
menu.show_context_menu_for_gtk_window(>k_window, Some(position.into()));
#[cfg(target_os = "macos")]
unsafe { menu.show_context_menu_for_nsview(nsview, Some(position.into())) };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(event) = MenuEvent::receiver().try_recv() {
match event.id {
_ if event.id == save_item.id() => {
println!("Save menu item activated");
},
_ => {}
}
}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.
enum UserEvent {
MenuEvent(muda::MenuEvent)
}
let event_loop = EventLoop::<UserEvent>::with_user_event().build().unwrap();
let proxy = event_loop.create_proxy();
muda::MenuEvent::set_event_handler(Some(move |event| {
proxy.send_event(UserEvent::MenuEvent(event));
}));Apache-2.0/MIT