diff options
author | Kenny Root <kenny@the-b.org> | 2009-07-04 14:36:53 +0000 |
---|---|---|
committer | Kenny Root <kenny@the-b.org> | 2009-07-04 14:36:53 +0000 |
commit | e796f36d8df29fefad9b78659cd53a4341769db8 (patch) | |
tree | 71a49f25f913aea2c59b13c4fa2845c6332b80d6 /src | |
parent | e1f93cdb7d17a52e38adb7c09c34fd7ace25d28f (diff) | |
download | connectbot-e796f36d8df29fefad9b78659cd53a4341769db8.tar.gz connectbot-e796f36d8df29fefad9b78659cd53a4341769db8.tar.bz2 connectbot-e796f36d8df29fefad9b78659cd53a4341769db8.zip |
Update Fn keys to work with hardware keyboard (shift+number) and software keyboard (ctrl+number)
git-svn-id: https://connectbot.googlecode.com/svn/trunk/connectbot@354 df292f66-193f-0410-a5fc-6d59da041ff2
Diffstat (limited to 'src')
-rw-r--r-- | src/org/connectbot/service/TerminalBridge.java | 88 |
1 files changed, 69 insertions, 19 deletions
diff --git a/src/org/connectbot/service/TerminalBridge.java b/src/org/connectbot/service/TerminalBridge.java index a79668d..3acb89e 100644 --- a/src/org/connectbot/service/TerminalBridge.java +++ b/src/org/connectbot/service/TerminalBridge.java @@ -34,6 +34,7 @@ import org.connectbot.util.HostDatabase; import org.connectbot.util.PreferenceConstants; import android.content.Context; +import android.content.res.Configuration; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; @@ -119,6 +120,8 @@ public class TerminalBridge implements VDUDisplay, OnKeyListener { private String keymode = null; + private boolean hardwareKeyboard = false; + private boolean selectingForCopy = false; private final SelectionArea selectionArea; private ClipboardManager clipboard; @@ -257,6 +260,9 @@ public class TerminalBridge implements VDUDisplay, OnKeyListener { buffer.setDisplay(this); selectionArea = new SelectionArea(); + + hardwareKeyboard = (manager.res.getConfiguration().keyboard + == Configuration.KEYBOARD_QWERTY); } public PromptHelper getPromptHelper() { @@ -520,8 +526,6 @@ public class TerminalBridge implements VDUDisplay, OnKeyListener { if (printing) { int curMetaState = event.getMetaState(); - boolean oppositeShift = (metaState & META_TAB) != 0; - metaState &= ~(META_SLASH | META_TAB); if ((metaState & META_SHIFT_MASK) != 0) { @@ -539,6 +543,14 @@ public class TerminalBridge implements VDUDisplay, OnKeyListener { int key = keymap.get(keyCode, curMetaState); if ((metaState & META_CTRL_MASK) != 0) { + metaState &= ~META_CTRL_ON; + redraw(); + + if (!hardwareKeyboard && key >= '0' && key <= '9') { + if (sendFunctionKey(key)) + return true; + } + // Support CTRL-a through CTRL-z if (key >= 0x61 && key <= 0x7A) key -= 0x60; @@ -549,26 +561,12 @@ public class TerminalBridge implements VDUDisplay, OnKeyListener { key = 0x00; else if (key == 0x3F) key = 0x7F; - - metaState &= ~META_CTRL_ON; - - redraw(); } // handle pressing f-keys - if (oppositeShift) { - switch(key) { - case '!': ((vt320)buffer).keyPressed(vt320.KEY_F1, ' ', 0); return true; - case '@': ((vt320)buffer).keyPressed(vt320.KEY_F2, ' ', 0); return true; - case '#': ((vt320)buffer).keyPressed(vt320.KEY_F3, ' ', 0); return true; - case '$': ((vt320)buffer).keyPressed(vt320.KEY_F4, ' ', 0); return true; - case '%': ((vt320)buffer).keyPressed(vt320.KEY_F5, ' ', 0); return true; - case '^': ((vt320)buffer).keyPressed(vt320.KEY_F6, ' ', 0); return true; - case '&': ((vt320)buffer).keyPressed(vt320.KEY_F7, ' ', 0); return true; - case '*': ((vt320)buffer).keyPressed(vt320.KEY_F8, ' ', 0); return true; - case '(': ((vt320)buffer).keyPressed(vt320.KEY_F9, ' ', 0); return true; - case ')': ((vt320)buffer).keyPressed(vt320.KEY_F10, ' ', 0); return true; - } + if (hardwareKeyboard && (curMetaState & KeyEvent.META_SHIFT_ON) != 0) { + if (sendFunctionKey(key)) + return true; } if (key < 0x80) @@ -752,6 +750,58 @@ public class TerminalBridge implements VDUDisplay, OnKeyListener { } /** + * @param key + * @return successful + */ + private boolean sendFunctionKey(int key) { + Log.d(TAG, "sendFunctionKey called with " + key); + switch (key) { + case '1': + case '!': + ((vt320) buffer).keyPressed(vt320.KEY_F1, ' ', 0); + return true; + case '2': + case '@': + ((vt320) buffer).keyPressed(vt320.KEY_F2, ' ', 0); + return true; + case '3': + case '#': + ((vt320) buffer).keyPressed(vt320.KEY_F3, ' ', 0); + return true; + case '4': + case '$': + ((vt320) buffer).keyPressed(vt320.KEY_F4, ' ', 0); + return true; + case '5': + case '%': + ((vt320) buffer).keyPressed(vt320.KEY_F5, ' ', 0); + return true; + case '6': + case '^': + ((vt320) buffer).keyPressed(vt320.KEY_F6, ' ', 0); + return true; + case '7': + case '&': + ((vt320) buffer).keyPressed(vt320.KEY_F7, ' ', 0); + return true; + case '8': + case '*': + ((vt320) buffer).keyPressed(vt320.KEY_F8, ' ', 0); + return true; + case '9': + case '(': + ((vt320) buffer).keyPressed(vt320.KEY_F9, ' ', 0); + return true; + case '0': + case ')': + ((vt320) buffer).keyPressed(vt320.KEY_F10, ' ', 0); + return true; + default: + return false; + } + } + + /** * Handle meta key presses where the key can be locked on. * <p> * 1st press: next key to have meta state<br /> |