diff options
author | 2021-07-13 20:46:23 +0200 | |
---|---|---|
committer | 2021-07-13 20:46:23 +0200 | |
commit | f3b056a6fc06248aa068549fc47ab6864829b875 (patch) | |
tree | 9af596685a5c765753eb41391d0a7ed0d8432658 /winit | |
parent | 31997d255f263a0f47f5af0d8560f3d5bd37f077 (diff) | |
download | iced-f3b056a6fc06248aa068549fc47ab6864829b875.tar.gz iced-f3b056a6fc06248aa068549fc47ab6864829b875.tar.bz2 iced-f3b056a6fc06248aa068549fc47ab6864829b875.zip |
Generate unique identifiers for entries in `conversion::menu`
Diffstat (limited to 'winit')
-rw-r--r-- | winit/src/conversion.rs | 42 |
1 files changed, 30 insertions, 12 deletions
diff --git a/winit/src/conversion.rs b/winit/src/conversion.rs index 22118bf5..3c483086 100644 --- a/winit/src/conversion.rs +++ b/winit/src/conversion.rs @@ -178,22 +178,40 @@ fn hotkey(hotkey: keyboard::Hotkey) -> winit::window::Hotkey { /// [`winit`]: https://github.com/rust-windowing/winit /// [`iced_native`]: https://github.com/hecrj/iced/tree/master/native pub fn menu<Message>(menu: &Menu<Message>) -> winit::window::Menu { - let mut converted = winit::window::Menu::new(); - - for item in menu.iter() { - match item { - menu::Entry::Item { - content, hotkey, .. - } => { - converted.add_item(0, content, hotkey.map(self::hotkey)); - } - menu::Entry::Dropdown { content, submenu } => { - converted.add_dropdown(content, self::menu(submenu)); + fn menu_i<Message>( + starting_id: usize, + menu: &Menu<Message>, + ) -> (winit::window::Menu, usize) { + let mut id = starting_id; + let mut converted = winit::window::Menu::new(); + + for item in menu.iter() { + match item { + menu::Entry::Item { + content, hotkey, .. + } => { + converted.add_item(id, content, hotkey.map(self::hotkey)); + + id += 1; + } + menu::Entry::Dropdown { content, submenu } => { + let (submenu, n_children) = menu_i(id, submenu); + + converted.add_dropdown(content, submenu); + + id += n_children; + } + menu::Entry::Separator => { + converted.add_separator(); + } } - menu::Entry::Separator => converted.add_separator(), } + + (converted, id - starting_id) } + let (converted, _) = menu_i(0, menu); + converted } |