]> git.saurik.com Git - cydia.git/blobdiff - MobileCydia.mm
I cannot express how angry this mechanism makes me.
[cydia.git] / MobileCydia.mm
index b73ed67f2b3871ad12c703d338734f69dd22e706..999a708fcc28c74fbdf0f1e2e45c009ce8c97aa8 100644 (file)
@@ -4194,9 +4194,11 @@ static NSString *Warning_;
 } }
 
 - (Package *) getPackageById:(NSString *)id {
-    Package *package([[Database sharedInstance] packageWithName:id]);
-    [package parse];
-    return package;
+    if (Package *package = [[Database sharedInstance] packageWithName:id]) {
+        [package parse];
+        return package;
+    } else
+        return (Package *) [NSNull null];
 }
 
 - (NSArray *) statfs:(NSString *)path {
@@ -8979,11 +8981,33 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
     }
 }
 
-- (void) presentModalViewController:(UIViewController *)controller {
+- (void) disemulate {
+    if (emulated_ == nil)
+        return;
+
+    [window_ addSubview:[tabbar_ view]];
+    [[emulated_ view] removeFromSuperview];
+    [emulated_ release];
+    emulated_ = nil;
+    [window_ setUserInteractionEnabled:YES];
+}
+
+- (void) presentModalViewController:(UIViewController *)controller force:(BOOL)force {
     UINavigationController *navigation([[[CYNavigationController alloc] initWithRootViewController:controller] autorelease]);
     if (IsWildcat_)
         [navigation setModalPresentationStyle:UIModalPresentationFormSheet];
-    [((UIViewController *) emulated_ ?: tabbar_) presentModalViewController:navigation animated:YES];
+
+    UIViewController *parent;
+    if (emulated_ == nil)
+        parent = tabbar_;
+    else if (!force)
+        parent = emulated_;
+    else {
+        [self disemulate];
+        parent = tabbar_;
+    }
+
+    [parent presentModalViewController:navigation animated:YES];
 }
 
 - (ProgressController *) invokeNewProgress:(NSInvocation *)invocation forController:(UINavigationController *)navigation withTitle:(NSString *)title {
@@ -8992,7 +9016,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
     if (navigation != nil)
         [navigation pushViewController:progress animated:YES];
     else
-        [self presentModalViewController:progress];
+        [self presentModalViewController:progress force:YES];
 
     [progress invoke:invocation withTitle:title];
     return progress;
@@ -9586,7 +9610,7 @@ _trace();
 _trace();
     if (Role_ == nil) {
         [window_ setUserInteractionEnabled:YES];
-        [self presentModalViewController:[[[SettingsController alloc] initWithDatabase:database_ delegate:self] autorelease]];
+        [self presentModalViewController:[[[SettingsController alloc] initWithDatabase:database_ delegate:self] autorelease] force:NO];
         return;
     } else {
         if ([emulated_ modalViewController] != nil)
@@ -9597,13 +9621,7 @@ _trace();
     [self reloadData];
     PrintTimes();
 
-    [window_ addSubview:[tabbar_ view]];
-
-    [[emulated_ view] removeFromSuperview];
-    [emulated_ release];
-    emulated_ = nil;
-
-    [window_ setUserInteractionEnabled:YES];
+    [self disemulate];
 
     int selectedIndex = 0;
     NSMutableArray *items = nil;