4
4
" /Library/Input Methods/Squirrel.app" ;
5
5
static NSString *const kSourceID =
6
6
@" com.googlecode.rimeime.inputmethod.Squirrel" ;
7
+ static NSString *const kInputModeID =
8
+ @" com.googlecode.rimeime.inputmethod.Squirrel.Rime" ;
7
9
8
10
void RegisterInputSource () {
11
+ NSLog (@" RegisterInputSource." );
9
12
CFURLRef installedLocationURL = CFURLCreateFromFileSystemRepresentation (
10
13
NULL , kInstalledLocation , strlen ((const char *)kInstalledLocation ), NO );
11
14
if (installedLocationURL) {
@@ -14,40 +17,63 @@ void RegisterInputSource() {
14
17
}
15
18
16
19
void ActivateInputSource () {
20
+ NSLog (@" ActivateInputSource." );
17
21
CFArrayRef sourceList = TISCreateInputSourceList (NULL , true );
18
22
for (int i = 0 ; i < CFArrayGetCount (sourceList); ++i) {
19
23
TISInputSourceRef inputSource = (TISInputSourceRef)(CFArrayGetValueAtIndex (
20
24
sourceList, i));
21
25
NSString *sourceID = (NSString *)(TISGetInputSourceProperty (
22
26
inputSource, kTISPropertyInputSourceID ));
23
- if ([sourceID isEqualToString: kSourceID ]) {
27
+ // NSLog(@"examining input source '%@", sourceID);
28
+ if ([sourceID isEqualToString: kSourceID ] ||
29
+ [sourceID isEqualToString: kInputModeID ]) {
24
30
TISEnableInputSource (inputSource);
25
- TISSelectInputSource (inputSource);
26
- break ;
31
+ CFBooleanRef isSelectable = (CFBooleanRef )TISGetInputSourceProperty (
32
+ inputSource, kTISPropertyInputSourceIsSelectCapable );
33
+ if (CFBooleanGetValue (isSelectable)) {
34
+ NSLog (@" selecting input source '%@ '." , sourceID);
35
+ TISSelectInputSource (inputSource);
36
+ }
37
+ NSLog (@" '%@ ' should have been activated." , sourceID);
38
+ }
39
+ }
40
+ }
41
+
42
+ void DeactivateInputSource () {
43
+ NSLog (@" DeactivateInputSource." );
44
+ CFArrayRef sourceList = TISCreateInputSourceList (NULL , true );
45
+ for (int i = CFArrayGetCount (sourceList); i > 0 ; --i) {
46
+ TISInputSourceRef inputSource = (TISInputSourceRef)(CFArrayGetValueAtIndex (
47
+ sourceList, i - 1 ));
48
+ NSString *sourceID = (NSString *)(TISGetInputSourceProperty (
49
+ inputSource, kTISPropertyInputSourceID ));
50
+ // NSLog(@"examining input source '%@", sourceID);
51
+ if ([sourceID isEqualToString: kSourceID ] ||
52
+ [sourceID isEqualToString: kInputModeID ]) {
53
+ TISDisableInputSource (inputSource);
54
+ NSLog (@" '%@ ' should have been deactivated." , sourceID);
27
55
}
28
56
}
29
57
}
30
58
31
59
BOOL IsInputSourceActive () {
32
- BOOL isActive = NO ;
60
+ int active = 0 ;
33
61
CFArrayRef sourceList = TISCreateInputSourceList (NULL , true );
34
62
for (int i = 0 ; i < CFArrayGetCount (sourceList); ++i) {
35
63
TISInputSourceRef inputSource = (TISInputSourceRef)(CFArrayGetValueAtIndex (
36
64
sourceList, i));
37
65
NSString *sourceID = (NSString *)(TISGetInputSourceProperty (
38
66
inputSource, kTISPropertyInputSourceID ));
39
- if ([sourceID isEqualToString: kSourceID ]) {
67
+ NSLog (@" examining input source '%@ '" , sourceID);
68
+ if ([sourceID isEqualToString: kSourceID ] ||
69
+ [sourceID isEqualToString: kInputModeID ]) {
40
70
CFBooleanRef isEnabled = (CFBooleanRef )(TISGetInputSourceProperty (
41
71
inputSource, kTISPropertyInputSourceIsEnabled ));
42
- CFBooleanRef isSelected = (CFBooleanRef )(TISGetInputSourceProperty (
43
- inputSource, kTISPropertyInputSourceIsEnabled ));
44
- if (CFBooleanGetValue (isEnabled) || CFBooleanGetValue (isSelected)) {
45
- isActive = YES ;
46
- break ;
72
+ if (CFBooleanGetValue (isEnabled)) {
73
+ ++active;
47
74
}
48
75
}
49
76
}
50
- return isActive;
77
+ NSLog (@" IsInputSourceActive: %d / 2" , active);
78
+ return active == 2 ; // 1 active input method + 1 active input mode
51
79
}
52
-
53
-
0 commit comments