]> git.saurik.com Git - winterboard.git/commitdiff
I hate WinterBoard; aka: Welcome to LaunchServices.
authorJay Freeman (saurik) <saurik@saurik.com>
Wed, 26 May 2010 23:43:44 +0000 (23:43 +0000)
committerJay Freeman (saurik) <saurik@saurik.com>
Wed, 26 May 2010 23:43:44 +0000 (23:43 +0000)
Library.mm
Settings.mm
WinterBoard.plist
control
extrainst_ [new file with mode: 0755]
makefile

index 13327def1c36481f0dab736cb12570b928b80fea..665f765046e8c3d040a725aa28ca1ba7d1d01dff 100644 (file)
@@ -60,6 +60,7 @@ bool _itv;
 #import <CoreFoundation/CoreFoundation.h>
 #import <Foundation/Foundation.h>
 #import <CoreGraphics/CoreGraphics.h>
+#import <ImageIO/CGImageSource.h>
 
 #import <Celestial/AVController.h>
 #import <Celestial/AVItem.h>
@@ -474,7 +475,7 @@ MSHook(UIImage *, SBApplicationIcon$generateIconImage$, SBApplicationIcon *self,
     if (type == 2)
         if (![Info_ wb$boolForKey:@"ComposeStoreIcons"]) {
             if (NSString *path72 = $pathForIcon$([self application], @"-72"))
-                return [UIImage imageWithContentsOfFile:path];
+                return [UIImage imageWithContentsOfFile:path72];
             else if (NSString *path = $pathForIcon$([self application]))
                 if (UIImage *image = [UIImage imageWithContentsOfFile:path])
                     return [image _imageScaledToProportion:1.2 interpolationQuality:5];
@@ -516,6 +517,19 @@ static UIImage *CachedImageAtPath(NSString *path) {
     return image;
 }
 
+MSHook(CGImageSourceRef, CGImageSourceCreateWithURL, CFURLRef url, CFDictionaryRef options) {
+    if (Debug_)
+        NSLog(@"WB:Debug: CGImageSourceCreateWithURL(\"%@\", %s)", url, options);
+    NSAutoreleasePool *pool([[NSAutoreleasePool alloc] init]);
+    if (NSString *path = (NSString *) CFURLCopyFileSystemPath(url, kCFURLPOSIXPathStyle))
+        if (NSString *themed = [path wb$themedPath])
+            if (themed != path)
+                url = (CFURLRef) [NSURL fileURLWithPath:themed];
+    CGImageSourceRef source(_CGImageSourceCreateWithURL(url, options));
+    [pool release];
+    return source;
+}
+
 MSHook(CGImageRef, _UIImageRefAtPath, NSString *name, bool cache, UIImageOrientation *orientation) {
     if (Debug_)
         NSLog(@"WB:Debug: _UIImageRefAtPath(\"%@\", %s)", name, cache ? "true" : "false");
@@ -1462,6 +1476,16 @@ static void dlset(Type_ &function, const char *name) {
     function = reinterpret_cast<Type_>(dlsym(RTLD_DEFAULT, name));
 }
 
+/*static void WBImage(const struct mach_header* mh, intptr_t vmaddr_slide) {
+    uint32_t count(_dyld_image_count());
+    for (uint32_t index(0); index != count; ++index)
+        if (_dyld_get_image_header(index) == mh) {
+            CGImageSourceRef (*CGImageSourceCreateWithURL)(CFURLRef url, CFDictionaryRef options);
+            dlset(CGImageSourceCreateWithURL, "CGImageSourceCreateWithURL");
+            MSHookFunction(&CGImageSourceCreateWithURL, &$CGImageSourceCreateWithURL, &_CGImageSourceCreateWithURL);
+        }
+}*/
+
 extern "C" void WBInitialize() {
     NSAutoreleasePool *pool([[NSAutoreleasePool alloc] init]);
 
@@ -1471,40 +1495,51 @@ extern "C" void WBInitialize() {
 
     dlset(_GSFontGetUseLegacyFontMetrics, "GSFontGetUseLegacyFontMetrics");
 
+    //if ([NSBundle bundleWithIdentifier:@"com.apple.ImageIO.framework"] != nil)
+        MSHookFunction(&CGImageSourceCreateWithURL, &$CGImageSourceCreateWithURL, &_CGImageSourceCreateWithURL);
+    //else
+    //    _dyld_register_func_for_add_image(&WBImage);
+
     struct nlist nl[8];
 
-    memset(nl, 0, sizeof(nl));
-    nl[0].n_un.n_name = (char *) "__UIApplicationImageWithName";
-    nl[1].n_un.n_name = (char *) "__UIImageAtPath";
-    nl[2].n_un.n_name = (char *) "__UIImageRefAtPath";
-    nl[3].n_un.n_name = (char *) "__UIImageWithNameInDomain";
-    nl[4].n_un.n_name = (char *) "__UIKitBundle";
-    nl[5].n_un.n_name = (char *) "__UISharedImageNameGetIdentifier";
-    nl[6].n_un.n_name = (char *) "__UISharedImageWithIdentifier";
-    nlist(UIKit, nl);
-
-    nlset(_UIApplicationImageWithName, nl, 0);
-    nlset(_UIImageAtPath, nl, 1);
-    nlset(_UIImageRefAtPath, nl, 2);
-    nlset(_UIImageWithNameInDomain, nl, 3);
-    nlset(_UIKitBundle, nl, 4);
-    nlset(_UISharedImageNameGetIdentifier, nl, 5);
-    nlset(_UISharedImageWithIdentifier, nl, 6);
-
-    MSHookFunction(_UIApplicationImageWithName, &$_UIApplicationImageWithName, &__UIApplicationImageWithName);
-    MSHookFunction(_UIImageRefAtPath, &$_UIImageRefAtPath, &__UIImageRefAtPath);
-    MSHookFunction(_UIImageWithName, &$_UIImageWithName, &__UIImageWithName);
-    MSHookFunction(_UIImageWithNameInDomain, &$_UIImageWithNameInDomain, &__UIImageWithNameInDomain);
+    if ([NSBundle bundleWithIdentifier:@"com.apple.UIKit"] != nil) {
+// UIKit {{{
+        memset(nl, 0, sizeof(nl));
+        nl[0].n_un.n_name = (char *) "__UIApplicationImageWithName";
+        nl[1].n_un.n_name = (char *) "__UIImageAtPath";
+        nl[2].n_un.n_name = (char *) "__UIImageRefAtPath";
+        nl[3].n_un.n_name = (char *) "__UIImageWithNameInDomain";
+        nl[4].n_un.n_name = (char *) "__UIKitBundle";
+        nl[5].n_un.n_name = (char *) "__UISharedImageNameGetIdentifier";
+        nl[6].n_un.n_name = (char *) "__UISharedImageWithIdentifier";
+        nlist(UIKit, nl);
+
+        nlset(_UIApplicationImageWithName, nl, 0);
+        nlset(_UIImageAtPath, nl, 1);
+        nlset(_UIImageRefAtPath, nl, 2);
+        nlset(_UIImageWithNameInDomain, nl, 3);
+        nlset(_UIKitBundle, nl, 4);
+        nlset(_UISharedImageNameGetIdentifier, nl, 5);
+        nlset(_UISharedImageWithIdentifier, nl, 6);
+
+        MSHookFunction(_UIApplicationImageWithName, &$_UIApplicationImageWithName, &__UIApplicationImageWithName);
+        MSHookFunction(_UIImageRefAtPath, &$_UIImageRefAtPath, &__UIImageRefAtPath);
+        MSHookFunction(_UIImageWithName, &$_UIImageWithName, &__UIImageWithName);
+        MSHookFunction(_UIImageWithNameInDomain, &$_UIImageWithNameInDomain, &__UIImageWithNameInDomain);
+// }}}
+    }
 
     MSHookFunction(&GSFontCreateWithName, &$GSFontCreateWithName, &_GSFontCreateWithName);
 
     if (dlopen(AudioToolbox, RTLD_LAZY | RTLD_NOLOAD) != NULL) {
+// AudioToolbox {{{
         struct nlist nl[2];
         memset(nl, 0, sizeof(nl));
         nl[0].n_un.n_name = (char *) "__Z24GetFileNameForThisActionmPcRb";
         nlist(AudioToolbox, nl);
         nlset(_Z24GetFileNameForThisActionmPcRb, nl, 0);
         MSHookFunction(_Z24GetFileNameForThisActionmPcRb, &$_Z24GetFileNameForThisActionmPcRb, &__Z24GetFileNameForThisActionmPcRb);
+// }}}
     }
 
     $NSBundle = objc_getClass("NSBundle");
@@ -1534,6 +1569,7 @@ extern "C" void WBInitialize() {
     themes_ = [[NSMutableArray alloc] initWithCapacity:8];
 
     if (NSDictionary *settings = [NSDictionary dictionaryWithContentsOfFile:[NSString stringWithFormat:@"/User/Library/Preferences/com.saurik.WinterBoard.plist"]]) {
+// Load Settings {{{
         if (NSNumber *value = [settings objectForKey:@"SummerBoard"])
             SummerBoard_ = [value boolValue];
         if (NSNumber *value = [settings objectForKey:@"Debug"])
@@ -1573,6 +1609,7 @@ extern "C" void WBInitialize() {
                 testForTheme(@"%@/Library/SummerBoard/Themes/%@", NSHomeDirectory(), name)
 
             }
+// }}}
     }
 
     Info_ = [[NSMutableDictionary dictionaryWithCapacity:16] retain];
@@ -1587,7 +1624,8 @@ extern "C" void WBInitialize() {
 
     SpringBoard_ = [identifier isEqualToString:@"com.apple.springboard"];
 
-    if ([NSBundle bundleWithIdentifier:@"com.apple.chatkit"])
+    if ([NSBundle bundleWithIdentifier:@"com.apple.chatkit"] != nil)
+// ChatKit {{{
         if (sms) {
             $CKMessageCell = objc_getClass("CKMessageCell");
             _CKMessageCell$addBalloonView$ = MSHookMessage($CKMessageCell, @selector(addBalloonView:), &$CKMessageCell$addBalloonView$);
@@ -1603,15 +1641,19 @@ extern "C" void WBInitialize() {
             $CKTranscriptController = objc_getClass("CKTranscriptController");
             _TranscriptController$loadView = MSHookMessage($CKTranscriptController, @selector(loadView), &$TranscriptController$loadView);
         }
+// }}}
 
     if ([identifier isEqualToString:@"com.apple.MobileSMS"]) {
+// MobileSMS {{{
         if (sms) {
             if (_TranscriptController$loadView == NULL) {
                 Class mSMSMessageTranscriptController = objc_getClass("mSMSMessageTranscriptController");
                 _TranscriptController$loadView = MSHookMessage(mSMSMessageTranscriptController, @selector(loadView), &$TranscriptController$loadView);
             }
         }
+// }}}
     } else if (SpringBoard_) {
+// SpringBoard {{{
         CFNotificationCenterAddObserver(
             CFNotificationCenterGetDarwinNotifyCenter(),
             NULL, &ChangeWallpaper, (CFStringRef) @"com.saurik.winterboard.lockbackground", NULL, 0
@@ -1698,6 +1740,7 @@ extern "C" void WBInitialize() {
             English_ = [[NSDictionary alloc] initWithContentsOfFile:@"/System/Library/CoreServices/SpringBoard.app/English.lproj/LocalizedApplicationNames.strings"];
 
         Cache_ = [[NSMutableDictionary alloc] initWithCapacity:64];
+// }}}
     }
 
     Wallpapers_ = [[NSArray arrayWithObjects:@"Wallpaper.mp4", @"Wallpaper.png", @"Wallpaper.jpg", @"Wallpaper.html", nil] retain];
index 3a5d6b67ffd1bb55a1549aae90e9922ef1f00ac3..f88f8b1c5cd9427d83f8abd735768658a311f4b8 100644 (file)
@@ -441,8 +441,9 @@ static NSString *_plist;
 
     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("killall SpringBoard");
+    system("killall lsd SpringBoard");
 }
 
 - (void) cancelChanges {
index f0a730dd9c8eafb23a0cd4fdd70068e44f7a568a..cd66c828d08aa4202c50aba78bc278a5efb2115d 100644 (file)
@@ -1 +1 @@
-Filter = {Bundles = ("com.apple.UIKit");};
+Filter = {Bundles = ("com.apple.ImageIO.framework", "com.apple.MobileCoreServices");};
diff --git a/control b/control
index 14b9711444b86f8bce31801fe031eab7faad336d..220c737058ef56a4840f51df60873a4ee2a8696e 100644 (file)
--- a/control
+++ b/control
@@ -3,7 +3,7 @@ Priority: optional
 Section: System
 Maintainer: Jay Freeman (saurik) <saurik@saurik.com>
 Architecture: iphoneos-arm
-Version: 0.9.3187-1
+Version: 0.9.3192-1
 Description: more powerful, open-source SummerBoard
 Name: WinterBoard
 Depends: mobilesubstrate (>= 0.9.2958-1), killall, preferenceloader, libhide (>= 2.0.4), findutils, net.howett.pincrush (>= 0.0.1-23) | pincrush
diff --git a/extrainst_ b/extrainst_
new file mode 100755 (executable)
index 0000000..22199e0
--- /dev/null
@@ -0,0 +1,4 @@
+#!/bin/bash
+if [[ $1 == install || $1 == upgrade ]]; then
+    launchctl stop com.apple.lsd || true
+fi
index 9e4b07b08f89aee22d9c98703da6afc572d2bb05..a0697818fdb804a52079633045b4e20d70160424 100644 (file)
--- a/makefile
+++ b/makefile
@@ -16,7 +16,7 @@ WinterBoardSettings: Settings.mm makefile
        ldid -S $@
 
 WinterBoard.dylib: Library.mm makefile ../mobilesubstrate/substrate.h
-       $(target)g++ -dynamiclib -g0 -O2 -Wall -o $@ $(filter %.mm,$^) -framework CoreFoundation -framework Foundation -lobjc -init _WBInitialize -I/apl/inc/iPhoneOS-2.0 -framework CoreGraphics -framework GraphicsServices -framework Celestial $(substrate) -framework UIKit -F$(PKG_ROOT)/System/Library/PrivateFrameworks
+       $(target)g++ -dynamiclib -g0 -O2 -Wall -o $@ $(filter %.mm,$^) -framework CoreFoundation -framework Foundation -lobjc -init _WBInitialize -I/apl/inc/iPhoneOS-2.0 -framework CoreGraphics -framework ImageIO -framework GraphicsServices -framework Celestial $(substrate) -framework UIKit -F$(PKG_ROOT)/System/Library/PrivateFrameworks
        ldid -S $@
 
 UIImages: UIImages.mm makefile
@@ -50,7 +50,7 @@ package: all
        cp -a WinterBoard.plist winterboard/Library/MobileSubstrate/DynamicLibraries
        cp -a *.theme winterboard/Library/Themes
        find winterboard -name .svn | while read -r line; do rm -rf "$${line}"; done
-       cp -a control preinst prerm winterboard/DEBIAN
+       cp -a control extrainst_ preinst prerm winterboard/DEBIAN
        cp -a Test.sh Icon-Small.png icon.png WinterBoard.dylib WinterBoard UIImages Info.plist winterboard/Applications/WinterBoard.app
        dpkg-deb -b winterboard winterboard_$(shell grep ^Version: control | cut -d ' ' -f 2)_iphoneos-arm.deb