X-Git-Url: https://git.saurik.com/winterboard.git/blobdiff_plain/838dbf4cf24835d3ccd76954cbfdb2782ec828bb..024f98ea589529f42b26fa62fcb5913a6aee6a57:/Settings.mm diff --git a/Settings.mm b/Settings.mm index 6c4cd01..89231a0 100644 --- a/Settings.mm +++ b/Settings.mm @@ -327,45 +327,43 @@ static NSString *_plist; @end /* }}} */ -@interface WBSettingsController: PSListController { +@interface WBAdvancedController: PSListController { } -- (id) initForContentSize:(CGSize)size; -- (void) dealloc; -- (void) suspend; -- (void) navigationBarButtonClicked:(int)buttonIndex; -- (void) viewWillRedisplay; -- (void) pushController:(id)controller; - (id) specifiers; - (void) settingsChanged; -- (NSString *) title; -- (void) setPreferenceValue:(id)value specifier:(PSSpecifier *)spec; -- (id) readPreferenceValue:(PSSpecifier *)spec; @end -@implementation WBSettingsController +@implementation WBAdvancedController -+ (void) load { - void *libhide(dlopen("/usr/lib/hide.dylib", RTLD_LAZY)); - IsIconHiddenDisplayId = reinterpret_cast(dlsym(libhide, "IsIconHiddenDisplayId")); - HideIconViaDisplayId = reinterpret_cast(dlsym(libhide, "HideIconViaDisplayId")); - UnHideIconViaDisplayId = reinterpret_cast(dlsym(libhide, "UnHideIconViaDisplayId")); +- (id) specifiers { + if (!_specifiers) + _specifiers = [[self loadSpecifiersFromPlistName:@"Advanced" target:self] retain]; + return _specifiers; } -- (id) initForContentSize:(CGSize)size { - if ((self = [super initForContentSize:size]) != nil) { - _plist = [[NSString stringWithFormat:@"%@/Library/Preferences/com.saurik.WinterBoard.plist", NSHomeDirectory()] retain]; - _settings = [([NSMutableDictionary dictionaryWithContentsOfFile:_plist] ?: [NSMutableDictionary dictionary]) retain]; +- (void) settingsChanged { + settingsChanged = YES; +} - [_settings setObject:[NSNumber numberWithBool:IsIconHiddenDisplayId(WinterBoardDisplayID)] forKey:@"IconHidden"]; - } return self; +- (void) setPreferenceValue:(id)value specifier:(PSSpecifier *)spec { + NSString *key([spec propertyForKey:@"key"]); + if ([[spec propertyForKey:@"negate"] boolValue]) + value = [NSNumber numberWithBool:(![value boolValue])]; + [_settings setValue:value forKey:key]; + [self settingsChanged]; } -- (void) dealloc { - [_settings release]; - [_plist release]; - [super dealloc]; +- (id) readPreferenceValue:(PSSpecifier *)spec { + NSString *key([spec propertyForKey:@"key"]); + id defaultValue([spec propertyForKey:@"default"]); + id plistValue([_settings objectForKey:key]); + if (!plistValue) + return defaultValue; + if ([[spec propertyForKey:@"negate"] boolValue]) + plistValue = [NSNumber numberWithBool:(![plistValue boolValue])]; + return plistValue; } - (void) __optimizeThemes { @@ -422,6 +420,49 @@ static NSString *_plist; } +@end + +@interface WBSettingsController: PSListController { +} + +- (id) initForContentSize:(CGSize)size; +- (void) dealloc; +- (void) suspend; +- (void) navigationBarButtonClicked:(int)buttonIndex; +- (void) viewWillRedisplay; +- (void) pushController:(id)controller; +- (id) specifiers; +- (void) settingsChanged; +- (NSString *) title; +- (void) setPreferenceValue:(id)value specifier:(PSSpecifier *)spec; +- (id) readPreferenceValue:(PSSpecifier *)spec; + +@end + +@implementation WBSettingsController + ++ (void) load { + void *libhide(dlopen("/usr/lib/hide.dylib", RTLD_LAZY)); + IsIconHiddenDisplayId = reinterpret_cast(dlsym(libhide, "IsIconHiddenDisplayId")); + HideIconViaDisplayId = reinterpret_cast(dlsym(libhide, "HideIconViaDisplayId")); + UnHideIconViaDisplayId = reinterpret_cast(dlsym(libhide, "UnHideIconViaDisplayId")); +} + +- (id) initForContentSize:(CGSize)size { + if ((self = [super initForContentSize:size]) != nil) { + _plist = [[NSString stringWithFormat:@"%@/Library/Preferences/com.saurik.WinterBoard.plist", NSHomeDirectory()] retain]; + _settings = [([NSMutableDictionary dictionaryWithContentsOfFile:_plist] ?: [NSMutableDictionary dictionary]) retain]; + + [_settings setObject:[NSNumber numberWithBool:IsIconHiddenDisplayId(WinterBoardDisplayID)] forKey:@"IconHidden"]; + } return self; +} + +- (void) dealloc { + [_settings release]; + [_plist release]; + [super dealloc]; +} + - (void) suspend { if (!settingsChanged) return; @@ -439,10 +480,21 @@ static NSString *_plist; unlink("/User/Library/Caches/com.apple.springboard-imagecache-smallicons"); unlink("/User/Library/Caches/com.apple.springboard-imagecache-smallicons.plist"); + unlink("/User/Library/Caches/com.apple.SpringBoard.folderSwitcherLinen"); + unlink("/User/Library/Caches/com.apple.SpringBoard.notificationCenterLinen"); + + unlink("/User/Library/Caches/com.apple.SpringBoard.folderSwitcherLinen.0"); + unlink("/User/Library/Caches/com.apple.SpringBoard.folderSwitcherLinen.1"); + unlink("/User/Library/Caches/com.apple.SpringBoard.folderSwitcherLinen.2"); + unlink("/User/Library/Caches/com.apple.SpringBoard.folderSwitcherLinen.3"); + system("rm -rf /User/Library/Caches/SpringBoardIconCache"); system("rm -rf /User/Library/Caches/SpringBoardIconCache-small"); + system("rm -rf /User/Library/Caches/com.apple.IconsCache"); + system("rm -rf /User/Library/Caches/com.apple.newsstand"); + system("rm -rf /User/Library/Caches/com.apple.springboard.sharedimagecache"); - system("killall SpringBoard"); + system("killall lsd SpringBoard"); } - (void) cancelChanges { @@ -454,8 +506,8 @@ static NSString *_plist; [_settings setObject:[NSNumber numberWithBool:IsIconHiddenDisplayId(WinterBoardDisplayID)] forKey:@"IconHidden"]; [self reloadSpecifiers]; if (![[PSViewController class] instancesRespondToSelector:@selector(showLeftButton:withStyle:rightButton:withStyle:)]) { - self.navigationItem.leftBarButtonItem = nil; - self.navigationItem.rightBarButtonItem = nil; + [[self navigationItem] setLeftBarButtonItem:nil]; + [[self navigationItem] setRightBarButtonItem:nil]; } else { [self showLeftButton:nil withStyle:0 rightButton:nil withStyle:0]; } @@ -490,7 +542,8 @@ static NSString *_plist; - (void) viewWillAppear:(BOOL)animated { if (settingsChanged) [self settingsChanged]; - [super viewWillAppear:animated]; + if ([super respondsToSelector:@selector(viewWillAppear:)]) + [super viewWillAppear:animated]; } - (void) pushController:(id)controller { @@ -510,8 +563,8 @@ static NSString *_plist; UIBarButtonItem *cancelButton([[UIBarButtonItem alloc] initWithTitle:@"Cancel" style:UIBarButtonItemStylePlain target:self action:@selector(settingsConfirmButtonClicked:)]); cancelButton.tag = 0; respringButton.tag = 1; - self.navigationItem.leftBarButtonItem = respringButton; - self.navigationItem.rightBarButtonItem = cancelButton; + [[self navigationItem] setLeftBarButtonItem:respringButton]; + [[self navigationItem] setRightBarButtonItem:cancelButton]; [respringButton release]; [cancelButton release]; } else {