aboutsummaryrefslogtreecommitdiff
path: root/osx.m
diff options
context:
space:
mode:
authorSimon Tatham <anakin@pobox.com>2017-10-01 13:38:35 +0100
committerSimon Tatham <anakin@pobox.com>2017-10-01 16:34:41 +0100
commitde67801b0fd3dfa11777c1ef86cd617baf376b7b (patch)
treef632daee458c8fefcfc90ff809c44672adeedaa4 /osx.m
parenteeb2db283de9115f7256fa4cc49597d63e06b0ab (diff)
downloadpuzzles-de67801b0fd3dfa11777c1ef86cd617baf376b7b.zip
puzzles-de67801b0fd3dfa11777c1ef86cd617baf376b7b.tar.gz
puzzles-de67801b0fd3dfa11777c1ef86cd617baf376b7b.tar.bz2
puzzles-de67801b0fd3dfa11777c1ef86cd617baf376b7b.tar.xz
Use a proper union in struct config_item.
This allows me to use different types for the mutable, dynamically allocated string value in a C_STRING control and the fixed constant list of option names in a C_CHOICES.
Diffstat (limited to 'osx.m')
-rw-r--r--osx.m24
1 files changed, 14 insertions, 10 deletions
diff --git a/osx.m b/osx.m
index be29819..4798e49 100644
--- a/osx.m
+++ b/osx.m
@@ -1103,7 +1103,8 @@ struct frontend {
[tf setEditable:YES];
[tf setSelectable:YES];
[tf setBordered:YES];
- [[tf cell] setTitle:[NSString stringWithUTF8String:i->sval]];
+ [[tf cell] setTitle:[NSString
+ stringWithUTF8String:i->u.string.sval]];
[tf sizeToFit];
rect = [tf frame];
/*
@@ -1132,7 +1133,7 @@ struct frontend {
[b setButtonType:NSSwitchButton];
[b setTitle:[NSString stringWithUTF8String:i->name]];
[b sizeToFit];
- [b setState:(i->ival ? NSOnState : NSOffState)];
+ [b setState:(i->u.boolean.bval ? NSOnState : NSOffState)];
rect = [b frame];
if (totalw < rect.size.width + 1) totalw = rect.size.width + 1;
if (thish < rect.size.height + 1) thish = rect.size.height + 1;
@@ -1161,12 +1162,14 @@ struct frontend {
pb = [[NSPopUpButton alloc] initWithFrame:tmprect pullsDown:NO];
[pb setBezelStyle:NSRoundedBezelStyle];
{
- char c, *p;
+ char c;
+ const char *p;
- p = i->sval;
+ p = i->u.choices.choicenames;
c = *p++;
while (*p) {
- char *q, *copy;
+ const char *q;
+ char *copy;
q = p;
while (*p && *p != c) p++;
@@ -1180,7 +1183,7 @@ struct frontend {
if (*p) p++;
}
}
- [pb selectItemAtIndex:i->ival];
+ [pb selectItemAtIndex:i->u.choices.selected];
[pb sizeToFit];
rect = [pb frame];
@@ -1303,17 +1306,18 @@ struct frontend {
for (i = cfg; i->type != C_END; i++) {
switch (i->type) {
case C_STRING:
- sfree(i->sval);
- i->sval = dupstr([[[(id)cfg_controls[k+1] cell]
+ sfree(i->u.string.sval);
+ i->u.string.sval = dupstr([[[(id)cfg_controls[k+1] cell]
title] UTF8String]);
k += 2;
break;
case C_BOOLEAN:
- i->ival = [(id)cfg_controls[k] state] == NSOnState;
+ i->u.boolean.bval = [(id)cfg_controls[k] state] == NSOnState;
k++;
break;
case C_CHOICES:
- i->ival = [(id)cfg_controls[k+1] indexOfSelectedItem];
+ i->u.choices.selected =
+ [(id)cfg_controls[k+1] indexOfSelectedItem];
k += 2;
break;
}