Skip to content

Commit 0d6aa3c

Browse files
committed
Add workaround for Alt+Shift+6
Re #321
1 parent 6dd4aec commit 0d6aa3c

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

app/src/androidTest/java/com/gaurav/avnc/ui/vnc/KeyHandlerTest.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,17 @@ class KeyHandlerTest {
141141
assertEquals('A'.code, dispatchedKeyDowns[1])
142142
}
143143

144+
@Test
145+
fun altShift6() {
146+
sendDown(KeyEvent.KEYCODE_SHIFT_LEFT)
147+
sendDown(KeyEvent.KEYCODE_ALT_LEFT)
148+
sendKeyWithMeta(KeyEvent.KEYCODE_6, KeyEvent.META_SHIFT_ON or KeyEvent.META_ALT_ON)
149+
assertEquals(XKeySym.XK_Shift_L, dispatchedKeyDowns[0])
150+
assertEquals(XKeySym.XK_Alt_L, dispatchedKeyDowns[1])
151+
assertEquals('^'.code, dispatchedKeyDowns[2])
152+
assertEquals('^'.code, dispatchedKeyUps[0])
153+
}
154+
144155
@Test
145156
fun charWithCapslock() {
146157
sendKeyWithMeta(KeyEvent.KEYCODE_A, KeyEvent.META_CAPS_LOCK_ON)

app/src/main/java/com/gaurav/avnc/ui/vnc/KeyHandler.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -444,7 +444,12 @@ class KeyHandler(private val dispatcher: Dispatcher, prefs: AppPreferences) {
444444
*/
445445
private fun getUnicodeChar(event: KeyEvent): Int {
446446
var metaState = event.metaState or vkMetaState
447-
val uChar = event.getUnicodeChar(metaState)
447+
var uChar = event.getUnicodeChar(metaState)
448+
449+
// Fix for Alt+Shift+6 (Android generates ACCENT_CIRCUMFLEX, but we want '^')
450+
if (event.keyCode == KeyEvent.KEYCODE_6 && metaState != 0 && (uChar and KeyCharacterMap.COMBINING_ACCENT) != 0)
451+
uChar = '^'.code
452+
448453
if (uChar != 0 || metaState == 0)
449454
return uChar
450455

0 commit comments

Comments
 (0)