-/* xscreensaver, Copyright (c) 2012 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 2012-2013 Jamie Zawinski <jwz@jwz.org>
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
#import "SaverListController.h"
#import "SaverRunner.h"
+#import "yarandom.h"
#import "version.h"
#undef countof
{
// Extract the version number and release date from the version string.
// Here's an area where I kind of wish I had "Two Problems".
+ // I guess I could add custom key to the Info.plist for this.
NSArray *a = [[NSString stringWithCString: screensaver_id
encoding:NSASCIIStringEncoding]
SaverRunner *s =
(SaverRunner *) [[UIApplication sharedApplication] delegate];
if (! s) return;
- if (! [s isKindOfClass:[SaverRunner class]])
- abort();
+ NSAssert ([s isKindOfClass:[SaverRunner class]], @"not a SaverRunner");
[s loadSaver: cell.textLabel.text];
}
SaverRunner *s =
(SaverRunner *) [[UIApplication sharedApplication] delegate];
if (! s) return;
- if (! [s isKindOfClass:[SaverRunner class]])
- abort();
+ NSAssert ([s isKindOfClass:[SaverRunner class]], @"not a SaverRunner");
[s openPreferences: cell.textLabel.text];
}
}
+/* We need this to respond to "shake" gestures
+ */
+- (BOOL)canBecomeFirstResponder
+{
+ return YES;
+}
+
+- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event
+{
+}
+
+- (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event
+{
+}
+
+
+/* Shake means load a random screen saver.
+ */
+- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
+{
+ if (motion != UIEventSubtypeMotionShake)
+ return;
+ NSMutableArray *a = [NSMutableArray arrayWithCapacity: 200];
+ for (NSArray *sec in letter_sections)
+ for (NSString *s in sec)
+ [a addObject: s];
+ int n = [a count];
+ if (! n) return;
+ NSString *which = [a objectAtIndex: (random() % n)];
+
+ SaverRunner *s =
+ (SaverRunner *) [[UIApplication sharedApplication] delegate];
+ if (! s) return;
+ NSAssert ([s isKindOfClass:[SaverRunner class]], @"not a SaverRunner");
+ [self scrollTo: which];
+ [s loadSaver: which];
+}
+
+
- (void)dealloc
{
for (int i = 0; i < countof(list_by_letter); i++)