# HG changeset patch # User bsmith@81767d24-ef19-dc11-ae90-00e081727c95 # Date 1618351546 0 # Node ID 689261c29745674acf504872f2737882032d0aff # Parent 181e48c5dc0c05d8ebbf7ed858e75b49e1a4cd98 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. diff -r 181e48c5dc0c -r 689261c29745 ios/dw.m --- 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;