changeset 2605:d60a44a27d70

iOS: Implement menu separators using inline UIMenus.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Tue, 13 Jul 2021 08:51:22 +0000
parents 4671ac4ad3c6
children 6c30fcc79402
files ios/dw.m
diffstat 1 files changed, 29 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/ios/dw.m	Mon Jul 12 23:51:38 2021 +0000
+++ b/ios/dw.m	Tue Jul 13 08:51:22 2021 +0000
@@ -1557,6 +1557,7 @@
     /* Create or recreate the UIMenu recursively */
     UIMenu *oldmenu = menu;
     NSMutableArray *menuchildren = [[NSMutableArray alloc] init];
+    NSMutableArray *section = menuchildren;
 
     for(id child in children)
     {
@@ -1566,10 +1567,35 @@
             DWMenu *submenu = [menuitem submenu];
 
             if(submenu)
-                [menuchildren addObject:[submenu menu]];
+                [section addObject:[submenu menu]];
             else
-                [menuchildren addObject:child];
-        }
+                [section addObject:child];
+        }
+        /* NSNull entry tells us to make a new section...
+         * we do this by making a new UIMenu inline.
+         */
+        else if([child isMemberOfClass:[NSNull class]])
+        {
+            if(section != menuchildren)
+            {
+                UIMenu *sectionmenu = [UIMenu menuWithTitle:@""
+                                                      image:nil
+                                                 identifier:nil
+                                                    options:UIMenuOptionsDisplayInline
+                                                   children:section];
+                [menuchildren addObject:sectionmenu];
+            }
+            section = [[NSMutableArray alloc] init];
+        }
+    }
+    if(section != menuchildren)
+    {
+        UIMenu *sectionmenu = [UIMenu menuWithTitle:@""
+                                              image:nil
+                                         identifier:nil
+                                            options:UIMenuOptionsDisplayInline
+                                           children:section];
+        [menuchildren addObject:sectionmenu];
     }
     if(title)
     {