aboutsummaryrefslogtreecommitdiffstats
path: root/src/org
diff options
context:
space:
mode:
authorKenny Root <kenny@the-b.org>2009-07-04 14:36:53 +0000
committerKenny Root <kenny@the-b.org>2009-07-04 14:36:53 +0000
commite796f36d8df29fefad9b78659cd53a4341769db8 (patch)
tree71a49f25f913aea2c59b13c4fa2845c6332b80d6 /src/org
parente1f93cdb7d17a52e38adb7c09c34fd7ace25d28f (diff)
downloadconnectbot-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/org')
-rw-r--r--src/org/connectbot/service/TerminalBridge.java88
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 />