├── .gitignore ├── FaceForward ├── FaceForward.plist ├── FaceForwardInject.plist ├── Facebook.xm ├── Makefile ├── SpringBoard.xm └── control ├── LICENSE ├── README ├── appslide ├── Makefile ├── Tweak.xm └── layout │ ├── DEBIAN │ └── control │ └── Library │ ├── Activator │ └── Listeners │ │ └── com.chpwn.appslide │ │ ├── Icon-small.png │ │ ├── Icon-small@2x.png │ │ └── Info.plist │ └── MobileSubstrate │ └── DynamicLibraries │ └── appslide.plist ├── colloquy-tab-complete ├── ColloquyTabComplete.plist ├── Makefile ├── Tweak.xm └── control ├── covert ├── Covert.plist ├── Makefile ├── Tweak.xm └── control ├── emptyfoldericons ├── EmptyFolderIcons.plist ├── Makefile ├── Tweak.xm └── control ├── firebreak ├── Firebreak.plist ├── Makefile ├── Tweak.xm └── control ├── five-icon-switcher ├── Makefile ├── Tweak.xm ├── fiveiconswitcher.png └── layout │ ├── DEBIAN │ └── control │ └── Library │ ├── MobileSubstrate │ └── DynamicLibraries │ │ └── fis.plist │ └── PreferenceLoader │ └── Preferences │ ├── five-icon-switcher.plist │ └── five-icon-switcher.png ├── fullwebclips ├── FullWebClips.plist ├── Makefile ├── Tweak.xm └── control ├── hookslaw ├── Makefile ├── Tweak.xm └── layout │ ├── DEBIAN │ └── control │ └── Library │ ├── MobileSubstrate │ └── DynamicLibraries │ │ └── hookslaw.plist │ └── PreferenceLoader │ └── Preferences │ ├── hookslaw.plist │ ├── hookslaw.png │ └── hookslaw@2x.png ├── iad-killer ├── Makefile ├── README └── Tweak.xm ├── internalizer ├── Makefile ├── Tweak.xm └── layout │ ├── DEBIAN │ └── control │ └── Library │ ├── MobileSubstrate │ └── DynamicLibraries │ │ └── internalizer.plist │ └── PreferenceLoader │ └── Preferences │ ├── internalizer.plist │ ├── internalizer.png │ └── internalizer@2x.png ├── listlauncher ├── .gitignore ├── .gitmodules ├── ListLauncher.plist ├── Makefile ├── Tweak.xm └── control ├── no-badges ├── Makefile ├── Tweak.xm ├── control └── nobadges.plist ├── no-bookmarks ├── Makefile ├── Tweak.xm └── layout │ ├── DEBIAN │ └── control │ └── Library │ └── MobileSubstrate │ └── no-bookmarks.plist ├── no-dots ├── Makefile ├── Tweak.xm ├── control └── nodots.plist ├── no-folder-badges ├── Makefile ├── Tweak.xm └── layout │ └── DEBIAN │ └── control ├── splitresizer ├── Makefile ├── SplitResizer.plist ├── Tweak.xm └── control ├── switcherscape ├── Makefile ├── Switcherscape.plist ├── Tweak.xm └── control ├── tvdown ├── Makefile ├── Tweak.xm ├── control └── tvdown.plist ├── twizzler ├── Makefile ├── Tweak.xm ├── Twizzler.plist └── control └── webscrollian ├── Makefile ├── Tweak.xm ├── Webscrollian.plist └── control /.gitignore: -------------------------------------------------------------------------------- 1 | *.deb 2 | .theos/ 3 | _/ 4 | obj/ 5 | theos 6 | -------------------------------------------------------------------------------- /FaceForward/FaceForward.plist: -------------------------------------------------------------------------------- 1 | { Filter = { Bundles = ( "com.facebook.Facebook" ); }; } 2 | -------------------------------------------------------------------------------- /FaceForward/FaceForwardInject.plist: -------------------------------------------------------------------------------- 1 | { Filter = { Bundles = ( "com.apple.springboard" ); }; } 2 | -------------------------------------------------------------------------------- /FaceForward/Facebook.xm: -------------------------------------------------------------------------------- 1 | 2 | 3 | #import 4 | 5 | int flag = 0; 6 | 7 | %hook UIDevice 8 | 9 | - (int)userInterfaceIdiom { 10 | if (flag > 0) return UIUserInterfaceIdiomPhone; 11 | else return %orig; 12 | } 13 | 14 | %end 15 | 16 | %hook FBApplication 17 | 18 | - (void)loadRefresh:(BOOL)refresh chatGoOnlineDelayed:(BOOL)delayed { 19 | flag += 1; 20 | %orig; 21 | flag -= 1; 22 | } 23 | 24 | - (void)initNetworking { 25 | flag += 1; 26 | %orig; 27 | flag -= 1; 28 | } 29 | 30 | %end 31 | 32 | %hook FBAppRequest 33 | 34 | + (id)request { 35 | flag += 1; 36 | id ret = %orig; 37 | flag -= 1; 38 | return ret; 39 | } 40 | 41 | %end 42 | 43 | %hook FBSession 44 | 45 | - (void)convertSessionKeyToAccessToken { 46 | flag -= 1; 47 | %orig; 48 | flag += 1; 49 | } 50 | 51 | %end 52 | 53 | %hook FBAPIRequest 54 | 55 | + (NSString *)apiSecret { 56 | // iphone api secret 57 | return @"c1e620fa708a1d5696fb991c1bde5662"; 58 | 59 | // ipad api secret 60 | return @"7c036d47372dd5f2df27bfe76d4ae0c4"; 61 | } 62 | 63 | + (NSString *)apiKey { 64 | // iphone api key 65 | return @"3e7c78e35a76a9299309885393b02d97"; 66 | 67 | // ipad api key 68 | return @"f0c9c86c466dc6b5acdf0b35308e83d1"; 69 | } 70 | 71 | %end 72 | 73 | 74 | %ctor { 75 | } 76 | 77 | 78 | -------------------------------------------------------------------------------- /FaceForward/Makefile: -------------------------------------------------------------------------------- 1 | include theos/makefiles/common.mk 2 | 3 | TWEAK_NAME = FaceForward FaceForwardInject 4 | FaceForward_FILES = Facebook.xm 5 | FaceForwardInject_FILES = SpringBoard.xm 6 | 7 | include $(THEOS_MAKE_PATH)/tweak.mk 8 | -------------------------------------------------------------------------------- /FaceForward/SpringBoard.xm: -------------------------------------------------------------------------------- 1 | 2 | @interface SBApplication : NSObject { } 3 | 4 | - (BOOL)isClassic; 5 | - (BOOL)isActuallyClassic; 6 | - (NSString *)displayIdentifier; 7 | 8 | @end 9 | 10 | 11 | %hook SBApplication 12 | 13 | - (BOOL)isClassic { 14 | if ([[self displayIdentifier] isEqual:@"com.facebook.Facebook"]) return NO; 15 | else return %orig; 16 | } 17 | 18 | - (BOOL)isActuallyClassic { 19 | return [self isClassic]; 20 | } 21 | 22 | %end 23 | 24 | 25 | -------------------------------------------------------------------------------- /FaceForward/control: -------------------------------------------------------------------------------- 1 | Author: chpwn 2 | Maintainer: BigBoss 3 | Name: FaceForward 4 | Package: com.chpwn.faceforward 5 | Section: Tweaks 6 | Depends: mobilesubstrate, firmware (>= 4.2.1), gsc.ipad 7 | Version: 1.0 8 | Architecture: iphoneos-arm 9 | Description: Re-enable Facebook for iPad. 10 | Depiction: http://moreinfo.thebigboss.org/moreinfo/depiction.php?file=faceforwardData 11 | Homepage: http://moreinfo.thebigboss.org/moreinfo/depiction.php?file=faceforwardData 12 | Sponsor: thebigboss.org 13 | Tag: purpose::extension 14 | dev: chpwn 15 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2011-2013, Xuzz Productions, LLC 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without modification, 5 | are permitted provided that the following conditions are met: 6 | 7 | * Redistributions of source code must retain the above copyright notice, this 8 | list of conditions and the following disclaimer. 9 | 10 | * Redistributions in binary form must reproduce the above copyright notice, this 11 | list of conditions and the following disclaimer in the documentation and/or 12 | other materials provided with the distribution. 13 | 14 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 15 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 16 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 17 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR 18 | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 19 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 20 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 21 | ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 23 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 | -------------------------------------------------------------------------------- /README: -------------------------------------------------------------------------------- 1 | tiny tweaks. 2 | -------------------------------------------------------------------------------- /appslide/Makefile: -------------------------------------------------------------------------------- 1 | include theos/makefiles/common.mk 2 | 3 | export GO_EASY_ON_ME = 1 4 | 5 | export TARGET_CXX = xcrun -sdk iphoneos clang++ 6 | export TARGET_LD = xcrun -sdk iphoneos clang++ 7 | export TARGET = iphone:latest:5.0 8 | export ARCHS = armv7 # pending theos bug: armv7s 9 | 10 | TWEAK_NAME = appslide 11 | appslide_FILES = Tweak.xm 12 | appslide_FRAMEWORKS = UIKit CoreGraphics QuartzCore 13 | 14 | include $(THEOS_MAKE_PATH)/tweak.mk 15 | -------------------------------------------------------------------------------- /appslide/Tweak.xm: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | 4 | static int enabled = 1; 5 | static NSMutableArray *appstack = [[NSMutableArray alloc] init]; 6 | static id toapp = nil; 7 | static id fromapp = nil; 8 | 9 | static void SlideToApp(NSString *identifier) { 10 | id app = [[objc_getClass("SBApplicationController") sharedInstance] applicationWithDisplayIdentifier:identifier]; 11 | [[objc_getClass("SBUIController") sharedInstance] activateApplicationFromSwitcher:app]; 12 | } 13 | 14 | static NSString *Previous(NSArray *element) { 15 | return [element objectAtIndex:0]; 16 | } 17 | 18 | static NSString *Next(NSArray *element) { 19 | return [element objectAtIndex:1]; 20 | } 21 | 22 | static NSArray *Make(NSString *previous, NSString *next) { 23 | return [NSArray arrayWithObjects:previous, next, nil]; 24 | } 25 | 26 | %hook SBAppSwitcherController 27 | 28 | - (void)iconTapped:(id)icon { 29 | // don't slide if you tapped it in the switcher 30 | enabled -= 1; 31 | %orig; 32 | } 33 | 34 | %end 35 | 36 | %hook SBUIController 37 | 38 | - (void)activateURLFromBulletinList:(id)bulletinList { 39 | // don't slide in from notification center widgets 40 | enabled -= 1; 41 | %orig; 42 | } 43 | 44 | static void begintransition(id from, id to) { 45 | if (from != nil && to != nil) { 46 | fromapp = from; 47 | toapp = to; 48 | } else { 49 | enabled -= 1; 50 | } 51 | } 52 | - (void)_beginTransitionFromApp:(id)from toApp:(id)to { 53 | begintransition(from, to); 54 | %orig; 55 | } 56 | - (void)_beginAppToAppTransition:(id)from to:(id)to { 57 | begintransition(from, to); 58 | %orig; 59 | } 60 | %end 61 | 62 | @interface SBAppToAppTransitionController 63 | - (UIApplication *)deactivatingApp; 64 | - (UIApplication *)activatingApp; 65 | @end 66 | 67 | // iOS 6+ 68 | %hook SBAppToAppTransitionController 69 | 70 | - (void)_startAnimation { 71 | if (self.activatingApp != nil && self.deactivatingApp != nil) { 72 | fromapp = self.deactivatingApp; 73 | toapp = self.activatingApp; 74 | } else { 75 | enabled -= 1; 76 | } 77 | 78 | %orig; 79 | } 80 | 81 | %end 82 | 83 | %hook SBBannerController 84 | 85 | // disable when a "slid-up" app is already in view 86 | - (void)_handleBannerTapGesture:(id)gesture { 87 | if (appstack.count > 0) { 88 | enabled -= 1; 89 | } 90 | 91 | %orig; 92 | } 93 | 94 | %end 95 | 96 | static BOOL transition(id self) { 97 | if (enabled <= 0) { 98 | // after a non-enabled transition, drop all 99 | // state so we don't try and go back from that 100 | // or something equally weird like that. 101 | enabled = 1; 102 | [appstack removeAllObjects]; 103 | return YES; 104 | } 105 | 106 | UIView *from = MSHookIvar(self, "_fromView"); 107 | UIView *to = MSHookIvar(self, "_toView"); 108 | 109 | BOOL downwards = NO; 110 | 111 | if ([appstack count] > 0 && [Previous([appstack lastObject]) isEqual:[toapp displayIdentifier]]) { 112 | [appstack removeLastObject]; 113 | downwards = YES; 114 | } else { 115 | [appstack addObject:Make([fromapp displayIdentifier], [toapp displayIdentifier])]; 116 | downwards = NO; 117 | } 118 | 119 | [self addSubview:(downwards ? to : from)]; 120 | [self addSubview:(downwards ? from : to)]; 121 | 122 | CGRect start; 123 | start.origin = CGPointMake(0, downwards ? 0 : [to bounds].size.height); 124 | start.size = [to bounds].size; 125 | [(downwards ? from : to) setFrame:start]; 126 | 127 | [UIView beginAnimations:nil context:NULL]; 128 | [UIView setAnimationDuration:0.5]; 129 | [UIView setAnimationDelegate:self]; 130 | 131 | if ([self respondsToSelector:@selector(_animationDidStop:)]) 132 | [UIView setAnimationDidStopSelector:@selector(_animationDidStop:)]; 133 | else if ([self respondsToSelector:@selector(animationDidStop:finished:)]) 134 | [UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:)]; 135 | 136 | CGRect done; 137 | done.origin = CGPointMake(0, downwards ? [to bounds].size.height : 0); 138 | done.size = [to bounds].size; 139 | [(downwards ? from : to) setFrame:done]; 140 | 141 | [UIView commitAnimations]; 142 | 143 | // reset enabled state for next time 144 | enabled = 1; 145 | 146 | return NO; 147 | } 148 | 149 | %hook SBAppDosadoView 150 | 151 | - (void)beginTransition { 152 | if (transition(self)) %orig; 153 | } 154 | 155 | - (void)_beginTransition { 156 | if (transition(self)) %orig; 157 | } 158 | 159 | %end 160 | 161 | // workaround some weird activator bug where it gives me 162 | // the same exact event twice in a row. wtf? 163 | static BOOL ignore = NO; 164 | 165 | @interface AppSlideActivator : NSObject { } 166 | @end 167 | 168 | @implementation AppSlideActivator 169 | 170 | - (void)stopIgnoring { 171 | ignore = NO; 172 | } 173 | 174 | - (void)activator:(id)activator receiveEvent:(id)event { 175 | if (ignore) { 176 | [event setHandled:YES]; 177 | return; 178 | } 179 | 180 | if ([appstack count] > 0 && Previous([appstack lastObject]) != nil) { 181 | SlideToApp(Previous([appstack lastObject])); 182 | [event setHandled:YES]; 183 | ignore = YES; 184 | [self performSelector:@selector(stopIgnoring) withObject:nil afterDelay:0.6f]; 185 | } 186 | } 187 | @end 188 | 189 | __attribute__((constructor)) static void init() { 190 | // make sure activator is loaded 191 | dlopen("/usr/lib/libactivator.dylib", RTLD_LAZY); 192 | 193 | static AppSlideActivator *listener = nil; 194 | listener = [[AppSlideActivator alloc] init]; 195 | 196 | // default to single home button press 197 | // single press is messed in iOS6, so hardcode activator menu single press action 198 | id la = [objc_getClass("LAActivator") sharedInstance]; 199 | if ([la respondsToSelector:@selector(hasSeenListenerWithName:)] && [la respondsToSelector:@selector(assignEvent:toListenerWithName:)]) { 200 | if (![la hasSeenListenerWithName:@"com.chpwn.appslide"]) { 201 | [la assignEvent:[objc_getClass("LAEvent") eventWithName:@"libactivator.menu.press.single"] toListenerWithName:@"com.chpwn.appslide"]; 202 | } 203 | } 204 | 205 | // register our listener. do this after the above so it still hasn't "seen" us if this is first launch 206 | [[objc_getClass("LAActivator") sharedInstance] registerListener:listener forName:@"com.chpwn.appslide"]; 207 | 208 | %init; 209 | } 210 | 211 | -------------------------------------------------------------------------------- /appslide/layout/DEBIAN/control: -------------------------------------------------------------------------------- 1 | Author: chpwn 2 | Maintainer: BigBoss 3 | Name: appslide 4 | Package: com.chpwn.appslide 5 | Section: Tweaks 6 | Pre-Depends: firmware (>= 4.2) 7 | Depends: libactivator, mobilesubstrate 8 | Version: 1.2 9 | Architecture: iphoneos-arm 10 | Description: like a back button. but better. 11 | Depiction: http://moreinfo.thebigboss.org/moreinfo/depiction.php?file=appslideData 12 | Homepage: http://moreinfo.thebigboss.org/moreinfo/depiction.php?file=appslideData 13 | Icon: file:///Library/Activator/Listeners/com.chpwn.appslide/Icon-small.png 14 | Sponsor: thebigboss.org 15 | Tag: purpose::extension 16 | dev: chpwn 17 | -------------------------------------------------------------------------------- /appslide/layout/Library/Activator/Listeners/com.chpwn.appslide/Icon-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grp/tweaks/e70b851136aa038198da9cda784e2a6f6b535624/appslide/layout/Library/Activator/Listeners/com.chpwn.appslide/Icon-small.png -------------------------------------------------------------------------------- /appslide/layout/Library/Activator/Listeners/com.chpwn.appslide/Icon-small@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grp/tweaks/e70b851136aa038198da9cda784e2a6f6b535624/appslide/layout/Library/Activator/Listeners/com.chpwn.appslide/Icon-small@2x.png -------------------------------------------------------------------------------- /appslide/layout/Library/Activator/Listeners/com.chpwn.appslide/Info.plist: -------------------------------------------------------------------------------- 1 | { 2 | title = appslide; 3 | description = "like a back button. but better."; 4 | "receives-raw-events" = YES; 5 | "compatible-modes" = ( 6 | springboard, 7 | application, 8 | ); 9 | } -------------------------------------------------------------------------------- /appslide/layout/Library/MobileSubstrate/DynamicLibraries/appslide.plist: -------------------------------------------------------------------------------- 1 | { Filter = { Bundles = ( "com.apple.springboard" ); }; } 2 | -------------------------------------------------------------------------------- /colloquy-tab-complete/ColloquyTabComplete.plist: -------------------------------------------------------------------------------- 1 | { Filter = { Bundles = ( "info.colloquy.mobile" ); }; } 2 | -------------------------------------------------------------------------------- /colloquy-tab-complete/Makefile: -------------------------------------------------------------------------------- 1 | include theos/makefiles/common.mk 2 | 3 | TWEAK_NAME = ColloquyTabComplete 4 | ColloquyTabComplete_FILES = Tweak.xm 5 | ColloquyTabComplete_FRAMEWORKS = UIKit 6 | ColloquyTabComplete_PRIVATE_FRAMEWORKS = GraphicsServices 7 | 8 | include $(THEOS_MAKE_PATH)/tweak.mk 9 | -------------------------------------------------------------------------------- /colloquy-tab-complete/Tweak.xm: -------------------------------------------------------------------------------- 1 | 2 | #import 3 | #import 4 | #import 5 | 6 | @protocol CQTextCompletionViewDelegate; 7 | 8 | @interface CQTextCompletionView : UIView { 9 | @protected 10 | IBOutlet id delegate; 11 | CGSize _completionTextSizes[5]; 12 | NSUInteger _selectedCompletion; 13 | NSArray *_completions; 14 | } 15 | @property (nonatomic, copy) NSArray *completions; 16 | @property (nonatomic) NSUInteger selectedCompletion; 17 | @property (nonatomic, getter=isCloseSelected) BOOL closeSelected; 18 | 19 | @property (nonatomic, assign) id delegate; 20 | @end 21 | 22 | @protocol CQTextCompletionViewDelegate 23 | @optional 24 | - (void) textCompletionView:(CQTextCompletionView *) textCompletionView didSelectCompletion:(NSString *) completion; 25 | - (void) textCompletionViewDidClose:(CQTextCompletionView *) textCompletionView; 26 | @end 27 | 28 | static CQTextCompletionView *currentCompletionView = nil; 29 | 30 | %hook CQTextCompletionView 31 | 32 | - (id)initWithFrame:(CGRect)frame { 33 | if ((self = %orig)) { 34 | currentCompletionView = self; 35 | } 36 | 37 | return self; 38 | } 39 | 40 | - (void)dealloc { 41 | currentCompletionView = nil; 42 | %orig; 43 | } 44 | 45 | %end 46 | 47 | %hook UIApplication 48 | 49 | - (void)_handleKeyEvent:(GSEventRef)event { 50 | %orig; 51 | 52 | if (GSEventIsTabKeyEvent(event)) { 53 | NSString *completion = [currentCompletionView.completions count] ? [currentCompletionView.completions objectAtIndex:0] : nil; 54 | 55 | if (completion != nil) { 56 | [currentCompletionView.delegate textCompletionView:currentCompletionView didSelectCompletion:completion]; 57 | } 58 | } 59 | } 60 | 61 | %end 62 | 63 | -------------------------------------------------------------------------------- /colloquy-tab-complete/control: -------------------------------------------------------------------------------- 1 | Author: chpwn 2 | Maintainer: BigBoss 3 | Name: Colloquy Tab Complete 4 | Package: com.chpwn.colloquy-tab-complete 5 | Section: Tweaks 6 | Depends: mobilesubstrate, firmware (>= 4.2.1) 7 | Version: 1.0 8 | Architecture: iphoneos-arm 9 | Description: Hardware tab complete for Colloquy. 10 | Depiction: http://moreinfo.thebigboss.org/moreinfo/depiction.php?file=colloquytabcompleteData 11 | Homepage: http://moreinfo.thebigboss.org/moreinfo/depiction.php?file=colloquytabcompleteData 12 | Sponsor: thebigboss.org 13 | Tag: purpose::extension 14 | dev: chpwn 15 | -------------------------------------------------------------------------------- /covert/Covert.plist: -------------------------------------------------------------------------------- 1 | { Filter = { Bundles = ( "com.apple.mobilesafari" ); }; } 2 | -------------------------------------------------------------------------------- /covert/Makefile: -------------------------------------------------------------------------------- 1 | include theos/makefiles/common.mk 2 | 3 | export GO_EASY_ON_ME=1 4 | 5 | TWEAK_NAME = Covert 6 | Covert_FILES = Tweak.xm 7 | Covert_FRAMEWORKS = UIKit 8 | 9 | include $(FW_MAKEDIR)/tweak.mk 10 | -------------------------------------------------------------------------------- /covert/Tweak.xm: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | 4 | static id addressView = nil; 5 | static id buttonBar = nil; 6 | static id navbars = nil; 7 | static id button = nil; 8 | static NSHTTPCookieAcceptPolicy policy; 9 | static BOOL enabled = nil; 10 | 11 | %hook AddressView 12 | 13 | %new(v@:cc) 14 | - (void)setPrivate:(BOOL)priv animated:(BOOL)animated { 15 | UIView *bar = MSHookIvar(self, "_gradientBar"); 16 | NSArray *subs = [bar subviews]; 17 | 18 | if (animated) { 19 | [UIView beginAnimations:nil context:NULL]; 20 | [UIView setAnimationDuration:0.5f]; 21 | } 22 | 23 | if (priv) { 24 | for (UIView *s in subs) { 25 | if ([s isKindOfClass:[UIImageView class]]) [s setAlpha:0.7f]; 26 | } 27 | } else { 28 | for (UIView *s in subs) { 29 | if ([s isKindOfClass:[UIImageView class]]) [s setAlpha:1.0f]; 30 | } 31 | } 32 | 33 | if (animated) [UIView commitAnimations]; 34 | } 35 | 36 | - (id)initWithFrame:(CGRect)frame { 37 | return (addressView = %orig); 38 | } 39 | 40 | %end 41 | 42 | %hook UINavigationBar 43 | 44 | %new(v@:cc) 45 | + (void)setPrivate:(BOOL)priv animated:(BOOL)animated { 46 | if (animated) { 47 | [UIView beginAnimations:nil context:NULL]; 48 | [UIView setAnimationDuration:0.5f]; 49 | } 50 | 51 | for (id nav in navbars) { 52 | if (priv) [nav setTintColor:[UIColor grayColor]]; 53 | else [nav setTintColor:nil]; 54 | } 55 | 56 | if (animated) [UIView commitAnimations]; 57 | } 58 | 59 | - (id)initWithFrame:(CGRect)frame { 60 | self = %orig; 61 | [navbars addObject:self]; 62 | [[self class] setPrivate:enabled animated:NO]; 63 | return self; 64 | } 65 | 66 | - (void)dealloc { 67 | [navbars removeObject:self]; 68 | %orig; 69 | } 70 | 71 | %end 72 | 73 | %hook BrowserButtonBar 74 | 75 | %new(v@:cc) 76 | - (void)setPrivate:(BOOL)priv animated:(BOOL)animated { 77 | if (animated) { 78 | [UIView beginAnimations:nil context:NULL]; 79 | [UIView setAnimationDuration:0.5f]; 80 | } 81 | 82 | if (priv) [self setTintColor:[UIColor grayColor]]; 83 | else [self setTintColor:nil]; 84 | 85 | if (animated) [UIView commitAnimations]; 86 | } 87 | 88 | - (void)setFrame:(CGRect)frame { 89 | %orig; 90 | 91 | // XXX: i fail, and i know it 92 | if (frame.size.height < 44.0f) 93 | [button setFrame:CGRectMake(180.0f, 5.0f, 120.0f, 24.0f)]; 94 | else 95 | [button setFrame:CGRectMake(112.0f, 8.0f, 120.0f, 30.0f)]; 96 | } 97 | 98 | %end 99 | 100 | %hook WebHistory 101 | 102 | // XXX: (jedi mind trick:) you did /not/ see this 103 | - (void)_visitedURL:(NSURL *)url withTitle:(NSString *)title method:(NSString *)method wasFailure:(BOOL)wasFailure increaseVisitCount:(BOOL)increaseVisitCount { 104 | if (!enabled) %orig; 105 | } 106 | 107 | %end 108 | 109 | %hook BrowserController 110 | 111 | %new(c@:) 112 | - (BOOL)covertEnabled { 113 | return enabled; 114 | } 115 | 116 | - (void)addRecentSearch:(id)search { 117 | if (!enabled) %orig; 118 | } 119 | 120 | - (void)setShowingTabs:(BOOL)tabs { 121 | %orig; 122 | 123 | if (tabs) [buttonBar addSubview:button]; 124 | else [button removeFromSuperview]; 125 | } 126 | 127 | %end 128 | 129 | %hook Application 130 | 131 | %new(v@:) 132 | - (void)togglePrivate { 133 | enabled = !enabled; 134 | 135 | if (enabled) { 136 | policy = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookieAcceptPolicy]; 137 | [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyNever]; 138 | [[NSUserDefaults standardUserDefaults] setInteger:policy forKey:@"CovertCookiePolicy"]; 139 | } else { 140 | [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookieAcceptPolicy:policy]; 141 | } 142 | 143 | if (enabled) { 144 | [button setStyle:(UIBarButtonItemStyle)2]; 145 | [button setTitle:@"Exit Private" forState:UIControlStateNormal]; 146 | } else { 147 | [button setStyle:(UIBarButtonItemStyle)0]; 148 | [button setTitle:@"Private Browsing" forState:UIControlStateNormal]; 149 | 150 | [MSHookIvar(addressView, "_searchTextField") setText:@""]; 151 | } 152 | 153 | [buttonBar setPrivate:enabled animated:YES]; 154 | [addressView setPrivate:enabled animated:YES]; 155 | [UINavigationBar setPrivate:enabled animated:YES]; 156 | } 157 | 158 | - (void)applicationWillTerminate:(UIApplication *)application { 159 | %orig; 160 | 161 | [[NSUserDefaults standardUserDefaults] setInteger:policy forKey:@"CovertCookiePolicy"]; 162 | [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookieAcceptPolicy:policy]; 163 | } 164 | 165 | - (void)applicationDidFinishLaunching:(UIApplication *)application { 166 | %orig; 167 | 168 | navbars = [[NSMutableArray alloc] init]; 169 | buttonBar = [[%c(BrowserController) sharedBrowserController] buttonBar]; 170 | 171 | if ([[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys] containsObject:@"CovertCookiePolicy"]) { 172 | policy = [[NSUserDefaults standardUserDefaults] integerForKey:@"CovertCookiePolicy"]; 173 | [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookieAcceptPolicy:policy]; 174 | } else { 175 | policy = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookieAcceptPolicy]; 176 | [[NSUserDefaults standardUserDefaults] setInteger:policy forKey:@"CovertCookiePolicy"]; 177 | } 178 | 179 | button = [[%c(UINavigationButton) alloc] initWithTitle:@"Private Browsing"]; 180 | [button addTarget:self action:@selector(togglePrivate) forControlEvents:UIControlEventTouchUpInside]; 181 | [buttonBar setFrame:[buttonBar frame]]; 182 | } 183 | %end 184 | 185 | -------------------------------------------------------------------------------- /covert/control: -------------------------------------------------------------------------------- 1 | Author: chpwn 2 | Maintainer: BigBoss 3 | Name: Covert 4 | Package: com.chpwn.covert 5 | Section: Tweaks 6 | Pre-Depends: firmware (>= 4.0) 7 | Depends: mobilesubstrate 8 | Version: 1.2.2 9 | Architecture: iphoneos-arm 10 | Description: Private browsing for Safari. 11 | Depiction: http://http://moreinfo.thebigboss.org/moreinfo/depiction.php?file=covertDp 12 | Homepage: http://http://moreinfo.thebigboss.org/moreinfo/depiction.php?file=covertDp 13 | Sponsor: thebigboss.org 14 | dev: chpwn 15 | -------------------------------------------------------------------------------- /emptyfoldericons/EmptyFolderIcons.plist: -------------------------------------------------------------------------------- 1 | { Filter = { Bundles = ( "com.apple.springboard" ); }; } 2 | -------------------------------------------------------------------------------- /emptyfoldericons/Makefile: -------------------------------------------------------------------------------- 1 | include theos/makefiles/common.mk 2 | 3 | TWEAK_NAME = EmptyFolderIcons 4 | EmptyFolderIcons_FILES = Tweak.xm 5 | EmptyFolderIcons_FRAMEWORKS = UIKit CoreGraphics QuartzCore 6 | 7 | include $(THEOS_MAKE_PATH)/tweak.mk 8 | -------------------------------------------------------------------------------- /emptyfoldericons/Tweak.xm: -------------------------------------------------------------------------------- 1 | 2 | #import 3 | #import 4 | 5 | 6 | %hook SBFolderIcon 7 | 8 | - (id)_miniIconGridFromRow:(int)row toRow:(int)row_ { 9 | return [UIImage imageNamed:@"FolderIconBG.png"]; 10 | } 11 | 12 | %end 13 | 14 | 15 | -------------------------------------------------------------------------------- /emptyfoldericons/control: -------------------------------------------------------------------------------- 1 | Author: chpwn 2 | Maintainer: BigBoss 3 | Name: Empty Folder Icons 4 | Package: com.chpwn.emptyfoldericons 5 | Section: Tweaks 6 | Depends: mobilesubstrate, firmware (>= 4.2.1) 7 | Version: 1.0 8 | Architecture: iphoneos-arm 9 | Description: Empty grid inside folder icons. 10 | Depiction: http://moreinfo.thebigboss.org/moreinfo/depiction.php?file=emptyfoldericonsData 11 | Homepage: http://moreinfo.thebigboss.org/moreinfo/depiction.php?file=emptyfoldericonsData 12 | Sponsor: thebigboss.org 13 | Tag: purpose::extension 14 | dev: chpwn 15 | -------------------------------------------------------------------------------- /firebreak/Firebreak.plist: -------------------------------------------------------------------------------- 1 | { Filter = { Bundles = ( "com.apple.camera" ); }; } 2 | -------------------------------------------------------------------------------- /firebreak/Makefile: -------------------------------------------------------------------------------- 1 | include theos/makefiles/common.mk 2 | 3 | TWEAK_NAME = Firebreak 4 | Firebreak_FILES = Tweak.xm 5 | 6 | include $(THEOS_MAKE_PATH)/tweak.mk 7 | -------------------------------------------------------------------------------- /firebreak/Tweak.xm: -------------------------------------------------------------------------------- 1 | 2 | #import 3 | #import 4 | 5 | Boolean (*original_CFPreferencesGetAppBooleanValue)(CFStringRef key, CFStringRef applicationID, Boolean *keyExistsAndHasValidFormat); 6 | Boolean replaced_CFPreferencesGetAppBooleanValue(CFStringRef key, CFStringRef applicationID, Boolean *keyExistsAndHasValidFormat) { 7 | if ([(NSString *)key isEqualToString:@"EnableFirebreak"]) return true; 8 | return original_CFPreferencesGetAppBooleanValue(key, applicationID, keyExistsAndHasValidFormat); 9 | } 10 | 11 | %ctor { 12 | MSHookFunction((void *)CFPreferencesGetAppBooleanValue, (void *)replaced_CFPreferencesGetAppBooleanValue, (void **)&original_CFPreferencesGetAppBooleanValue); 13 | } 14 | 15 | 16 | -------------------------------------------------------------------------------- /firebreak/control: -------------------------------------------------------------------------------- 1 | Author: chpwn 2 | Maintainer: BigBoss 3 | Name: Full WebCLips 4 | Package: com.chpwn.firebreak 5 | Section: Tweaks 6 | Pre-Depends: firmware (>= 5.0) 7 | Depends: mobilesubstrate 8 | Version: 1.0.0 9 | Architecture: iphoneos-arm 10 | Description: Enable panorama in the Camera app. 11 | Depiction: http://moreinfo.thebigboss.org/moreinfo/depiction.php?file=firebreakData 12 | Homepage: http://moreinfo.thebigboss.org/moreinfo/depiction.php?file=firebreakData 13 | Sponsor: thebigboss.org 14 | Tag: purpose::extension 15 | dev: chpwn 16 | -------------------------------------------------------------------------------- /five-icon-switcher/Makefile: -------------------------------------------------------------------------------- 1 | TWEAK_NAME = fis 2 | fis_OBJCC_FILES = Tweak.mm 3 | fis_FRAMEWORKS = UIKit QuartzCore CoreGraphics 4 | 5 | include framework/makefiles/common.mk 6 | include framework/makefiles/tweak.mk 7 | -------------------------------------------------------------------------------- /five-icon-switcher/Tweak.xm: -------------------------------------------------------------------------------- 1 | 2 | #import 3 | #import 4 | 5 | #define idForKeyWithDefault(dict, key, default) ([(dict) objectForKey:(key)]?:(default)) 6 | #define floatForKeyWithDefault(dict, key, default) ({ id _result = [(dict) objectForKey:(key)]; (_result)?[_result floatValue]:(default); }) 7 | #define NSIntegerForKeyWithDefault(dict, key, default) (NSInteger)({ id _result = [(dict) objectForKey:(key)]; (_result)?[_result integerValue]:(default); }) 8 | #define BOOLForKeyWithDefault(dict, key, default) (BOOL)({ id _result = [(dict) objectForKey:(key)]; (_result)?[_result boolValue]:(default); }) 9 | 10 | #define PreferencesFilePath [NSHomeDirectory() stringByAppendingPathComponent:@"Library/Preferences/com.chpwn.five-icon-switcher.plist"] 11 | #define PreferencesChangedNotification "com.chpwn.five-icon-switcher.prefs" 12 | 13 | #define GetPreference(name, type) type ## ForKeyWithDefault(prefsDict, @#name, (name)) 14 | 15 | @interface SBAppSwitcherBarView : UIView { } 16 | + (unsigned)iconsPerPage:(int)page; 17 | - (CGPoint)_firstPageOffset; 18 | - (CGPoint)_firstPageOffset:(CGSize)size; 19 | - (CGRect)_frameForIndex:(unsigned)index withSize:(CGSize)size; 20 | - (CGRect)_iconFrameForIndex:(unsigned)index withSize:(CGSize)size; 21 | @end 22 | 23 | static NSDictionary *prefsDict = nil; 24 | 25 | static void preferenceChangedCallback(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo) { 26 | [prefsDict release]; 27 | prefsDict = [[NSDictionary alloc] initWithContentsOfFile:PreferencesFilePath]; 28 | } 29 | 30 | CGRect make_frame(SBAppSwitcherBarView *self, int index, CGSize size, CGRect orig) { 31 | CGRect r = orig; 32 | 33 | int page = index / [[self class] iconsPerPage:0]; 34 | CGFloat gap = ([self frame].size.width - (r.size.width * [[self class] iconsPerPage:0])) / ([[self class] iconsPerPage:0] + 1); 35 | r.origin.x = gap; 36 | 37 | if ([self respondsToSelector:@selector(_firstPageOffset)]) r.origin.x += [self _firstPageOffset].x; 38 | else r.origin.x += [self _firstPageOffset:[self frame].size].x; 39 | r.origin.x += (gap + size.width) * index; 40 | r.origin.x += (gap * page); 41 | r.origin.x = floorf(r.origin.x); 42 | 43 | return r; 44 | } 45 | 46 | %hook SBAppSwitcherBarView 47 | 48 | + (unsigned int)iconsPerPage:(int)page { 49 | return [[prefsDict objectForKey:@"FISIconCount"] intValue] ?: 5; 50 | } 51 | 52 | // 4.0 and 4.1 53 | - (CGRect)_frameForIndex:(unsigned)index withSize:(CGSize)size { 54 | return make_frame(self, index, size, %orig); 55 | } 56 | 57 | - (CGPoint)_firstPageOffset:(CGSize)offset { 58 | %log; 59 | return %orig; 60 | } 61 | 62 | // 4.2 63 | - (CGRect)_iconFrameForIndex:(unsigned)index withSize:(CGSize)size { 64 | return make_frame(self, index, size, %orig); 65 | } 66 | 67 | 68 | %end 69 | 70 | __attribute__((constructor)) static void fis_init() { 71 | NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 72 | 73 | // SpringBoard only! 74 | if (![[[NSBundle mainBundle] bundleIdentifier] isEqualToString:@"com.apple.springboard"]) 75 | return; 76 | 77 | prefsDict = [[NSDictionary alloc] initWithContentsOfFile:PreferencesFilePath]; 78 | CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), NULL, preferenceChangedCallback, CFSTR(PreferencesChangedNotification), NULL, CFNotificationSuspensionBehaviorCoalesce); 79 | 80 | [pool release]; 81 | } 82 | -------------------------------------------------------------------------------- /five-icon-switcher/fiveiconswitcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grp/tweaks/e70b851136aa038198da9cda784e2a6f6b535624/five-icon-switcher/fiveiconswitcher.png -------------------------------------------------------------------------------- /five-icon-switcher/layout/DEBIAN/control: -------------------------------------------------------------------------------- 1 | Package: com.chpwn.five-icon-switcher 2 | Name: Five Icon Switcher 3 | Pre-Depends: firmware (>= 4.0) 4 | Depends: mobilesubstrate 5 | Version: 1.1 6 | Architecture: iphoneos-arm 7 | Description: Five icons in the multitasking switcher! 8 | Maintainer: chpwn 9 | Author: chpwn 10 | Section: Tweaks 11 | -------------------------------------------------------------------------------- /five-icon-switcher/layout/Library/MobileSubstrate/DynamicLibraries/fis.plist: -------------------------------------------------------------------------------- 1 | Filter = { 2 | Bundles = (com.apple.springboard); 3 | }; -------------------------------------------------------------------------------- /five-icon-switcher/layout/Library/PreferenceLoader/Preferences/five-icon-switcher.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | title 6 | Five Icon Switcher 7 | entry 8 | 9 | cell 10 | PSLinkCell 11 | icon 12 | five-icon-switcher.png 13 | label 14 | Five Icon Switcher 15 | 16 | items 17 | 18 | 19 | cell 20 | PSGroupCell 21 | label 22 | Five Icon Switcher 23 | 24 | 25 | cell 26 | PSLinkListCell 27 | default 28 | 5 29 | detail 30 | PSListItemsController 31 | key 32 | FISIconCount 33 | label 34 | Icons per Page 35 | validTitles 36 | 37 | One 38 | Two 39 | Three 40 | Four 41 | Five 42 | Six 43 | Seven 44 | Eight 45 | Nine 46 | Ten 47 | 48 | validValues 49 | 50 | 1 51 | 2 52 | 3 53 | 4 54 | 5 55 | 6 56 | 7 57 | 8 58 | 9 59 | 10 60 | 61 | defaults 62 | com.chpwn.five-icon-switcher 63 | PostNotification 64 | com.chpwn.five-icon-switcher.prefs 65 | 66 | 67 | 68 | 69 | cell 70 | PSGroupCell 71 | footerText 72 | Five Icon Switcher © 2010 Grant Paul. 73 | 74 | Licensed under the BSD license at http://github.com/chpwn/five-icon-switcher. 75 | All contributions are welcome. 76 | 77 | 78 | cell 79 | PSGroupCell 80 | isStaticText 81 | true 82 | requiredCapabilities 83 | 84 | 85 | wildcat 86 | 87 | voip 88 | 89 | 90 | 91 | 92 | 93 | cell 94 | PSTitleValueCell 95 | label 96 | Five Icon Switcher © 2010 Grant Paul. 97 | 98 | Licensed under the BSD license at http://github.com/chpwn/five-icon-switcher. 99 | All contributions are welcome. 100 | requiredCapabilities 101 | 102 | 103 | wildcat 104 | 105 | voip 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | -------------------------------------------------------------------------------- /five-icon-switcher/layout/Library/PreferenceLoader/Preferences/five-icon-switcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grp/tweaks/e70b851136aa038198da9cda784e2a6f6b535624/five-icon-switcher/layout/Library/PreferenceLoader/Preferences/five-icon-switcher.png -------------------------------------------------------------------------------- /fullwebclips/FullWebClips.plist: -------------------------------------------------------------------------------- 1 | { Filter = { Bundles = ( "com.apple.UIKit" ); }; } 2 | -------------------------------------------------------------------------------- /fullwebclips/Makefile: -------------------------------------------------------------------------------- 1 | include theos/makefiles/common.mk 2 | 3 | TWEAK_NAME = FullWebClips 4 | FullWebClips_FILES = Tweak.xm 5 | FullWebClips_FRAMEWORKS = UIKit 6 | 7 | include $(THEOS_MAKE_PATH)/tweak.mk 8 | -------------------------------------------------------------------------------- /fullwebclips/Tweak.xm: -------------------------------------------------------------------------------- 1 | 2 | #import 3 | #import 4 | 5 | @interface UIWebClip : NSObject { } 6 | 7 | + (BOOL)webClipFullScreenValueForWebDocumentView:(id)webDocumentView; 8 | @property (assign) BOOL fullScreen; 9 | - (void)updateOnDisk; 10 | 11 | @end 12 | 13 | @interface WebClipViewController { 14 | UITableView *_tableView; 15 | UITableViewCell *_tableViewCell; 16 | UILabel *_infoLabel; 17 | UIView *_infoLabelContainer; 18 | BOOL _suspendAfterDismiss; 19 | UIWebClip *_webClip; 20 | } 21 | 22 | @property (retain) UIWebClip *webClip; 23 | 24 | @end 25 | 26 | %hook WebClipViewController 27 | 28 | // make room for the added row on the iPad 29 | - (CGSize)contentSizeForViewInPopoverView { 30 | CGSize ret = %orig; 31 | ret.height += 36.0f; 32 | return ret; 33 | } 34 | 35 | %new(i@:@) 36 | - (int)numberOfSectionsInTableView:(UITableView *)tableView { 37 | return 2; 38 | } 39 | 40 | - (void)layoutSubviews { 41 | %orig; 42 | 43 | UITableView *tableView = MSHookIvar(self, "_tableView"); 44 | [tableView setContentInset:UIEdgeInsetsZero]; 45 | } 46 | 47 | %new(f@:@@) 48 | - (float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 49 | if ([indexPath section] == 1) { 50 | return 44.0f; 51 | } 52 | 53 | return [tableView rowHeight]; 54 | } 55 | 56 | - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 57 | if ([indexPath section] == 1) { 58 | UIWebClip *clip = [self webClip]; 59 | 60 | UITableViewCell *cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil] autorelease]; 61 | [cell.textLabel setText:@"Fullscreen Web Clip"]; 62 | 63 | if ([clip fullScreen]) { 64 | [cell setAccessoryType:UITableViewCellAccessoryCheckmark]; 65 | } else { 66 | [cell setAccessoryType:UITableViewCellAccessoryNone]; 67 | } 68 | 69 | return cell; 70 | } 71 | 72 | return %orig; 73 | } 74 | 75 | %new(v@:@@) 76 | - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 77 | if ([indexPath section] == 1) { 78 | UIWebClip *clip = [self webClip]; 79 | [clip setFullScreen:![clip fullScreen]]; 80 | [clip updateOnDisk]; 81 | 82 | UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 83 | if ([clip fullScreen]) { 84 | [cell setAccessoryType:UITableViewCellAccessoryCheckmark]; 85 | } else { 86 | [cell setAccessoryType:UITableViewCellAccessoryNone]; 87 | } 88 | 89 | [tableView deselectRowAtIndexPath:indexPath animated:YES]; 90 | } 91 | } 92 | 93 | %end 94 | 95 | 96 | -------------------------------------------------------------------------------- /fullwebclips/control: -------------------------------------------------------------------------------- 1 | Author: chpwn 2 | Maintainer: BigBoss 3 | Name: Full WebCLips 4 | Package: com.chpwn.fullwebclips 5 | Section: Tweaks 6 | Depends: mobilesubstrate 7 | Version: 1.0.0 8 | Architecture: iphoneos-arm 9 | Description: Decide if a web clip is fullscreen. 10 | Depiction: http://moreinfo.thebigboss.org/moreinfo/depiction.php?file=fullwebclipsData 11 | Homepage: http://moreinfo.thebigboss.org/moreinfo/depiction.php?file=fullwebclipsData 12 | Sponsor: thebigboss.org 13 | Tag: purpose::extension 14 | dev: chpwn 15 | -------------------------------------------------------------------------------- /hookslaw/Makefile: -------------------------------------------------------------------------------- 1 | export TARGET_CXX = xcrun -sdk iphoneos clang++ 2 | export TARGET_LD = xcrun -sdk iphoneos clang++ 3 | export TARGET = iphone:latest:5.0 4 | export ARCHS = armv7 # pending theos bug: armv7s 5 | 6 | include theos/makefiles/common.mk 7 | 8 | TWEAK_NAME = hookslaw 9 | hookslaw_FILES = Tweak.xm 10 | hookslaw_FRAMEWORKS = QuartzCore 11 | 12 | include $(THEOS_MAKE_PATH)/tweak.mk 13 | -------------------------------------------------------------------------------- /hookslaw/Tweak.xm: -------------------------------------------------------------------------------- 1 | 2 | 3 | #import 4 | 5 | @interface CASpringAnimation : CABasicAnimation 6 | @property (nonatomic, assign) CGFloat mass; 7 | @property (nonatomic, assign) CGFloat stiffness; 8 | @property (nonatomic, assign) CGFloat damping; 9 | @property (nonatomic, assign) CGFloat velocity; 10 | @end 11 | 12 | static NSDictionary *preferences = nil; 13 | 14 | static NSNumberFormatter *formatter = nil; 15 | 16 | 17 | static CGFloat PreferencesFloat(NSString *key, CGFloat def) { 18 | NSString *s = [preferences objectForKey:key]; 19 | 20 | if (s != nil) { 21 | NSNumber *n = [formatter numberFromString:s]; 22 | 23 | if (n != nil) { 24 | CGFloat f = [n floatValue]; 25 | 26 | if (f > 0) { 27 | return f; 28 | } 29 | } 30 | } 31 | 32 | return def; 33 | } 34 | 35 | %hook CABasicAnimation 36 | 37 | + (id)animationWithKeyPath:(NSString *)keyPath { 38 | if (self == [CABasicAnimation class]) { 39 | CASpringAnimation *spring = [CASpringAnimation animationWithKeyPath:keyPath]; 40 | [spring setMass:PreferencesFloat(@"Mass", 1.0)]; 41 | [spring setStiffness:PreferencesFloat(@"Stiffness", 300.0)]; 42 | [spring setDamping:PreferencesFloat(@"Damping", 30.0)]; 43 | [spring setVelocity:PreferencesFloat(@"Velocity", 20.0)]; 44 | return spring; 45 | } else { 46 | return %orig; 47 | } 48 | } 49 | 50 | - (void)setDuration:(NSTimeInterval)duration { 51 | %orig(duration * PreferencesFloat(@"TimeScale", 1.5)); 52 | } 53 | 54 | %end 55 | 56 | #define PreferencesChangedNotification "com.chpwn.iphone.cydia.hooks-law.preferences-changed" 57 | #define PreferencesFilePath [NSHomeDirectory() stringByAppendingPathComponent:@"Library/Preferences/com.chpwn.iphone.cydia.hooks-law.plist"] 58 | 59 | 60 | static void PreferencesChangedCallback(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo) { 61 | [preferences release]; 62 | preferences = [[NSDictionary alloc] initWithContentsOfFile:PreferencesFilePath]; 63 | } 64 | 65 | __attribute__((constructor)) static void hookslaw_init() { 66 | NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 67 | 68 | formatter = [[NSNumberFormatter alloc] init]; 69 | [formatter setNumberStyle:NSNumberFormatterDecimalStyle]; 70 | 71 | preferences = [[NSDictionary alloc] initWithContentsOfFile:PreferencesFilePath]; 72 | CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), NULL, PreferencesChangedCallback, CFSTR(PreferencesChangedNotification), NULL, CFNotificationSuspensionBehaviorCoalesce); 73 | 74 | 75 | [pool release]; 76 | } 77 | 78 | -------------------------------------------------------------------------------- /hookslaw/layout/DEBIAN/control: -------------------------------------------------------------------------------- 1 | Author: chpwn 2 | Maintainer: BigBoss 3 | Name: %hook's law 4 | Package: com.chpwn.iphone.cydia.hooks-law 5 | Section: Tweaks 6 | Pre-Depends: firmware (>= 6.0) 7 | Depends: mobilesubstrate, preferenceloader 8 | Version: 1.0.1 9 | Architecture: iphoneos-arm 10 | Description: Make everything a spring. 11 | Depiction: http://moreinfo.thebigboss.org/moreinfo/depiction.php?file=hookslawDp 12 | Homepage: http://moreinfo.thebigboss.org/moreinfo/depiction.php?file=hookslawDp 13 | Sponsor: thebigboss.org 14 | dev: chpwn 15 | -------------------------------------------------------------------------------- /hookslaw/layout/Library/MobileSubstrate/DynamicLibraries/hookslaw.plist: -------------------------------------------------------------------------------- 1 | { Filter = { Bundles = ( "com.apple.UIKit" ); }; } 2 | -------------------------------------------------------------------------------- /hookslaw/layout/Library/PreferenceLoader/Preferences/hookslaw.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | entry 6 | 7 | cell 8 | PSLinkCell 9 | icon 10 | hookslaw.png 11 | label 12 | %hook's law 13 | 14 | items 15 | 16 | 17 | cell 18 | PSGroupCell 19 | label 20 | Spring Constants 21 | 22 | 23 | PostNotification 24 | com.chpwn.iphone.cydia.hooks-law.preferences-changed 25 | cell 26 | PSEditTextCell 27 | default 28 | 300 29 | defaults 30 | com.chpwn.iphone.cydia.hooks-law 31 | key 32 | Stiffness 33 | label 34 | Stiffness 35 | 36 | 37 | PostNotification 38 | com.chpwn.iphone.cydia.hooks-law.preferences-changed 39 | cell 40 | PSEditTextCell 41 | default 42 | 30 43 | defaults 44 | com.chpwn.iphone.cydia.hooks-law 45 | key 46 | Damping 47 | label 48 | Damping 49 | 50 | 51 | PostNotification 52 | com.chpwn.iphone.cydia.hooks-law.preferences-changed 53 | cell 54 | PSEditTextCell 55 | default 56 | 1 57 | defaults 58 | com.chpwn.iphone.cydia.hooks-law 59 | key 60 | Mass 61 | label 62 | Mass 63 | 64 | 65 | PostNotification 66 | com.chpwn.iphone.cydia.hooks-law.preferences-changed 67 | cell 68 | PSEditTextCell 69 | default 70 | 20 71 | defaults 72 | com.chpwn.iphone.cydia.hooks-law 73 | key 74 | Velocity 75 | label 76 | Velocity 77 | 78 | 79 | PostNotification 80 | com.chpwn.iphone.cydia.hooks-law.preferences-changed 81 | cell 82 | PSEditTextCell 83 | default 84 | 1.5 85 | defaults 86 | com.chpwn.iphone.cydia.hooks-law 87 | key 88 | TimeScale 89 | label 90 | Time Scale 91 | 92 | 93 | cell 94 | PSGroupCell 95 | footerText 96 | Copyright 2013 Xuzz Productions, LLC. 97 | 98 | 99 | title 100 | %hook's law 101 | 102 | 103 | -------------------------------------------------------------------------------- /hookslaw/layout/Library/PreferenceLoader/Preferences/hookslaw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grp/tweaks/e70b851136aa038198da9cda784e2a6f6b535624/hookslaw/layout/Library/PreferenceLoader/Preferences/hookslaw.png -------------------------------------------------------------------------------- /hookslaw/layout/Library/PreferenceLoader/Preferences/hookslaw@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grp/tweaks/e70b851136aa038198da9cda784e2a6f6b535624/hookslaw/layout/Library/PreferenceLoader/Preferences/hookslaw@2x.png -------------------------------------------------------------------------------- /iad-killer/Makefile: -------------------------------------------------------------------------------- 1 | TWEAK_NAME = iAdKiller 2 | iAdKiller_OBJCC_FILES = Tweak.mm 3 | 4 | include framework/makefiles/common.mk 5 | include framework/makefiles/tweak.mk 6 | -------------------------------------------------------------------------------- /iad-killer/README: -------------------------------------------------------------------------------- 1 | iAdKiller 2 | by chpwn 3 | 4 | Licensed under the WTFPL 2.0 -- a certified Free Software license! 5 | 6 | 7 | DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE 8 | Version 2, December 2004 9 | 10 | Copyright (C) 2004 Sam Hocevar 11 | 12 | Everyone is permitted to copy and distribute verbatim or modified 13 | copies of this license document, and changing it is allowed as long 14 | as the name is changed. 15 | 16 | DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE 17 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 18 | 19 | 0. You just DO WHAT THE FUCK YOU WANT TO. 20 | 21 | -------------------------------------------------------------------------------- /iad-killer/Tweak.xm: -------------------------------------------------------------------------------- 1 | // iAdKiller 2 | // by chpwn 3 | 4 | 5 | #include 6 | 7 | %hook ADManager 8 | 9 | + (id)alloc { 10 | return nil; 11 | } 12 | 13 | %end -------------------------------------------------------------------------------- /internalizer/Makefile: -------------------------------------------------------------------------------- 1 | include theos/makefiles/common.mk 2 | 3 | TWEAK_NAME = internalizer 4 | internalizer_FILES = Tweak.xm 5 | 6 | include $(THEOS_MAKE_PATH)/tweak.mk 7 | -------------------------------------------------------------------------------- /internalizer/Tweak.xm: -------------------------------------------------------------------------------- 1 | 2 | #define PreferencesChangedNotification "com.chpwn.internalizer.prefs" 3 | #define PreferencesFilePath [NSHomeDirectory() stringByAppendingPathComponent:@"Library/Preferences/com.chpwn.internalizer.plist"] 4 | 5 | static NSDictionary *preferences = nil; 6 | 7 | static void PreferencesChangedCallback(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo) { 8 | [preferences release]; 9 | preferences = [[NSDictionary alloc] initWithContentsOfFile:PreferencesFilePath]; 10 | } 11 | 12 | %hook SBLockdownManager 13 | - (BOOL) isInternalInstall { %log; return YES; } 14 | %end 15 | 16 | %hook SBPlatformController 17 | - (BOOL)allowSensitiveUI:(BOOL)ui hasInternalBundle:(BOOL)bundle { %log; return YES; } 18 | - (BOOL)isCarrierInstall:(BOOL)install hasInternalBundle:(BOOL)bundle { %log; return YES; } 19 | - (BOOL)isInternalInstall { %log; return YES; } 20 | - (BOOL)isCarrierInstall { %log; return YES; } 21 | %end 22 | 23 | %hook NSBundle 24 | 25 | - (NSString *)localizedStringForKey:(NSString *)key value:(NSString *)value table:(NSString *)tableName { 26 | // this is the order they are shown on the lockscreen 27 | if ([key isEqual:@"INTERNAL_INSTALL_LEGAL_DECLARATION"]) return [preferences objectForKey:@"InternalizerDeclaration"] ?: @"Change this"; 28 | if ([key isEqual:@"INTERNAL_INSTALL_LEGAL_INSTRUCTIONS"]) return [preferences objectForKey:@"InternalizerInstructions"] ?: @"text in the"; 29 | if ([key isEqual:@"INTERNAL_INSTALL_LEGAL_CONTACT"]) return [preferences objectForKey:@"InternalizerContact"] ?: @"Settings app"; 30 | 31 | return %orig; 32 | } 33 | 34 | %end 35 | 36 | __attribute__((constructor)) static void internalizer_init() { 37 | NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 38 | 39 | preferences = [[NSDictionary alloc] initWithContentsOfFile:PreferencesFilePath]; 40 | CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), NULL, PreferencesChangedCallback, CFSTR(PreferencesChangedNotification), NULL, CFNotificationSuspensionBehaviorCoalesce); 41 | 42 | [pool release]; 43 | } 44 | 45 | -------------------------------------------------------------------------------- /internalizer/layout/DEBIAN/control: -------------------------------------------------------------------------------- 1 | Author: chpwn 2 | Maintainer: BigBoss 3 | Name: Internalizer 4 | Package: com.chpwn.internalizer 5 | Section: Tweaks 6 | Depends: mobilesubstrate, preferenceloader, firmware (>= 4.2.1) 7 | Version: 1.0.0.0 8 | Architecture: iphoneos-arm 9 | Description: AppleInternal-style lockscreen warnings. 10 | Depiction: http://moreinfo.thebigboss.org/moreinfo/depiction.php?file=internalizerData 11 | Homepage: http://moreinfo.thebigboss.org/moreinfo/depiction.php?file=internalizerData 12 | Sponsor: thebigboss.org 13 | Tag: purpose::extension 14 | dev: chpwn 15 | -------------------------------------------------------------------------------- /internalizer/layout/Library/MobileSubstrate/DynamicLibraries/internalizer.plist: -------------------------------------------------------------------------------- 1 | { Filter = { Bundles = ( "com.apple.springboard" ); }; } 2 | -------------------------------------------------------------------------------- /internalizer/layout/Library/PreferenceLoader/Preferences/internalizer.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | entry 6 | 7 | cell 8 | PSLinkCell 9 | icon 10 | internalizer.png 11 | label 12 | Internalizer 13 | 14 | items 15 | 16 | 17 | cell 18 | PSGroupCell 19 | label 20 | Internalizer 21 | 22 | 23 | PostNotification 24 | com.chpwn.internalizer.prefs 25 | cell 26 | PSEditTextCell 27 | default 28 | 29 | defaults 30 | com.chpwn.internalizer 31 | key 32 | InternalizerDeclaration 33 | label 34 | Declaration 35 | 36 | 37 | PostNotification 38 | com.chpwn.internalizer.prefs 39 | cell 40 | PSEditTextCell 41 | default 42 | 43 | defaults 44 | com.chpwn.internalizer 45 | key 46 | InternalizerInstructions 47 | label 48 | Instructions 49 | 50 | 51 | PostNotification 52 | com.chpwn.internalizer.prefs 53 | cell 54 | PSEditTextCell 55 | default 56 | 57 | defaults 58 | com.chpwn.internalizer 59 | key 60 | InternalizerContact 61 | label 62 | Contact 63 | 64 | 65 | cell 66 | PSGroupCell 67 | footerText 68 | by chpwn 69 | 70 | 71 | title 72 | Internalizer 73 | 74 | 75 | -------------------------------------------------------------------------------- /internalizer/layout/Library/PreferenceLoader/Preferences/internalizer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grp/tweaks/e70b851136aa038198da9cda784e2a6f6b535624/internalizer/layout/Library/PreferenceLoader/Preferences/internalizer.png -------------------------------------------------------------------------------- /internalizer/layout/Library/PreferenceLoader/Preferences/internalizer@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grp/tweaks/e70b851136aa038198da9cda784e2a6f6b535624/internalizer/layout/Library/PreferenceLoader/Preferences/internalizer@2x.png -------------------------------------------------------------------------------- /listlauncher/.gitignore: -------------------------------------------------------------------------------- 1 | .theos 2 | *.deb 3 | -------------------------------------------------------------------------------- /listlauncher/.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "theos"] 2 | path = theos 3 | url = git://github.com/rpetrich/theos.git 4 | -------------------------------------------------------------------------------- /listlauncher/ListLauncher.plist: -------------------------------------------------------------------------------- 1 | { Filter = { Bundles = ( "com.apple.springboard" ); }; } 2 | -------------------------------------------------------------------------------- /listlauncher/Makefile: -------------------------------------------------------------------------------- 1 | 2 | export GO_EASY_ON_ME=1 3 | 4 | TWEAK_NAME = ListLauncher 5 | ListLauncher_FILES = Tweak.xm 6 | ListLauncher_FRAMEWORKS = UIKit 7 | 8 | include theos/makefiles/common.mk 9 | include $(THEOS_MAKE_PATH)/tweak.mk 10 | -------------------------------------------------------------------------------- /listlauncher/Tweak.xm: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | static id apps = nil; 4 | static UITableView *table = nil; 5 | static CGFloat sectionHeaderWidth; 6 | static CGFloat searchRowHeight; 7 | 8 | static inline BOOL is_wildcat() { return (BOOL)(int)[[UIDevice currentDevice] isWildcat]; } 9 | 10 | %hook UITableView 11 | - (void)setAlpha:(float)alpha { if (self != table) %orig; } 12 | %end 13 | 14 | %hook SBSearchView 15 | - (id)initWithFrame:(CGRect)frame withContent:(id)content onWallpaper:(id)wallpaper { 16 | if ((self = %orig)) { 17 | table = [self tableView]; 18 | BOOL isWildcat = is_wildcat(); 19 | sectionHeaderWidth = isWildcat ? 68.0f : 39.0f; 20 | searchRowHeight = isWildcat ? 72.0f : 44.0f; 21 | table.rowHeight = searchRowHeight; 22 | } 23 | return self; 24 | } 25 | %end 26 | 27 | %hook SBApplicationController 28 | - (void)loadApplications { 29 | %orig; 30 | 31 | [apps release]; 32 | apps = [[NSMutableArray alloc] init]; 33 | id x = [NSMutableArray array]; 34 | id collation = [UILocalizedIndexedCollation currentCollation]; 35 | for (int i = 0; i < [[collation sectionTitles] count]; i++) [x addObject:[NSMutableArray array]]; 36 | for (id app in [self allApplications]) { 37 | if (![[app tags] containsObject:@"hidden"]) { 38 | int idx = [collation sectionForObject:app collationStringSelector:@selector(displayName)]; 39 | [[x objectAtIndex:idx] addObject:app]; 40 | } 41 | } 42 | for (id s in x) [apps addObjectsFromArray:[collation sortedArrayFromArray:s collationStringSelector:@selector(displayName)]]; 43 | } 44 | %end 45 | 46 | %hook SBSearchController 47 | %new(c@:) 48 | - (BOOL)shouldGTFO { return ![[[[self searchView] searchBar] text] isEqualToString:@""]; } 49 | - (BOOL)_hasSearchResults { return YES; } 50 | - (BOOL)respondsToSelector:(SEL)selector { return selector == @selector(tableView:heightForRowAtIndexPath:) ? NO : %orig; } 51 | - (float)tableView:(id)tv heightForRowAtIndexPath:(id)ip { return searchRowHeight; } 52 | %new(i@:@i) 53 | - (int)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index { 54 | int idx = [[UILocalizedIndexedCollation currentCollation] sectionForSectionIndexTitleAtIndex:index]; 55 | for (int i = 0; i < [apps count]; i++) { 56 | if (idx <= [[UILocalizedIndexedCollation currentCollation] sectionForObject:[apps objectAtIndex:i] collationStringSelector:@selector(displayName)]) return i; 57 | } 58 | return -1; 59 | } 60 | %new(@@:@) 61 | - (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView { 62 | if ([self shouldGTFO]) { 63 | return nil; 64 | } else { 65 | id titles = [[UILocalizedIndexedCollation currentCollation] sectionIndexTitles]; 66 | //titles = [titles subarrayWithRange:NSMakeRange(0, [titles count] - 1)]; 67 | return titles; 68 | } 69 | } 70 | - (id)tableView:(id)tv cellForRowAtIndexPath:(id)ip { 71 | if ([self shouldGTFO]) return %orig; 72 | 73 | int s = [ip section]; 74 | 75 | id cell = [tv dequeueReusableCellWithIdentifier:@"dude"]; 76 | if (cell) { 77 | [cell clearContents]; 78 | } else { 79 | cell = [[[objc_getClass("SBSearchTableViewCell") alloc] initWithStyle:(UITableViewCellStyle)0 reuseIdentifier:@"dude"] autorelease]; 80 | MSHookIvar(cell, "_sectionHeaderWidth") = sectionHeaderWidth; 81 | [cell setEdgeInset:0]; 82 | } 83 | 84 | [cell setBadged:NO]; 85 | [cell setBelowTopHit:YES]; 86 | [cell setUsesAlternateBackgroundColor:NO]; 87 | if ([ip section] == 0) [cell setFirstInTableView:YES]; 88 | else [cell setFirstInTableView:NO]; 89 | 90 | [cell setTitle:[[apps objectAtIndex:s] displayName]]; 91 | //[cell setAuxiliaryTitle:]; 92 | //[cell setSubtitle:]; 93 | [cell setFirstInSection:YES]; 94 | 95 | [[[self searchView] tableView] setScrollEnabled:YES]; 96 | [cell setNeedsDisplay]; 97 | 98 | return cell; 99 | } 100 | - (void)tableView:(id)tv didSelectRowAtIndexPath:(id)ip { 101 | if ([self shouldGTFO]) { %orig; return; } 102 | 103 | id a = [apps objectAtIndex:[ip section]]; 104 | [[objc_getClass("SBUIController") sharedInstance] activateApplicationAnimated:a]; 105 | [tv deselectRowAtIndexPath:ip animated:YES]; 106 | } 107 | - (int)tableView:(id)tv numberOfRowsInSection:(int)s { 108 | if ([self shouldGTFO]) return %orig; 109 | else return 1; 110 | } 111 | - (int)numberOfSectionsInTableView:(id)tv { 112 | if ([self shouldGTFO]) return %orig; 113 | 114 | return [apps count]; 115 | } 116 | - (id)tableView:(id)tv viewForHeaderInSection:(int)s { 117 | if ([self shouldGTFO]) return %orig; 118 | 119 | id v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, sectionHeaderWidth, searchRowHeight)]; 120 | id m = [[[objc_getClass("SBIconModel") sharedInstance] applicationIconForDisplayIdentifier:[[apps objectAtIndex:s] displayIdentifier]] getIconImage:is_wildcat()]; 121 | id i = [[UIImageView alloc] initWithImage:m]; 122 | CGRect r = [i frame]; 123 | r.size = [m size]; 124 | CGSize size = [v frame].size; 125 | r.origin.y = (size.height - r.size.height) * 0.5f; 126 | r.origin.x = (size.width - r.size.width) * 0.5f; 127 | [i setFrame:r]; 128 | [v addSubview:i]; 129 | [i release]; 130 | [v setOpaque:0]; 131 | [v setUserInteractionEnabled:NO]; 132 | 133 | return [v autorelease]; 134 | } 135 | %end 136 | 137 | 138 | -------------------------------------------------------------------------------- /listlauncher/control: -------------------------------------------------------------------------------- 1 | Author: chpwn 2 | Maintainer: BigBoss 3 | Name: ListLauncher 4 | Package: com.chpwn.listlauncher 5 | Section: Tweaks 6 | Pre-Depends: firmware (>= 4.0) 7 | Depends: mobilesubstrate 8 | Version: 1.2 9 | Architecture: iphoneos-arm 10 | Description: Scrolling list of all your apps for quick access! 11 | Depiction: http://chpwn.com/cydia/listlauncher.html 12 | Homepage: http://chpwn.com/cydia/listlauncher.html 13 | Sponsor: thebigboss.org 14 | Tag: cydia::commercial, purpose::extension 15 | dev: chpwn 16 | -------------------------------------------------------------------------------- /no-badges/Makefile: -------------------------------------------------------------------------------- 1 | include theos/makefiles/common.mk 2 | 3 | TWEAK_NAME = nobadges 4 | nobadges_FILES = Tweak.xm 5 | nobadges_FRAMEWORKS = UIKit 6 | 7 | include $(THEOS_MAKE_PATH)/tweak.mk 8 | -------------------------------------------------------------------------------- /no-badges/Tweak.xm: -------------------------------------------------------------------------------- 1 | 2 | #import 3 | 4 | // iOS 4 5 | %hook SBIconBadge 6 | - (id)initWithBadgeString:(id)string { return nil; } 7 | - (id)initWithFrame:(CGRect)frame { return nil; } 8 | %end 9 | 10 | // iOS 5 11 | %hook SBIcon 12 | - (id)badgeNumberOrString { return nil; } 13 | %end 14 | 15 | -------------------------------------------------------------------------------- /no-badges/control: -------------------------------------------------------------------------------- 1 | Author: chpwn 2 | Maintainer: BigBoss 3 | Name: No Badges 4 | Package: com.chpwn.no-badge 5 | Section: Tweaks 6 | Pre-Depends: firmware (>= 3.0) 7 | Depends: mobilesubstrate 8 | Version: 1.0.3 9 | Architecture: iphoneos-arm 10 | Description: No badges. Ever. 11 | Depiction: http://moreinfo.thebigboss.org/moreinfo/depiction.php?file=nobadgesData 12 | Homepage: http://moreinfo.thebigboss.org/moreinfo/depiction.php?file=nobadgesData 13 | Sponsor: thebigboss.org 14 | Tag: purpose::extension 15 | dev: chpwn 16 | -------------------------------------------------------------------------------- /no-badges/nobadges.plist: -------------------------------------------------------------------------------- 1 | { Filter = { Bundles = ( "com.apple.springboard" ); }; } 2 | -------------------------------------------------------------------------------- /no-bookmarks/Makefile: -------------------------------------------------------------------------------- 1 | TWEAK_NAME = no-bookmarks 2 | no-bookmarks_OBJCC_FILES = Tweak.mm 3 | no-bookmarks_FRAMEWORKS = UIKit QuartzCore CoreGraphics 4 | 5 | include framework/makefiles/common.mk 6 | include framework/makefiles/tweak.mk 7 | -------------------------------------------------------------------------------- /no-bookmarks/Tweak.xm: -------------------------------------------------------------------------------- 1 | 2 | #import 3 | 4 | static BOOL disableBookmarksFlag = 0; 5 | 6 | %hook BrowserController 7 | - (void)setupWithURL:(id)url { 8 | disableBookmarksFlag = YES; 9 | %orig; 10 | disableBookmarksFlag = NO; 11 | } 12 | - (void)toggleBookmarksFromButtonBar { 13 | if (!disableBookmarksFlag) %orig; 14 | } 15 | %end 16 | 17 | -------------------------------------------------------------------------------- /no-bookmarks/layout/DEBIAN/control: -------------------------------------------------------------------------------- 1 | Package: com.chpwn.no-bookmarks 2 | Name: no-bookmarks 3 | Depends: mobilesubstrate 4 | Version: 0.1 5 | Architecture: iphoneos-arm 6 | Description: 7 | Maintainer: Xuzz 8 | Author: Xuzz 9 | Section: Tweaks 10 | -------------------------------------------------------------------------------- /no-bookmarks/layout/Library/MobileSubstrate/no-bookmarks.plist: -------------------------------------------------------------------------------- 1 | Filter = { 2 | Bundles = (com.apple.mobilesafari); 3 | }; 4 | -------------------------------------------------------------------------------- /no-dots/Makefile: -------------------------------------------------------------------------------- 1 | include theos/makefiles/common.mk 2 | 3 | TWEAK_NAME = nodots 4 | nodots_FILES = Tweak.xm 5 | 6 | include $(THEOS_MAKE_PATH)/tweak.mk 7 | -------------------------------------------------------------------------------- /no-dots/Tweak.xm: -------------------------------------------------------------------------------- 1 | 2 | %hook SBIconListPageControl 3 | - (id)initWithFrame:(CGRect)frame { [%orig release]; return nil; } 4 | %end 5 | 6 | 7 | -------------------------------------------------------------------------------- /no-dots/control: -------------------------------------------------------------------------------- 1 | Package: com.chpwn.nodots 2 | Name: No Dots 3 | Depends: mobilesubstrate 4 | Version: 1.0 5 | Architecture: iphoneos-arm 6 | Description: No page dots! 7 | Maintainer: chpwn 8 | Author: chpwn 9 | Section: Tweaks 10 | -------------------------------------------------------------------------------- /no-dots/nodots.plist: -------------------------------------------------------------------------------- 1 | { Filter = { Bundles = ( "com.apple.springboard" ); }; } 2 | -------------------------------------------------------------------------------- /no-folder-badges/Makefile: -------------------------------------------------------------------------------- 1 | TWEAK_NAME = no-folder-badge 2 | no-folder-badge_OBJCC_FILES = Tweak.mm 3 | no-folder-badge_FRAMEWORKS = UIKit QuartzCore CoreGraphics 4 | 5 | include framework/makefiles/common.mk 6 | include framework/makefiles/tweak.mk 7 | -------------------------------------------------------------------------------- /no-folder-badges/Tweak.xm: -------------------------------------------------------------------------------- 1 | 2 | #import 3 | #import 4 | 5 | %hook SBFolderIcon 6 | - (void)setBadge:(id)badge { } 7 | %end 8 | 9 | -------------------------------------------------------------------------------- /no-folder-badges/layout/DEBIAN/control: -------------------------------------------------------------------------------- 1 | Package: com.chpwn.no-folder-badge 2 | Name: no-folder-badge 3 | Depends: mobilesubstrate 4 | Version: 0.1 5 | Architecture: iphoneos-arm 6 | Description: 7 | Maintainer: Xuzz 8 | Author: Xuzz 9 | Section: Tweaks 10 | -------------------------------------------------------------------------------- /splitresizer/Makefile: -------------------------------------------------------------------------------- 1 | include theos/makefiles/common.mk 2 | 3 | TWEAK_NAME = SplitResizer 4 | SplitResizer_FILES = Tweak.xm 5 | SplitResizer_FRAMEWORKS = UIKit 6 | 7 | include $(THEOS_MAKE_PATH)/tweak.mk 8 | -------------------------------------------------------------------------------- /splitresizer/SplitResizer.plist: -------------------------------------------------------------------------------- 1 | { Filter = { Bundles = ( "com.apple.UIKit" ); }; } 2 | -------------------------------------------------------------------------------- /splitresizer/Tweak.xm: -------------------------------------------------------------------------------- 1 | 2 | #import 3 | 4 | @interface UISplitViewController (Private) 5 | 6 | - (UIViewController *)masterViewController; 7 | - (UIViewController *)detailViewController; 8 | - (CGRect)_detailViewFrame; 9 | - (CGRect)_masterViewFrame; 10 | 11 | - (void)viewWillLayoutSubviews; 12 | 13 | @end 14 | 15 | @interface UINavigationController (Private) 16 | 17 | - (void)_layoutTopViewController; 18 | 19 | @end 20 | 21 | #define kHandleWidth 16.0f 22 | 23 | %hook UISplitViewController 24 | 25 | - (void)setGutterWidth:(CGFloat)width { 26 | %log; 27 | %orig(kHandleWidth); 28 | } 29 | 30 | %new(v@:@) 31 | - (void)panFromRecognizer:(UIPanGestureRecognizer *)recognizer { 32 | %log; 33 | 34 | if ([recognizer state] == UIGestureRecognizerStateBegan || [recognizer state] == UIGestureRecognizerStateChanged) { 35 | CGPoint location = [recognizer locationInView:self.view]; 36 | CGFloat offset = location.x - (kHandleWidth / 2); 37 | 38 | NSLog(@"Resizing view to offset: %f", offset); 39 | [self setMasterColumnWidth:offset]; 40 | if ([[self masterViewController] isKindOfClass:[UINavigationController class]]) 41 | [(UINavigationController *) [self masterViewController] _layoutTopViewController]; 42 | if ([[self detailViewController] isKindOfClass:[UINavigationController class]]) 43 | [(UINavigationController *) [self detailViewController] _layoutTopViewController]; 44 | [recognizer.view setFrame:CGRectMake(offset, 0, kHandleWidth, [self.view bounds].size.height)]; 45 | } 46 | } 47 | 48 | - (void)_commonInit { 49 | %orig; 50 | 51 | [self setGutterWidth:kHandleWidth]; 52 | 53 | UIView *dragView = [[UIView alloc] initWithFrame:CGRectMake([self masterColumnWidth], 0, kHandleWidth, [self.view bounds].size.height)]; 54 | [dragView setAutoresizingMask:UIViewAutoresizingFlexibleHeight]; 55 | [self.view addSubview:dragView]; 56 | [dragView release]; 57 | 58 | UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panFromRecognizer:)]; 59 | [dragView addGestureRecognizer:panRecognizer]; 60 | [panRecognizer release]; 61 | } 62 | 63 | %end 64 | 65 | 66 | -------------------------------------------------------------------------------- /splitresizer/control: -------------------------------------------------------------------------------- 1 | Package: com.chpwn.splitresizer 2 | Name: SplitResizer 3 | Depends: mobilesubstrate 4 | Version: 0.0.1 5 | Architecture: iphoneos-arm 6 | Description: An awesome MobileSubstrate tweak! 7 | Maintainer: Grant Paul 8 | Author: Grant Paul 9 | Section: Tweaks 10 | -------------------------------------------------------------------------------- /switcherscape/Makefile: -------------------------------------------------------------------------------- 1 | include theos/makefiles/common.mk 2 | 3 | TWEAK_NAME = Switcherscape 4 | Switcherscape_FILES = Tweak.xm 5 | Switcherscape_FRAMEWORKS = UIKit 6 | 7 | include $(THEOS_MAKE_PATH)/tweak.mk 8 | -------------------------------------------------------------------------------- /switcherscape/Switcherscape.plist: -------------------------------------------------------------------------------- 1 | { Filter = { Bundles = ( "com.apple.UIKit" ); }; } 2 | -------------------------------------------------------------------------------- /switcherscape/Tweak.xm: -------------------------------------------------------------------------------- 1 | 2 | #import 3 | #import 4 | 5 | %hook SBUIController 6 | 7 | - (BOOL)_revealSwitcher:(double)duration appOrientation:(UIInterfaceOrientation)appOrientation switcherOrientation:(UIInterfaceOrientation)switcherOrientation { 8 | return %orig(duration, appOrientation, appOrientation); 9 | } 10 | 11 | %end 12 | 13 | @interface SBLinenView : UIView {} 14 | @end 15 | 16 | %hook SBAppSwitcherBarView 17 | 18 | - (id)initWithFrame:(CGRect)frame { 19 | self = %orig; 20 | 21 | // this stupidiy is necessary because Apple limits SBLinenView to 320px wide on iPhone 22 | 23 | SBLinenView *linen = nil; 24 | 25 | linen = [[objc_getClass("SBLinenView") alloc] initWithFrame:CGRectMake(0, 0, 320.0f, [self bounds].size.height)]; 26 | [linen setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin]; 27 | [self addSubview:linen]; 28 | [self sendSubviewToBack:linen]; 29 | [linen release]; 30 | 31 | linen = [[objc_getClass("SBLinenView") alloc] initWithFrame:CGRectMake(0, 0, 320.0f, [self bounds].size.height)]; 32 | [linen setAutoresizingMask:UIViewAutoresizingFlexibleRightMargin]; 33 | [self addSubview:linen]; 34 | [self sendSubviewToBack:linen]; 35 | [linen release]; 36 | 37 | return self; 38 | } 39 | 40 | %end 41 | 42 | 43 | -------------------------------------------------------------------------------- /switcherscape/control: -------------------------------------------------------------------------------- 1 | Author: chpwn 2 | Maintainer: BigBoss 3 | Name: Switcherscape 4 | Package: com.chpwn.switcherscape 5 | Section: Tweaks 6 | Depends: mobilesubstrate, firmware (>= 4.2.1) 7 | Conflicts: gsc.ipad 8 | Version: 1.0 9 | Architecture: iphoneos-arm 10 | Description: Landscape app switcher, but free. 11 | Depiction: http://moreinfo.thebigboss.org/moreinfo/depiction.php?file=switcherscapeData 12 | Homepage: http://moreinfo.thebigboss.org/moreinfo/depiction.php?file=switcherscapeData 13 | Sponsor: thebigboss.org 14 | Tag: purpose::extension 15 | dev: chpwn 16 | -------------------------------------------------------------------------------- /tvdown/Makefile: -------------------------------------------------------------------------------- 1 | include theos/makefiles/common.mk 2 | 3 | export GO_EASY_ON_ME=1 4 | 5 | TWEAK_NAME = tvdown 6 | tvdown_FILES = Tweak.xm 7 | tvdown_FRAMEWORKS = UIKit 8 | 9 | include $(THEOS_MAKE_PATH)/tweak.mk 10 | -------------------------------------------------------------------------------- /tvdown/Tweak.xm: -------------------------------------------------------------------------------- 1 | 2 | #import 3 | #import 4 | #import 5 | 6 | static BOOL really = NO; 7 | static BOOL glock; 8 | static BOOL gsound; 9 | 10 | static UIWindow *back; 11 | static UIView *white, *top, *bottom; 12 | 13 | static void really_lock(BOOL lock, BOOL sound) { 14 | really = YES; 15 | [[objc_getClass("SBUIController") sharedInstance] lock:lock disableLockSound:sound]; 16 | really = NO; 17 | } 18 | 19 | %hook SBUIController 20 | %new(v@:) 21 | - (void)secondPartDone { 22 | really_lock(glock, gsound); 23 | 24 | [back setHidden:YES]; 25 | [back release]; 26 | back = top = white = bottom = nil; 27 | } 28 | %new(v@:) 29 | - (void)firstPartDone { 30 | [back setBackgroundColor:[UIColor blackColor]]; 31 | 32 | [UIView beginAnimations:nil context:NULL]; 33 | [UIView setAnimationDuration:0.1f]; 34 | [UIView setAnimationDelegate:self]; 35 | [UIView setAnimationDidStopSelector:@selector(secondPartDone)]; 36 | 37 | [white setFrame:CGRectMake([back bounds].size.width / 2, 0.0f, 0.0f, [back bounds].size.height)]; 38 | 39 | [UIView commitAnimations]; 40 | } 41 | - (void)lock:(BOOL)lock disableLockSound:(BOOL)sound { 42 | if (really) { 43 | %orig; 44 | } else { 45 | glock = lock; 46 | gsound = sound; 47 | 48 | back = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 49 | [back setWindowLevel:UIWindowLevelStatusBar + 9001.0f]; 50 | [back makeKeyAndVisible]; 51 | 52 | white = [[UIView alloc] initWithFrame:[back bounds]]; 53 | [white setBackgroundColor:[UIColor whiteColor]]; 54 | [white setAlpha:0.0f]; 55 | [back addSubview:white]; 56 | [white release]; 57 | 58 | top = [[UIView alloc] initWithFrame:CGRectMake(0.0f, -[back bounds].size.height, [back bounds].size.width, [back bounds].size.height)]; 59 | bottom = [[UIView alloc] initWithFrame:CGRectMake(0.0f, [back bounds].size.height, [back bounds].size.width, [back bounds].size.height)]; 60 | [top setBackgroundColor:[UIColor blackColor]]; 61 | [bottom setBackgroundColor:[UIColor blackColor]]; 62 | [back addSubview:top]; 63 | [back addSubview:bottom]; 64 | [top release]; 65 | [bottom release]; 66 | 67 | [UIView beginAnimations:nil context:NULL]; 68 | [UIView setAnimationDuration:0.25f]; 69 | [UIView setAnimationDelegate:self]; 70 | [UIView setAnimationDidStopSelector:@selector(firstPartDone)]; 71 | 72 | [top setFrame:CGRectMake(0.0f, -([back bounds].size.height / 2) - 2.0f, [back bounds].size.width, [back bounds].size.height)]; 73 | [bottom setFrame:CGRectMake(0.0f, [back bounds].size.height / 2 + 2.0f, [back bounds].size.width, [back bounds].size.height)]; 74 | [white setAlpha:1.0f]; 75 | 76 | [UIView commitAnimations]; 77 | } 78 | } 79 | %end 80 | 81 | -------------------------------------------------------------------------------- /tvdown/control: -------------------------------------------------------------------------------- 1 | Package: com.chpwn.tvdown 2 | Name: tvdown 3 | Depends: mobilesubstrate 4 | Version: 1.0 5 | Architecture: iphoneos-arm 6 | Description: Shut down like a TV! (And Android 2.3.) 7 | Maintainer: chpwn 8 | Author: chpwn 9 | -------------------------------------------------------------------------------- /tvdown/tvdown.plist: -------------------------------------------------------------------------------- 1 | { Filter = { Bundles = ( "com.apple.springboard" ); }; } 2 | -------------------------------------------------------------------------------- /twizzler/Makefile: -------------------------------------------------------------------------------- 1 | include theos/makefiles/common.mk 2 | 3 | TWEAK_NAME = Twizzler 4 | Twizzler_FILES = Tweak.xm 5 | 6 | include $(THEOS_MAKE_PATH)/tweak.mk 7 | -------------------------------------------------------------------------------- /twizzler/Tweak.xm: -------------------------------------------------------------------------------- 1 | 2 | #import 3 | 4 | %hook ABUITableViewDisruptorController 5 | - (id)initWithTableView:(id)tv { return nil; } 6 | %end 7 | 8 | %hook TweetieStatusListViewController 9 | - (void)addDisruptorInset { } 10 | - (BOOL)shouldShowDisruptor { return NO; } 11 | %end 12 | 13 | -------------------------------------------------------------------------------- /twizzler/Twizzler.plist: -------------------------------------------------------------------------------- 1 | { Filter = { Bundles = ( "com.atebits.Tweetie2" ); }; } 2 | -------------------------------------------------------------------------------- /twizzler/control: -------------------------------------------------------------------------------- 1 | Author: chpwn 2 | Maintainer: BigBoss 3 | Name: Twizzler 4 | Package: com.chpwn.twizzler 5 | Section: Tweaks 6 | Depends: mobilesubstrate 7 | Version: 1.0.4 8 | Architecture: iphoneos-arm 9 | Description: Remove #dickbar from Twitter 3.3. 10 | Depiction: http://moreinfo.thebigboss.org/moreinfo/depiction.php?file=twizzlerData 11 | Homepage: http://moreinfo.thebigboss.org/moreinfo/depiction.php?file=twizzlerData 12 | Sponsor: thebigboss.org 13 | Tag: purpose::extension 14 | dev: chpwn 15 | -------------------------------------------------------------------------------- /webscrollian/Makefile: -------------------------------------------------------------------------------- 1 | include theos/makefiles/common.mk 2 | 3 | TWEAK_NAME = Webscrollian 4 | Webscrollian_FILES = Tweak.xm 5 | Webscrollian_FRAMEWORKS = UIKit 6 | 7 | include $(THEOS_MAKE_PATH)/tweak.mk 8 | -------------------------------------------------------------------------------- /webscrollian/Tweak.xm: -------------------------------------------------------------------------------- 1 | 2 | #import 3 | #import 4 | 5 | %hook UIWebBrowserView 6 | 7 | + (CGFloat)preferredScrollDecelerationFactor { 8 | return 0.998; 9 | } 10 | 11 | %end 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /webscrollian/Webscrollian.plist: -------------------------------------------------------------------------------- 1 | { Filter = { Bundles = ( "com.apple.UIKit" ); }; } 2 | -------------------------------------------------------------------------------- /webscrollian/control: -------------------------------------------------------------------------------- 1 | Author: chpwn 2 | Maintainer: BigBoss 3 | Name: Webscrollian 4 | Package: com.chpwn.webscrollian 5 | Section: Tweaks 6 | Depends: mobilesubstrate 7 | Version: 1.0.0 8 | Architecture: iphoneos-arm 9 | Description: Faster scrolling for web content. 10 | Depiction: http://moreinfo.thebigboss.org/moreinfo/depiction.php?file=webscrollianData 11 | Homepage: http://moreinfo.thebigboss.org/moreinfo/depiction.php?file=webscrollianData 12 | Sponsor: thebigboss.org 13 | Tag: purpose::extension 14 | dev: chpwn 15 | --------------------------------------------------------------------------------