summaryrefslogtreecommitdiff
path: root/xc/programs/Xserver/hw/darwin/utils/Xmaster/Preferences.m
blob: 6e214043005f62122ca3a096a3c05ce503d73413 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#import "Preferences.h"

@implementation Preferences

// Initialize internal state info of switch key button
- (void)initSwitchKey {
    keyCode = [Preferences keyCode];
    modifiers = [Preferences modifiers];
    [switchString setString:[Preferences switchString]];
}

- (id)init {
    self=[super init];

    isGettingKeyCode=NO;
    switchString=[[NSMutableString alloc] init];

    // Provide user defaults if needed
    if([[NSUserDefaults standardUserDefaults] stringForKey:@"SwitchKeyCode"]==nil) {
        [Preferences setKeyCode:0];
        [Preferences setModifiers:(NSCommandKeyMask | NSAlternateKeyMask)];
        [Preferences setSwitchString:@"Cmd-Opt-a"];
        [Preferences setDisplay:0];
        [Preferences setFakeButtons:YES];
        [Preferences setStartupHelp:YES];
    }

    [self initSwitchKey];

    return self;
}

// Set the window controls to the state in user defaults
- (void)resetWindow {
    [keyField setTitle:[Preferences switchString]];
    [displayNumber setIntValue:[Preferences display]];
    [fakeButton setIntValue:[Preferences fakeButtons]];
    [startupHelpButton setIntValue:[Preferences startupHelp]];
}

- (void)awakeFromNib {
    [self resetWindow];
    [splashStartupHelpButton setIntValue:[Preferences startupHelp]];
}

// User cancelled the changes
- (IBAction)close:(id)sender
{
    [window orderOut:nil];
    [self resetWindow];  	// reset window controls
    [self initSwitchKey];	// reset switch key state
}

// User saved changes
- (IBAction)saveChanges:(id)sender
{
    [Preferences setKeyCode:keyCode];
    [Preferences setModifiers:modifiers];
    [Preferences setSwitchString:switchString];
    [Preferences setDisplay:[displayNumber intValue]];
    [Preferences setFakeButtons:[fakeButton intValue]];
    [Preferences setStartupHelp:[startupHelpButton intValue]];
    [window orderOut:nil];
}

- (IBAction)setKey:(id)sender
{
    [keyField setTitle:@"Press key"];
    isGettingKeyCode=YES;
    [switchString setString:@""];
}

- (BOOL)sendEvent:(NSEvent*)anEvent {
    if(isGettingKeyCode) {
        if([anEvent type]==NSKeyDown) //wait for keyup
            return YES;
        if([anEvent type]!=NSKeyUp)
            return NO;

        if([anEvent modifierFlags] & NSCommandKeyMask)
            [switchString appendString:@"Cmd-"];
        if([anEvent modifierFlags] & NSControlKeyMask)
            [switchString appendString:@"Ctrl-"];
        if([anEvent modifierFlags] & NSAlternateKeyMask)
            [switchString appendString:@"Opt-"];
        if([anEvent modifierFlags] & NSNumericPadKeyMask) // doesn't work
            [switchString appendString:@"Num-"];
        if([anEvent modifierFlags] & NSHelpKeyMask)
            [switchString appendString:@"Help-"];
        if([anEvent modifierFlags] & NSFunctionKeyMask) // powerbooks only
            [switchString appendString:@"Fn-"];
        
        [switchString appendString:[anEvent charactersIgnoringModifiers]];
        [keyField setTitle:switchString];
        
        keyCode = [anEvent keyCode];
        modifiers = [anEvent modifierFlags];
        isGettingKeyCode=NO;
        
        return YES;
    }
    return NO;
}

+ (void)setSwitchString:(NSString*)newString {
    [[NSUserDefaults standardUserDefaults] setObject:newString forKey:@"SwitchString"];
}

+ (void)setKeyCode:(int)newKeyCode {
    [[NSUserDefaults standardUserDefaults] setInteger:newKeyCode forKey:@"SwitchKeyCode"];
}

+ (void)setModifiers:(int)newModifiers {
    [[NSUserDefaults standardUserDefaults] setInteger:newModifiers forKey:@"SwitchModifiers"];
}

+ (void)setDisplay:(int)newDisplay {
    [[NSUserDefaults standardUserDefaults] setInteger:newDisplay forKey:@"Display"];
}

+ (void)setFakeButtons:(BOOL)newFakeButtons {
    [[NSUserDefaults standardUserDefaults] setBool:newFakeButtons forKey:@"FakeButtons"];
}

+ (void)setStartupHelp:(BOOL)newStartupHelp {
    [[NSUserDefaults standardUserDefaults] setBool:newStartupHelp forKey:@"ShowStartupHelp"];
}

+ (NSString*)switchString {
    return [[NSUserDefaults standardUserDefaults] stringForKey:@"SwitchString"];
}

+ (unsigned int)keyCode {
    return [[NSUserDefaults standardUserDefaults] integerForKey:@"SwitchKeyCode"];
}

+ (unsigned int)modifiers {
    return [[NSUserDefaults standardUserDefaults] integerForKey:@"SwitchModifiers"];
}

+ (int)display {
    return [[NSUserDefaults standardUserDefaults] integerForKey:@"Display"];
}

+ (BOOL)fakeButtons {
    return [[NSUserDefaults standardUserDefaults] boolForKey:@"FakeButtons"];
}

+ (BOOL)startupHelp {
    return [[NSUserDefaults standardUserDefaults] boolForKey:@"ShowStartupHelp"];
}

@end