|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@interface TerminalKeyInput |
|
|
|
|
|
-(void)upKeyPressed; |
|
|
|
|
|
-(void)downKeyPressed; |
|
|
|
|
|
-(void)leftKeyPressed; |
|
|
|
|
|
-(void)rightKeyPressed; |
|
|
|
|
|
|
|
|
|
|
|
@property(strong, nonatomic) NSTimer *haTimer; |
|
|
|
|
|
-(void) haHandleLongPress:(UILongPressGestureRecognizer *) arg1; |
|
|
|
|
|
@end |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
%hook TerminalKeyInput |
|
|
|
|
|
%property(strong, nonatomic) NSTimer *haTimer; |
|
|
|
|
|
|
|
|
|
|
|
-(id) initWithFrame:(CGRect) arg1 { |
|
|
|
|
|
id orig = %orig; |
|
|
|
|
|
|
|
|
|
|
|
UILongPressGestureRecognizer *upLongPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(haHandleLongPress:)]; |
|
|
|
|
|
UILongPressGestureRecognizer *downLongPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(haHandleLongPress:)]; |
|
|
|
|
|
UILongPressGestureRecognizer *leftLongPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(haHandleLongPress:)]; |
|
|
|
|
|
UILongPressGestureRecognizer *rightLongPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(haHandleLongPress:)]; |
|
|
|
|
|
|
|
|
|
|
|
id keyboardToolbar = MSHookIvar<id>(self, "toolbar"); |
|
|
|
|
|
|
|
|
|
|
|
[MSHookIvar<UIButton *>(keyboardToolbar, "upKey") addGestureRecognizer:upLongPress]; |
|
|
|
|
|
[MSHookIvar<UIButton *>(keyboardToolbar, "downKey") addGestureRecognizer:downLongPress]; |
|
|
|
|
|
[MSHookIvar<UIButton *>(keyboardToolbar, "leftKey") addGestureRecognizer:leftLongPress]; |
|
|
|
|
|
[MSHookIvar<UIButton *>(keyboardToolbar, "rightKey") addGestureRecognizer:rightLongPress]; |
|
|
|
|
|
|
|
|
|
|
|
return orig; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
%new |
|
|
|
|
|
-(void) haHandleLongPress:(UILongPressGestureRecognizer *) recognizer { |
|
|
|
|
|
|
|
|
|
|
|
NSString *keyName = [[recognizer view] accessibilityLabel]; |
|
|
|
|
|
|
|
|
|
|
|
if (recognizer.state == UIGestureRecognizerStateBegan){ |
|
|
|
|
|
|
|
|
|
|
|
if (![self haTimer]){ |
|
|
|
|
|
if ([keyName isEqualToString:@"Up"]){ |
|
|
|
|
|
[self setHaTimer:[NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(upKeyPressed) userInfo:nil repeats:YES]]; |
|
|
|
|
|
} else if ([keyName isEqualToString:@"Down"]){ |
|
|
|
|
|
[self setHaTimer:[NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(downKeyPressed) userInfo:nil repeats:YES]]; |
|
|
|
|
|
} else if ([keyName isEqualToString:@"Left"]){ |
|
|
|
|
|
[self setHaTimer:[NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(leftKeyPressed) userInfo:nil repeats:YES]]; |
|
|
|
|
|
} else if ([keyName isEqualToString:@"Right"]){ |
|
|
|
|
|
[self setHaTimer:[NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(rightKeyPressed) userInfo:nil repeats:YES]]; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} else if (recognizer.state == UIGestureRecognizerStateEnded){ |
|
|
|
|
|
|
|
|
|
|
|
if ([self haTimer]){ |
|
|
|
|
|
[[self haTimer] invalidate]; |
|
|
|
|
|
[self setHaTimer:nil]; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
%end |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
%ctor { |
|
|
|
|
|
|
|
|
|
|
|
%init(TerminalKeyInput = objc_getClass("NewTerm.TerminalKeyInput")); |
|
|
|
|
|
|
|
|
|
|
|
} |