changeset 2458:689261c29745

iOS: DWContainer should generate selection event on deselect too. Move UIInterfaceStyle code into DWObj so it can run on the main thread. It seemed to work on a secondary thread, but XCode warns about it.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Tue, 13 Apr 2021 22:05:46 +0000
parents 181e48c5dc0c
children ddc6d49d1110
files ios/dw.m
diffstat 1 files changed, 55 insertions(+), 23 deletions(-) [+]
line wrap: on
line diff
--- a/ios/dw.m	Tue Apr 13 21:08:49 2021 +0000
+++ b/ios/dw.m	Tue Apr 13 22:05:46 2021 +0000
@@ -1233,6 +1233,44 @@
         }
     }
 }
+-(void)getUserInterfaceStyle:(id)param
+{
+    NSMutableArray *array = param;
+    UIUserInterfaceStyle style = [hiddenWindow overrideUserInterfaceStyle];
+    int retval;
+    
+    switch(style)
+    {
+        case UIUserInterfaceStyleLight:
+            retval = DW_DARK_MODE_DISABLED;
+            break;
+        case UIUserInterfaceStyleDark:
+            retval = DW_DARK_MODE_FORCED;
+            break;
+        default:  /* UIUserInterfaceStyleUnspecified */
+            style = [[[hiddenWindow rootViewController] traitCollection] userInterfaceStyle];
+    }
+    switch(style)
+    {
+        case UIUserInterfaceStyleLight:
+            retval = DW_DARK_MODE_BASIC;
+            break;
+        case UIUserInterfaceStyleDark:
+            retval = DW_DARK_MODE_FULL;
+            break;
+        default: /* UIUserInterfaceStyleUnspecified */
+            retval = DW_FEATURE_UNSUPPORTED;
+            break;
+    }
+    [array addObject:[NSNumber numberWithInt:retval]];
+}
+-(void)setUserInterfaceStyle:(id)param
+{
+    NSNumber *number = param;
+    UIUserInterfaceStyle style = [number intValue];
+    
+    [hiddenWindow setOverrideUserInterfaceStyle:style];
+}
 @end
 
 DWObject *DWObj;
@@ -2241,6 +2279,11 @@
         _dw_event_handler(self, (UIEvent *)params, 9);
    }
 }
+-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
+{
+    if([self allowsMultipleSelection])
+        [self tableView:tableView didSelectRowAtIndexPath:indexPath];
+}
 -(DWMenu *)menuForEvent:(UIEvent *)event
 {
 #if 0 /* TODO: Fix this */
@@ -10627,26 +10670,15 @@
         {
             if(DWObj)
             {
-                UIUserInterfaceStyle style = [[DWObj hiddenWindow] overrideUserInterfaceStyle];
-                
-                switch(style)
-                {
-                    case UIUserInterfaceStyleLight:
-                        return DW_DARK_MODE_DISABLED;
-                    case UIUserInterfaceStyleDark:
-                        return DW_DARK_MODE_FORCED;
-                    default:  /* UIUserInterfaceStyleUnspecified */
-                        style = [[[[DWObj hiddenWindow] rootViewController] traitCollection] userInterfaceStyle];
-                }
-                switch(style)
-                {
-                    case UIUserInterfaceStyleLight:
-                        return DW_DARK_MODE_BASIC;
-                    case UIUserInterfaceStyleDark:
-                        return DW_DARK_MODE_FULL;
-                    default: /* UIUserInterfaceStyleUnspecified */
-                        return DW_FEATURE_UNSUPPORTED;
-                }
+                NSMutableArray *array = [[NSMutableArray alloc] init];
+                int retval = DW_FEATURE_UNSUPPORTED;
+                NSNumber *number;
+
+                [DWObj safeCall:@selector(getUserInterfaceStyle:) withObject:array];
+                number = [array lastObject];
+                if(number)
+                    retval = [number intValue];
+                return retval;
             }
             return _dw_dark_mode_state;
         }
@@ -10688,13 +10720,13 @@
             {
                 /* Disabled forces the non-dark aqua theme */
                 if(state == DW_FEATURE_DISABLED)
-                    [[DWObj hiddenWindow] setOverrideUserInterfaceStyle:UIUserInterfaceStyleLight];
+                    [DWObj safeCall:@selector(setUserInterfaceStyle:) withObject:[NSNumber numberWithInt:UIUserInterfaceStyleLight]];
                 /* Enabled lets the OS decide the mode */
                 else if(state == DW_FEATURE_ENABLED || state == DW_DARK_MODE_FULL)
-                    [[DWObj hiddenWindow] setOverrideUserInterfaceStyle:UIUserInterfaceStyleUnspecified];
+                    [DWObj safeCall:@selector(setUserInterfaceStyle:) withObject:[NSNumber numberWithInt:UIUserInterfaceStyleUnspecified]];
                 /* 2 forces dark mode aqua appearance */
                 else if(state == DW_DARK_MODE_FORCED)
-                    [[DWObj hiddenWindow] setOverrideUserInterfaceStyle:UIUserInterfaceStyleDark];
+                    [DWObj safeCall:@selector(setUserInterfaceStyle:) withObject:[NSNumber numberWithInt:UIUserInterfaceStyleDark]];
             }
             else /* Save the requested state for dw_init() */
                 _dw_dark_mode_state = state;