# HG changeset patch # User bsmith@81767d24-ef19-dc11-ae90-00e081727c95 # Date 1616529727 0 # Node ID a126b04b9996dbab32a5c2c900d0f3dc726e003b # Parent 32ebd33be56bd00410c3ed01a79e3fdcb56c816a iOS: dwcompat now builds on iOS as well... Fixes for running dwtest. diff -r 32ebd33be56b -r a126b04b9996 dwcompat.c --- a/dwcompat.c Sun Mar 21 22:48:28 2021 +0000 +++ b/dwcompat.c Tue Mar 23 20:02:07 2021 +0000 @@ -12,8 +12,8 @@ #include "dwcompat.h" #include "dw.h" -#if defined(__UNIX__) || defined(__MAC__) -#if defined(__FreeBSD__) || defined(__MAC__) +#if defined(__UNIX__) || defined(__MAC__) || defined(__IOS__) +#if defined(__FreeBSD__) || defined(__MAC__) || defined(__IOS__) #include #include #include @@ -30,7 +30,7 @@ #include #include -#if defined(__UNIX__) || defined(__MAC__) +#if defined(__UNIX__) || defined(__MAC__) || defined(__IOS__) void msleep(long period) { #ifdef __sun__ @@ -80,7 +80,7 @@ } /* Get around getmntinfo() not being thread safe */ -#if defined(__FreeBSD__) || defined(__MAC__) +#if defined(__FreeBSD__) || defined(__MAC__) || defined(__IOS__) int _getmntinfo_r(struct statfs **mntbufp, int flags) { static HMTX mutex = 0; @@ -127,7 +127,7 @@ return 0; return (long double)((double)spc*(double)bps*(double)fc); -#elif defined(__FreeBSD__) || defined(__MAC__) +#elif defined(__FreeBSD__) || defined(__MAC__) || defined(__IOS__) struct statfs *fsp = NULL; int entries, index = 1; @@ -233,7 +233,7 @@ return 0; return (long double)((double)spc*(double)bps*(double)tc); -#elif defined(__FreeBSD__) || defined(__MAC__) +#elif defined(__FreeBSD__) || defined(__MAC__) || defined(__IOS__) struct statfs *fsp = NULL; int entries, index = 1; @@ -332,7 +332,7 @@ if(GetVolumeInformation(buffer, volname, 100, &spc, &bps, &fc, NULL, 0) != 0) return 1; -#elif defined(__FreeBSD__) || defined(__MAC__) +#elif defined(__FreeBSD__) || defined(__MAC__) || defined(__IOS__) struct statfs *fsp = NULL; int entries, index = 1; @@ -402,8 +402,8 @@ void API getfsname(int drive, char *buf, int len) { -#if defined(__UNIX__) || defined(__MAC__) -#if defined(__FreeBSD__) || defined(__MAC__) +#if defined(__UNIX__) || defined(__MAC__) || defined(__IOS__) +#if defined(__FreeBSD__) || defined(__MAC__) || defined(__IOS__) struct statfs *fsp = NULL; int entries, index = 1; diff -r 32ebd33be56b -r a126b04b9996 dwcompat.h --- a/dwcompat.h Sun Mar 21 22:48:28 2021 +0000 +++ b/dwcompat.h Tue Mar 23 20:02:07 2021 +0000 @@ -4,8 +4,10 @@ #define _DWCOMPAT_H /* This header includes and defines everything needed for a given OS/compiler */ -#if defined(__UNIX__) || defined(__MAC__) +#if defined(__UNIX__) || defined(__MAC__) || defined(__IOS__) +#ifndef __IOS__ #include "dwconfig.h" +#endif /* Attempt to include 64 bit file functions on various unix flavors */ #ifndef _FILE_OFFSET_BITS diff -r 32ebd33be56b -r a126b04b9996 ios/dw.m --- a/ios/dw.m Sun Mar 21 22:48:28 2021 +0000 +++ b/ios/dw.m Tue Mar 23 20:02:07 2021 +0000 @@ -580,7 +580,15 @@ } DWBitBlt; /* Subclass for a test object type */ -@interface DWObject : NSObject {} +@interface DWObject : NSObject +{ + /* A normally hidden window, at the top of the view hierarchy. + * Since iOS messageboxes and such require a view controller, + * we show this hidden window when necessary and use it during + * the creation of alerts and dialog boxes that don't have one. + */ + UIWindow *hiddenWindow; +} -(void)uselessThread:(id)sender; -(void)menuHandler:(id)param; -(void)doBitBlt:(id)param; @@ -839,6 +847,14 @@ @end @implementation DWObject +-(id)init +{ + hiddenWindow = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; + [hiddenWindow setBackgroundColor:[UIColor clearColor]]; + [hiddenWindow setWindowLevel:UIWindowLevelAlert]; + [hiddenWindow setHidden:YES]; + return [super init]; +} -(void)uselessThread:(id)sender { /* Thread only to initialize threading */ } -(void)menuHandler:(id)param { @@ -867,7 +883,12 @@ action = [UIAlertAction actionWithTitle:[params objectAtIndex:5] style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) { iResponse = 3; }]; - [alert presentViewController:alert animated:YES completion:nil]; + /* Unhide our hidden window and make it key */ + [hiddenWindow setHidden:NO]; + [hiddenWindow makeKeyAndVisible]; + [[hiddenWindow rootViewController] presentViewController:alert animated:YES completion:nil]; + /* Once the dialog is gone we can rehide our window */ + [hiddenWindow setHidden:YES]; [alert release]; [params addObject:[NSNumber numberWithInteger:iResponse]]; } @@ -7275,6 +7296,9 @@ { DW_FUNCTION_INIT; DWWindow *window = [[DWWindow alloc] init]; + DWView *view = [[DWView alloc] init]; + + [window addSubview:view]; /* TODO: Handle style flags */ if(@available(iOS 13.0, *)) { @@ -7396,7 +7420,7 @@ } if([object isMemberOfClass:[DWButton class]]) { - [object setTextColor:(fg ? fg : [UIColor labelColor])]; + [[object titleLabel] setTextColor:(fg ? fg : [UIColor labelColor])]; } if([object isKindOfClass:[UITextField class]] || [object isKindOfClass:[UIButton class]]) {