diff options
-rw-r--r-- | MobileCydia.mm | 21 | ||||
-rw-r--r-- | iPhonePrivate.h | 2 |
2 files changed, 17 insertions, 6 deletions
diff --git a/MobileCydia.mm b/MobileCydia.mm index b039213..67529fe 100644 --- a/MobileCydia.mm +++ b/MobileCydia.mm @@ -248,6 +248,7 @@ static NSString *Cache_; [NSString stringWithFormat:@"%@/%s", Cache_, file] static void (*$SBSSetInterceptsMenuButtonForever)(bool); +static NSData *(*$SBSCopyIconImagePNGDataForDisplayIdentifier)(NSString *); static CFStringRef (*$MGCopyAnswer)(CFStringRef); @@ -7182,12 +7183,21 @@ static void HomeControllerReachabilityCallback(SCNetworkReachabilityRef reachabi if (path == nil) goto fail; path = [path stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; - NSData *data([SBSCopyIconImagePNGDataForDisplayIdentifier(path) autorelease]); - UIImage *icon; - if (data == nil) - icon = [UIImage imageNamed:@"unknown.png"]; - else + + UIImage *icon(nil); + + if (icon == nil && $SBSCopyIconImagePNGDataForDisplayIdentifier != NULL) { + NSData *data([$SBSCopyIconImagePNGDataForDisplayIdentifier(path) autorelease]); icon = [UIImage imageWithData:data]; + } + + if (icon == nil) + if (NSString *file = SBSCopyIconImagePathForDisplayIdentifier(path)) + icon = [UIImage imageAtPath:file]; + + if (icon == nil) + icon = [UIImage imageNamed:@"unknown.png"]; + [self _returnPNGWithImage:icon forRequest:request]; } else if ([command isEqualToString:@"package-icon"]) { if (path == nil) @@ -10502,6 +10512,7 @@ int main(int argc, char *argv[]) { /* }}} */ $SBSSetInterceptsMenuButtonForever = reinterpret_cast<void (*)(bool)>(dlsym(RTLD_DEFAULT, "SBSSetInterceptsMenuButtonForever")); + $SBSCopyIconImagePNGDataForDisplayIdentifier = reinterpret_cast<NSData *(*)(NSString *)>(dlsym(RTLD_DEFAULT, "SBSCopyIconImagePNGDataForDisplayIdentifier")); const char *symbol(kCFCoreFoundationVersionNumber >= 800 ? "MGGetBoolAnswer" : "GSSystemHasCapability"); BOOL (*GSSystemHasCapability)(CFStringRef) = reinterpret_cast<BOOL (*)(CFStringRef)>(dlsym(RTLD_DEFAULT, symbol)); diff --git a/iPhonePrivate.h b/iPhonePrivate.h index 70eef38..95e9c00 100644 --- a/iPhonePrivate.h +++ b/iPhonePrivate.h @@ -440,7 +440,7 @@ extern "C" mach_port_t SBSSpringBoardServerPort(); extern "C" int SBBundlePathForDisplayIdentifier(mach_port_t port, const char *identifier, char *path); extern "C" NSSet *SBSCopyDisplayIdentifiers(); extern "C" NSString *SBSCopyLocalizedApplicationNameForDisplayIdentifier(NSString *); -extern "C" NSData *SBSCopyIconImagePNGDataForDisplayIdentifier(NSString *); +extern "C" NSString *SBSCopyIconImagePathForDisplayIdentifier(NSString *); extern "C" UIImage *_UIImageWithName(NSString *name); extern "C" void UISetColor(CGColorRef color); // }}} |