Changeset 320 for trunk/ICeCoffEE/ICeCoffEE/ICeCoffEEServices.m
- Timestamp:
- 06/15/07 05:15:03 (17 years ago)
- File:
-
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/ICeCoffEE/ICeCoffEE/ICeCoffEEServices.m
r319 r320 1 1 // 2 // ICeCoffEESe tServicesMenu.m2 // ICeCoffEEServices.m 3 3 // ICeCoffEE APE 4 4 // … … 7 7 // 8 8 9 #import "ICeCoffEESe tServicesMenu.h"9 #import "ICeCoffEEServices.h" 10 10 #import "ICeCoffEEShared.h" 11 12 // XXX rename me to something like "ICeCoffEEServicesMenu.m"13 11 14 12 // an approximate clone of HIToolbox's CreateServicesLocalizedDictKey … … 57 55 NSDictionary *ICCF_GetServicesInfo(void) { 58 56 NSArray *services = CFServiceControllerCopyServicesEntries(); 59 // NSLog(@"%@", services);60 57 61 58 NSEnumerator *e = [services objectEnumerator]; … … 65 62 // XXX once tested, redo all this with CF, and no autoreleasing 66 63 // XXX items named the same as submenus (figure out how Cocoa itself does it, too) 67 // XXX use kICServiceSubmenu (recursion?)68 64 NSString *itemPath = (NSString *)preferredLocalization((CFDictionaryRef)[serviceEntry objectForKey: @"NSMenuItem"]); 69 65 if (itemPath == nil) continue; … … 77 73 NSMutableDictionary *itemDict = nil; 78 74 while ( (itemComponent = (NSString *)[ce nextObject]) != nil) { 79 // itemDict is nil if just created80 if ( itemDict != nil && !bubbledUp) {81 NSString *oldBundlePath = [ levelDict objectForKey: (NSString *)kICServiceBundlePath];75 // levelDict is nil if just created 76 if (levelDict != nil && !bubbledUp) { 77 NSString *oldBundlePath = [itemDict objectForKey: (NSString *)kICServiceBundlePath]; 82 78 if ([oldBundlePath isEqualToString: bundlePath]) 83 79 bubbledUp = YES; 84 80 else if (oldBundlePath != nil) { 85 81 [oldBundlePath retain]; 86 [ levelDict removeObjectForKey: (NSString *)kICServiceBundlePath];82 [itemDict removeObjectForKey: (NSString *)kICServiceBundlePath]; 87 83 NSEnumerator *be = [levelDict objectEnumerator]; 88 84 while ( (itemDict = (NSMutableDictionary *)[be nextObject]) != nil) … … 91 87 } 92 88 } 93 itemDict = [levelDict objectForKey: itemComponent]; 89 if (levelDict == nil) { 90 levelDict = [[NSMutableDictionary alloc] init]; 91 [itemDict setObject: levelDict forKey: (NSString *)kICServiceSubmenu]; 92 [levelDict release]; 93 itemDict = nil; 94 } else { 95 itemDict = [levelDict objectForKey: itemComponent]; 96 } 94 97 if (itemDict == nil) { 95 98 itemDict = [[NSMutableDictionary alloc] init]; … … 99 102 } 100 103 [levelDict setObject: itemDict forKey: itemComponent]; 101 levelDict = itemDict;104 levelDict = nil; 102 105 [itemDict release]; 103 itemDict = nil;104 106 } else { 105 levelDict = itemDict;107 levelDict = [itemDict objectForKey: (NSString *)kICServiceSubmenu]; 106 108 } 107 109 } 108 110 109 111 if (!bubbledUp) 110 [ levelDict setObject: bundlePath forKey: (NSString *)kICServiceBundlePath];112 [itemDict setObject: bundlePath forKey: (NSString *)kICServiceBundlePath]; 111 113 112 114 NSString *keyEquivalent = (NSString *)preferredLocalization((CFDictionaryRef)[serviceEntry objectForKey: @"NSKeyEquivalent"]); 113 115 if (keyEquivalent == nil) continue; 114 116 115 [ levelDict setObject: keyEquivalent forKey: (NSString *)kICServiceShortcut];117 [itemDict setObject: keyEquivalent forKey: (NSString *)kICServiceShortcut]; 116 118 } 117 119 [services release];
Note:
See TracChangeset
for help on using the changeset viewer.