summaryrefslogtreecommitdiffstats
path: root/winit
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2021-07-13 20:46:23 +0200
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2021-07-13 20:46:23 +0200
commitf3b056a6fc06248aa068549fc47ab6864829b875 (patch)
tree9af596685a5c765753eb41391d0a7ed0d8432658 /winit
parent31997d255f263a0f47f5af0d8560f3d5bd37f077 (diff)
downloadiced-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.rs42
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
}