aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKenny Root <kenny@the-b.org>2008-12-11 11:08:47 +0000
committerKenny Root <kenny@the-b.org>2008-12-11 11:08:47 +0000
commit4b5d2d600bebadfec5ae23ef1cfea70dbb979bc2 (patch)
tree109fca8bfe11551fca167ab1864c36c68671798f /src
parentd7d074d6739c6d9b105df27034b98e2ca5705a5a (diff)
downloadconnectbot-4b5d2d600bebadfec5ae23ef1cfea70dbb979bc2.tar.gz
connectbot-4b5d2d600bebadfec5ae23ef1cfea70dbb979bc2.tar.bz2
connectbot-4b5d2d600bebadfec5ae23ef1cfea70dbb979bc2.zip
Only react to the slash and tab keys on keyUp and don't print anything if it was used as a modifier
Diffstat (limited to 'src')
-rw-r--r--src/org/connectbot/service/TerminalBridge.java50
1 files changed, 39 insertions, 11 deletions
diff --git a/src/org/connectbot/service/TerminalBridge.java b/src/org/connectbot/service/TerminalBridge.java
index b527386..9fe9cd6 100644
--- a/src/org/connectbot/service/TerminalBridge.java
+++ b/src/org/connectbot/service/TerminalBridge.java
@@ -134,6 +134,8 @@ public class TerminalBridge implements VDUDisplay, OnKeyListener, InteractiveCal
private boolean ctrlPressed = false;
private boolean altPressed = false;
private boolean shiftPressed = false;
+ private boolean slashKeyPressed = false;
+ private boolean tabKeyPressed = false;
private boolean pubkeysExhausted = false;
@@ -673,14 +675,38 @@ public class TerminalBridge implements VDUDisplay, OnKeyListener, InteractiveCal
* or passwords, but otherwise we pass them directly over to the SSH host.
*/
public boolean onKey(View v, int keyCode, KeyEvent event) {
- // ignore any key-up events
- if(event.getAction() == KeyEvent.ACTION_UP)
- return false;
-
try {
+
+ // Ignore all key-up events except for the special keys
+ if (event.getAction() == KeyEvent.ACTION_UP) {
+ // skip keys if we aren't connected yet or have been disconnected
+ if (disconnected || session == null)
+ return false;
+
+ if ("Use right-side keys".equals(keymode)) {
+ if (keyCode == KeyEvent.KEYCODE_ALT_RIGHT && slashKeyPressed) {
+ stdin.write('/');
+ return true;
+ } else if (keyCode == KeyEvent.KEYCODE_SHIFT_RIGHT && tabKeyPressed) {
+ stdin.write(0x09);
+ return true;
+ }
+ } else if ("Use left-side keys".equals(keymode)) {
+ if (keyCode == KeyEvent.KEYCODE_ALT_LEFT && slashKeyPressed) {
+ stdin.write('/');
+ return true;
+ } else if (keyCode == KeyEvent.KEYCODE_SHIFT_LEFT && tabKeyPressed) {
+ stdin.write(0x09);
+ return true;
+ }
+ }
+
+ return false;
+ }
+
// check for terminal resizing keys
// TODO: see if there is a way to make sure we dont "blip"
- if(keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
+ if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
forcedSize = false;
setFontSize(fontSize + 2);
return true;
@@ -690,17 +716,19 @@ public class TerminalBridge implements VDUDisplay, OnKeyListener, InteractiveCal
return true;
}
- boolean printing = (keymap.isPrintingKey(keyCode) || keyCode == KeyEvent.KEYCODE_SPACE);
-
// skip keys if we aren't connected yet or have been disconnected
if(disconnected || session == null)
return false;
+ boolean printing = (keymap.isPrintingKey(keyCode) || keyCode == KeyEvent.KEYCODE_SPACE);
+
// otherwise pass through to existing session
// print normal keys
if (printing) {
int metaState = event.getMetaState();
+ slashKeyPressed = tabKeyPressed = false;
+
if (shiftPressed) {
metaState |= KeyEvent.META_SHIFT_ON;
shiftPressed = false;
@@ -749,15 +777,15 @@ public class TerminalBridge implements VDUDisplay, OnKeyListener, InteractiveCal
// try handling keymode shortcuts
if("Use right-side keys".equals(keymode)) {
switch(keyCode) {
- case KeyEvent.KEYCODE_ALT_RIGHT: stdin.write('/'); return true;
- case KeyEvent.KEYCODE_SHIFT_RIGHT: stdin.write(0x09); return true;
+ case KeyEvent.KEYCODE_ALT_RIGHT: slashKeyPressed = true; return true;
+ case KeyEvent.KEYCODE_SHIFT_RIGHT: tabKeyPressed = true; return true;
case KeyEvent.KEYCODE_SHIFT_LEFT: shiftPressed = true; return true;
case KeyEvent.KEYCODE_ALT_LEFT: altPressed = true; return true;
}
} else if("Use left-side keys".equals(keymode)) {
switch(keyCode) {
- case KeyEvent.KEYCODE_ALT_LEFT: stdin.write('/'); return true;
- case KeyEvent.KEYCODE_SHIFT_LEFT: stdin.write(0x09); return true;
+ case KeyEvent.KEYCODE_ALT_LEFT: slashKeyPressed = true; return true;
+ case KeyEvent.KEYCODE_SHIFT_LEFT: tabKeyPressed = true; return true;
case KeyEvent.KEYCODE_SHIFT_RIGHT: shiftPressed = true; return true;
case KeyEvent.KEYCODE_ALT_RIGHT: altPressed = true; return true;
}