From fde9eca114342055d326b5fdce0823aed7e68b5d Mon Sep 17 00:00:00 2001 From: "Jay Freeman (saurik)" Date: Tue, 29 Mar 2011 08:10:54 +0000 Subject: [PATCH] Reorganize state machine (again). --- LockScreen.mm | 5 ----- Tweak.mm | 39 +++++++++++++++++++++++++++++---------- 2 files changed, 29 insertions(+), 15 deletions(-) diff --git a/LockScreen.mm b/LockScreen.mm index f82f7e7..3d1f461 100644 --- a/LockScreen.mm +++ b/LockScreen.mm @@ -113,7 +113,6 @@ while (false) static Class $CydgetController(objc_getClass("CydgetController")); MSClassHook(UIWebBrowserView) -MSClassHook(SBAwayView) static bool Wildcat_, iOS4; @@ -239,10 +238,6 @@ static float CYScrollViewDecelerationRateNormal; @end -MSInstanceMessageHook0(UIView *, SBAwayView, inputView) { - return [[[UIView alloc] init] autorelease]; -} - @interface WebCydgetLockScreenView : UIView { CydgetWebView *webview_; UIScrollView *scroller_; diff --git a/Tweak.mm b/Tweak.mm index be0da28..361223f 100644 --- a/Tweak.mm +++ b/Tweak.mm @@ -47,8 +47,10 @@ #import MSClassHook(SpringBoard) + MSClassHook(SBAwayController) MSClassHook(SBAwayView) +MSClassHook(SBAwayViewController) MSClassHook(SBAwayWindow) #define _trace() \ @@ -100,29 +102,43 @@ MSClassHook(UIPeripheralHost) - (void) enableCydget:(SBAwayController *)away { if (NSString *plugin = [self objectForKey:@"CYPlugin"] ?: [self objectForKey:@"Plugin"]) { + ++online_; UIKeyboardEnableAutomaticAppearance(); + [[$UIPeripheralHost sharedInstance] createAutomaticKeyboardIfNeeded]; [[UITextEffectsWindow sharedTextEffectsWindow] setWindowLevel:1000]; [away enableLockScreenBundleWithName:plugin]; - ++online_; } } - (void) disableCydget:(SBAwayController *)away { if (NSString *plugin = [self objectForKey:@"CYPlugin"] ?: [self objectForKey:@"Plugin"]) { - --online_; [away disableLockScreenBundleWithName:plugin]; [$UIPeripheralHost _releaseSharedInstance]; + UIKeyboardDisableAutomaticAppearance(); + --online_; } } @end +// avoid rendering a keyboard onto the default SBAwayView while automatic keyboard is online +MSInstanceMessageHook0(UIView *, SBAwayView, inputView) { + if (online_ == 0) + return MSOldCall(); + + return [[[UIView alloc] init] autorelease]; +} + +// by default, keyboard actions are redirected to SBAwayController and press menu button MSInstanceMessageHook1(void, SpringBoard, handleKeyEvent, GSEventRef, event) { - MSSuperCall(event); + if (online_ == 0) + return MSOldCall(event); + + return MSSuperCall(event); } MSInstanceMessageHook0(BOOL, SBAwayController, handleMenuButtonTap) { @@ -137,8 +153,9 @@ MSInstanceMessageHook0(BOOL, SBAwayController, handleMenuButtonTap) { MSInstanceMessageHook0(void, SBAwayController, _undimScreen) { menu_ = false; - [[cydgets_ objectAtIndex:active_] enableCydget:[$SBAwayController sharedAwayController]]; - MSOldCall(); + [[cydgets_ objectAtIndex:active_] enableCydget:self]; + [[[self awayView] window] makeKeyWindow]; + return MSOldCall(); } static void Deactivate_(SBAwayController *self) { @@ -157,14 +174,16 @@ MSInstanceMessageHook1(void, SpringBoard, menuButtonUp, GSEventRef, event) { } MSInstanceMessageHook1(void, SBAwayView, addGestureRecognizer, id, recognizer) { - // MSOldCall(recognizer); + if (online_ == 0) + return MSOldCall(recognizer); } MSInstanceMessageHook1(void, SBAwayWindow, sendGSEvent, GSEventRef, event) { - if (online_ != 0) - MSSuperCall(event); - else - MSOldCall(event); + NSLog(@"sendGSEvent"); + if (online_ == 0) + return MSOldCall(event); + + return MSSuperCall(event); } #define Cydgets_ @"/System/Library/LockCydgets" -- 2.45.2