diff options
author | Torne Wuff <torne@wolfpuppy.org.uk> | 2015-03-21 23:40:13 +0000 |
---|---|---|
committer | Torne Wuff <torne@wolfpuppy.org.uk> | 2015-03-21 23:44:08 +0000 |
commit | e7334fb51553251cc365c9a17f0c4c49af959a1d (patch) | |
tree | c89273b310de4f0edd01af0dc54a9a461fa92d03 /src | |
parent | cf1a6e3000a7344c6cc1a3f14ac387aa2292c10f (diff) | |
download | connectbot-e7334fb51553251cc365c9a17f0c4c49af959a1d.tar.gz connectbot-e7334fb51553251cc365c9a17f0c4c49af959a1d.tar.bz2 connectbot-e7334fb51553251cc365c9a17f0c4c49af959a1d.zip |
Make sticky modifiers an option, off by default.
Users with near-full-size keyboards (tablet docks/cases, or usb/bluetooth
keyboards) probably don't want sticky modifier keys. Make it an option
that's off by default (except on the Dream where it's likely desirable).
Also, include a third state to make only "alt" sticky, for the benefit of
the crazy keyboard driver on the TF101/201 that doesn't emit real key
events for alt+key pressed together.
Also, implement stickiness for the control key on physical keyboards that
have one, for consistency.
Diffstat (limited to 'src')
-rw-r--r-- | src/org/connectbot/ConsoleActivity.java | 2 | ||||
-rw-r--r-- | src/org/connectbot/HostListActivity.java | 5 | ||||
-rw-r--r-- | src/org/connectbot/service/TerminalKeyListener.java | 33 | ||||
-rw-r--r-- | src/org/connectbot/util/PreferenceConstants.java | 4 |
4 files changed, 39 insertions, 5 deletions
diff --git a/src/org/connectbot/ConsoleActivity.java b/src/org/connectbot/ConsoleActivity.java index 7aca08c..aeb0e67 100644 --- a/src/org/connectbot/ConsoleActivity.java +++ b/src/org/connectbot/ConsoleActivity.java @@ -422,7 +422,7 @@ public class ConsoleActivity extends Activity { TerminalView terminal = (TerminalView)flip; TerminalKeyListener handler = terminal.bridge.getKeyHandler(); - handler.metaPress(TerminalKeyListener.OUR_CTRL_ON); + handler.metaPress(TerminalKeyListener.OUR_CTRL_ON, true); hideEmulatedKeys(); } }); diff --git a/src/org/connectbot/HostListActivity.java b/src/org/connectbot/HostListActivity.java index 648b705..99c2a39 100644 --- a/src/org/connectbot/HostListActivity.java +++ b/src/org/connectbot/HostListActivity.java @@ -172,6 +172,11 @@ public class HostListActivity extends ListActivity { editor.putBoolean(PreferenceConstants.CTRL_FKEYS, true); editor.commit(); } + if (!prefs.contains(PreferenceConstants.STICKY_MODIFIERS)) { + SharedPreferences.Editor editor = prefs.edit(); + editor.putString(PreferenceConstants.STICKY_MODIFIERS, PreferenceConstants.YES); + editor.commit(); + } } // check for eula agreement diff --git a/src/org/connectbot/service/TerminalKeyListener.java b/src/org/connectbot/service/TerminalKeyListener.java index 43bd8e0..fc3413d 100644 --- a/src/org/connectbot/service/TerminalKeyListener.java +++ b/src/org/connectbot/service/TerminalKeyListener.java @@ -64,6 +64,8 @@ public class TerminalKeyListener implements OnKeyListener, OnSharedPreferenceCha // backport constants from api level 11 private final static int KEYCODE_ESCAPE = 111; + private final static int KEYCODE_CTRL_LEFT = 113; + private final static int KEYCODE_CTRL_RIGHT = 114; private final static int HC_META_CTRL_ON = 0x1000; private final static int HC_META_CTRL_LEFT_ON = 0x2000; private final static int HC_META_CTRL_RIGHT_ON = 0x4000; @@ -81,6 +83,7 @@ public class TerminalKeyListener implements OnKeyListener, OnSharedPreferenceCha private boolean shiftedNumbersAreFKeysOnHardKeyboard; private boolean controlNumbersAreFKeysOnSoftKeyboard; private boolean volumeKeysChangeFontSize; + private int stickyMetas; private int ourMetaState = 0; @@ -234,6 +237,10 @@ public class TerminalKeyListener implements OnKeyListener, OnSharedPreferenceCha return true; } } + if (keyCode == KEYCODE_CTRL_LEFT || keyCode == KEYCODE_CTRL_RIGHT) { + metaPress(OUR_CTRL_ON); + return true; + } } if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) { @@ -258,7 +265,7 @@ public class TerminalKeyListener implements OnKeyListener, OnSharedPreferenceCha sendEscape(); ourMetaState &= ~OUR_CTRL_ON; } else - metaPress(OUR_CTRL_ON); + metaPress(OUR_CTRL_ON, true); } bridge.redraw(); return true; @@ -497,17 +504,25 @@ public class TerminalKeyListener implements OnKeyListener, OnSharedPreferenceCha * * @param code */ - public void metaPress(int code) { + public void metaPress(int code, boolean forceSticky) { if ((ourMetaState & (code << 1)) != 0) { ourMetaState &= ~(code << 1); } else if ((ourMetaState & code) != 0) { ourMetaState &= ~code; ourMetaState |= code << 1; - } else + } else if (forceSticky || (stickyMetas & code) != 0) { ourMetaState |= code; + } else { + // skip redraw + return; + } bridge.redraw(); } + public void metaPress(int code) { + metaPress(code, false); + } + public void setTerminalKeyMode(String keymode) { this.keymode = keymode; } @@ -542,7 +557,8 @@ public class TerminalKeyListener implements OnKeyListener, OnSharedPreferenceCha if (PreferenceConstants.KEYMODE.equals(key) || PreferenceConstants.SHIFT_FKEYS.equals(key) || PreferenceConstants.CTRL_FKEYS.equals(key) || - PreferenceConstants.VOLUME_FONT.equals(key)) { + PreferenceConstants.VOLUME_FONT.equals(key) || + PreferenceConstants.STICKY_MODIFIERS.equals(key)) { updatePrefs(); } } @@ -554,6 +570,15 @@ public class TerminalKeyListener implements OnKeyListener, OnSharedPreferenceCha controlNumbersAreFKeysOnSoftKeyboard = prefs.getBoolean(PreferenceConstants.CTRL_FKEYS, false); volumeKeysChangeFontSize = prefs.getBoolean(PreferenceConstants.VOLUME_FONT, true); + String stickyModifiers = prefs.getString(PreferenceConstants.STICKY_MODIFIERS, + PreferenceConstants.NO); + if (PreferenceConstants.ALT.equals(stickyModifiers)) { + stickyMetas = OUR_ALT_ON; + } else if (PreferenceConstants.YES.equals(stickyModifiers)) { + stickyMetas = OUR_SHIFT_ON | OUR_CTRL_ON | OUR_ALT_ON; + } else { + stickyMetas = 0; + } } public void setCharset(String encoding) { diff --git a/src/org/connectbot/util/PreferenceConstants.java b/src/org/connectbot/util/PreferenceConstants.java index ade1b35..ab5e4a9 100644 --- a/src/org/connectbot/util/PreferenceConstants.java +++ b/src/org/connectbot/util/PreferenceConstants.java @@ -80,6 +80,10 @@ public class PreferenceConstants { public static final String SHIFT_FKEYS = "shiftfkeys"; public static final String CTRL_FKEYS = "ctrlfkeys"; public static final String VOLUME_FONT = "volumefont"; + public static final String STICKY_MODIFIERS = "stickymodifiers"; + public static final String YES = "yes"; + public static final String NO = "no"; + public static final String ALT = "alt"; /* Backup identifiers */ public static final String BACKUP_PREF_KEY = "prefs"; |