diff --git a/Limelight/Input/KeyboardSupport.h b/Limelight/Input/KeyboardSupport.h index 1388162..6cecb4d 100644 --- a/Limelight/Input/KeyboardSupport.h +++ b/Limelight/Input/KeyboardSupport.h @@ -16,6 +16,7 @@ struct KeyEvent { u_char modifier; }; ++ (BOOL)sendKeyEventForPress:(UIPress*)press down:(BOOL)down API_AVAILABLE(ios(13.4)); + (BOOL)sendKeyEvent:(UIKey*)key down:(BOOL)down API_AVAILABLE(ios(13.4)); + (struct KeyEvent) translateKeyEvent:(unichar) inputChar withModifierFlags:(UIKeyModifierFlags)modifierFlags; diff --git a/Limelight/Input/KeyboardSupport.m b/Limelight/Input/KeyboardSupport.m index d075392..fa6601b 100644 --- a/Limelight/Input/KeyboardSupport.m +++ b/Limelight/Input/KeyboardSupport.m @@ -11,7 +11,40 @@ @implementation KeyboardSupport -+ (BOOL)sendKeyEvent:(UIKey*)key down:(BOOL)down API_AVAILABLE(ios(13.4)){ ++ (BOOL)sendKeyEventForPress:(UIPress*)press down:(BOOL)down API_AVAILABLE(ios(13.4)) { + if (press.key != nil) { + return [KeyboardSupport sendKeyEvent:press.key down:down]; + } + else { + short keyCode; + + switch (press.type) { + case UIPressTypeUpArrow: + keyCode = 0x26; + break; + case UIPressTypeDownArrow: + keyCode = 0x28; + break; + case UIPressTypeLeftArrow: + keyCode = 0x25; + break; + case UIPressTypeRightArrow: + keyCode = 0x27; + break; + default: + // Unhandled press type + return NO; + } + + LiSendKeyboardEvent(0x8000 | keyCode, + down ? KEY_ACTION_DOWN : KEY_ACTION_UP, + 0); + + return YES; + } +} + ++ (BOOL)sendKeyEvent:(UIKey*)key down:(BOOL)down API_AVAILABLE(ios(13.4)) { char modifierFlags = 0; short keyCode = 0; diff --git a/Limelight/Input/StreamView.m b/Limelight/Input/StreamView.m index a404f2b..10c1160 100644 --- a/Limelight/Input/StreamView.m +++ b/Limelight/Input/StreamView.m @@ -470,7 +470,7 @@ static const double X1_MOUSE_SPEED_DIVISOR = 2.5; for (UIPress* press in presses) { // For now, we'll treated it as handled if we handle at least one of the // UIPress events inside the set. - if (press.key != nil && [KeyboardSupport sendKeyEvent:press.key down:YES]) { + if ([KeyboardSupport sendKeyEventForPress:press down:YES]) { // This will prevent the legacy UITextField from receiving the event handled = YES; } @@ -489,7 +489,7 @@ static const double X1_MOUSE_SPEED_DIVISOR = 2.5; for (UIPress* press in presses) { // For now, we'll treated it as handled if we handle at least one of the // UIPress events inside the set. - if (press.key != nil && [KeyboardSupport sendKeyEvent:press.key down:NO]) { + if ([KeyboardSupport sendKeyEventForPress:press down:NO]) { // This will prevent the legacy UITextField from receiving the event handled = YES; }