Skip to content

Commit

Permalink
Add -[PSListController controllerForSpecifier:] support
Browse files Browse the repository at this point in the history
  • Loading branch information
rpetrich committed May 11, 2013
1 parent 3f39c84 commit 4fb2521
Showing 1 changed file with 38 additions and 0 deletions.
38 changes: 38 additions & 0 deletions prefs.xm
Expand Up @@ -32,6 +32,18 @@ static NSString **pPSFooterTextGroupKey = NULL;
static NSString **pPSStaticTextGroupKey = NULL;
/* }}} */

/* {{{ PSSpecifier 3.2 Additions */
@interface PSSpecifier (OS32)
- (Class)detailControllerClass;
@end
/* }}} */

/* {{{ PSViewController 3.2 Additions */
@interface PSViewController (OS32)
- (void)setSpecifier:(PSSpecifier *)specifier;
@end
/* }}} */

/* {{{ Prototypes */
static NSArray *generateErrorSpecifiersWithText(NSString *errorText);
/* }}} */
Expand Down Expand Up @@ -250,6 +262,32 @@ static void pl_lazyLoadBundleCore(id self, SEL _cmd, PSSpecifier *specifier, voi
}
%end

%new
- (PSViewController *)controllerForSpecifier:(PSSpecifier *)specifier
{
%log();
Class detailClass = [specifier respondsToSelector:@selector(detailControllerClass)] ? [specifier detailControllerClass] : MSHookIvar<Class>(specifier, "detailControllerClass");
if (!detailClass)
detailClass = [PLCustomListController class];
if (![detailClass isSubclassOfClass:[PSViewController class]])
return nil;
id result = [detailClass alloc];
if ([result respondsToSelector:@selector(initForContentSize:)])
result = [result initForContentSize:[[self view] bounds].size];
else
result = [result init];
[result setRootController:self.rootController];
[result setParentController:self];
if ([result respondsToSelector:@selector(setSpecifier:)])
[result setSpecifier:specifier];
else if ([result isKindOfClass:[PSListController class]]) {
NSArray *&_specifierIvar = MSHookIvar<NSArray *>(result, "_specifier");
[_specifierIvar release];
_specifierIvar = [specifier retain];
}
return [result autorelease];
}

- (NSArray *)loadSpecifiersFromPlistName:(NSString *)plistName target:(id)target {
NSArray *result = %orig();
if([result count] > 0)
Expand Down

0 comments on commit 4fb2521

Please sign in to comment.