diff options
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"; | 
