diff options
| author | Torne Wuff <torne@wolfpuppy.org.uk> | 2014-03-01 17:19:02 +0000 | 
|---|---|---|
| committer | Torne Wuff <torne@wolfpuppy.org.uk> | 2014-03-01 17:36:34 +0000 | 
| commit | 0b91943a7e04875d33663bc822fe3a7273aec371 (patch) | |
| tree | ef45747328584b79c1d68e6fc89459ef174b131d /src | |
| parent | fb1d457d31686b8c78aede8817eca65084715ed0 (diff) | |
| download | connectbot-0b91943a7e04875d33663bc822fe3a7273aec371.tar.gz connectbot-0b91943a7e04875d33663bc822fe3a7273aec371.tar.bz2 connectbot-0b91943a7e04875d33663bc822fe3a7273aec371.zip | |
Fix ctrl key on hardware keyboards.
We were only masking off META_CTRL_ON before calling getUnicodeChar,
which caused many keymaps to return 0 since one of the other ctrl key
bits was still set. Masking off *all* the ctrl bits makes it return
the actual character for the key pressed, and then we handle it right.
Diffstat (limited to 'src')
| -rw-r--r-- | src/org/connectbot/service/TerminalKeyListener.java | 10 | 
1 files changed, 7 insertions, 3 deletions
| diff --git a/src/org/connectbot/service/TerminalKeyListener.java b/src/org/connectbot/service/TerminalKeyListener.java index 3f82259..d242a00 100644 --- a/src/org/connectbot/service/TerminalKeyListener.java +++ b/src/org/connectbot/service/TerminalKeyListener.java @@ -64,7 +64,11 @@ public class TerminalKeyListener implements OnKeyListener, OnSharedPreferenceCha  	// backport constants from api level 11  	private final static int KEYCODE_ESCAPE = 111; -	private final static int HC_META_CTRL_ON = 4096; +	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; +	private final static int HC_META_CTRL_MASK = HC_META_CTRL_ON | HC_META_CTRL_RIGHT_ON +			| HC_META_CTRL_LEFT_ON;  	private final static int HC_META_ALT_MASK = KeyEvent.META_ALT_ON | KeyEvent.META_ALT_LEFT_ON  			| KeyEvent.META_ALT_RIGHT_ON; @@ -283,9 +287,9 @@ public class TerminalKeyListener implements OnKeyListener, OnSharedPreferenceCha  			// Ask the system to use the keymap to give us the unicode character for this key,  			// with our derived modifier state applied. -			int uchar = event.getUnicodeChar(derivedMetaState & ~HC_META_CTRL_ON); +			int uchar = event.getUnicodeChar(derivedMetaState & ~HC_META_CTRL_MASK);  			int ucharWithoutAlt = event.getUnicodeChar( -			        derivedMetaState & ~(HC_META_ALT_MASK | HC_META_CTRL_ON)); +			        derivedMetaState & ~(HC_META_ALT_MASK | HC_META_CTRL_MASK));  			if (uchar != ucharWithoutAlt) {  				// The alt key was used to modify the character returned; therefore, drop the alt  				// modifier from the state so we don't end up sending alt+key. | 
