[Scummvm-git-logs] scummvm master -> 87a76f4a569c76d6be1161dcc21a1c5aebc46781

antoniou79 a.antoniou79 at gmail.com
Sat Oct 17 16:21:08 UTC 2020


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
87a76f4a56 ANDROID: Fix shifted keys and key combos


Commit: 87a76f4a569c76d6be1161dcc21a1c5aebc46781
    https://github.com/scummvm/scummvm/commit/87a76f4a569c76d6be1161dcc21a1c5aebc46781
Author: antoniou (a.antoniou79 at gmail.com)
Date: 2020-10-17T19:20:58+03:00

Commit Message:
ANDROID: Fix shifted keys and key combos

Changed paths:
    backends/platform/android/org/scummvm/scummvm/ScummVMActivity.java
    backends/platform/android/org/scummvm/scummvm/ScummVMEventsBase.java
    dists/android/res/xml/qwerty.xml
    dists/android/res/xml/qwerty_alt.xml
    dists/android/res/xml/qwerty_alt_shift.xml
    dists/android/res/xml/qwerty_shift.xml


diff --git a/backends/platform/android/org/scummvm/scummvm/ScummVMActivity.java b/backends/platform/android/org/scummvm/scummvm/ScummVMActivity.java
index b8c7d21cfb..52486c7804 100644
--- a/backends/platform/android/org/scummvm/scummvm/ScummVMActivity.java
+++ b/backends/platform/android/org/scummvm/scummvm/ScummVMActivity.java
@@ -20,6 +20,7 @@ import android.net.wifi.WifiManager;
 import android.os.Build;
 import android.os.Bundle;
 import android.os.Environment;
+import android.os.SystemClock;
 import android.util.DisplayMetrics;
 import android.util.Log;
 import android.util.TypedValue;
@@ -51,6 +52,7 @@ import java.io.OutputStream;
 import java.io.Reader;
 import java.io.UnsupportedEncodingException;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.Properties;
@@ -147,6 +149,7 @@ public class ScummVMActivity extends Activity implements OnKeyboardVisibilityLis
 								public boolean shift = false;
 								public boolean alt = false;
 								public final TreeSet<Integer> stickyKeys = new TreeSet<>();
+								public long mEventTime = -1;
 
 								public BuiltInKeyboardView(Context context, android.util.AttributeSet attrs) {
 									super(context, attrs);
@@ -162,6 +165,76 @@ public class ScummVMActivity extends Activity implements OnKeyboardVisibilityLis
 									return false;
 								}
 
+								public int getCompiledMetaState() {
+									int retCompiledMetaState = 0;
+									// search in the list of currently "ON" sticky keys to set the meta flags
+									for (int stickyActiveKeyCode : stickyKeys) {
+										switch (stickyActiveKeyCode) {
+											case KeyEvent.KEYCODE_SHIFT_LEFT:
+												retCompiledMetaState|= KeyEvent.META_SHIFT_LEFT_ON;
+												break;
+											case KeyEvent.KEYCODE_SHIFT_RIGHT:
+												retCompiledMetaState|= KeyEvent.META_SHIFT_RIGHT_ON;
+												break;
+											case KeyEvent.KEYCODE_CTRL_LEFT:
+												retCompiledMetaState|= KeyEvent.META_CTRL_LEFT_ON;
+												break;
+											case KeyEvent.KEYCODE_CTRL_RIGHT:
+												retCompiledMetaState|= KeyEvent.META_CTRL_RIGHT_ON;
+												break;
+											case KeyEvent.KEYCODE_ALT_LEFT:
+												retCompiledMetaState|= KeyEvent.META_ALT_LEFT_ON;
+												break;
+											case KeyEvent.KEYCODE_ALT_RIGHT:
+												retCompiledMetaState|= KeyEvent.META_ALT_RIGHT_ON;
+												break;
+											case KeyEvent.KEYCODE_META_LEFT:
+												retCompiledMetaState|= KeyEvent.META_META_LEFT_ON;
+												break;
+											case KeyEvent.KEYCODE_META_RIGHT:
+												retCompiledMetaState|= KeyEvent.META_META_RIGHT_ON;
+												break;
+											case KeyEvent.KEYCODE_CAPS_LOCK:
+												retCompiledMetaState|= KeyEvent.META_CAPS_LOCK_ON;
+												break;
+											case KeyEvent.KEYCODE_NUM_LOCK:
+												retCompiledMetaState|= KeyEvent.META_NUM_LOCK_ON;
+												break;
+											case KeyEvent.KEYCODE_SCROLL_LOCK:
+												retCompiledMetaState|= KeyEvent.META_SCROLL_LOCK_ON;
+												break;
+											case KeyEvent.KEYCODE_SYM:
+												// TODO Do we have or need a SYM key?
+												retCompiledMetaState|= KeyEvent.META_SYM_ON;
+												break;
+											default: break;
+										}
+									}
+
+									if (shift && !alt) {
+										retCompiledMetaState |= KeyEvent.META_SHIFT_LEFT_ON;
+									}
+									return retCompiledMetaState;
+								}
+
+								public void recheckStickyKeys() {
+									// setting sticky keys to their proper on or off state
+									// h
+									boolean atLeastOneStickyKeyWasChanged = false;
+									for (CustomKeyboard.CustomKey k: getKeyboard().getKeys()) {
+										if (stickyKeys.contains(k.codes[0]) && !k.on) {
+											k.on = true;
+											atLeastOneStickyKeyWasChanged = true;
+										} else if (!stickyKeys.contains(k.codes[0]) && k.sticky && k.on) {
+											k.on = false;
+											atLeastOneStickyKeyWasChanged = true;
+										}
+									}
+									if (atLeastOneStickyKeyWasChanged) {
+										invalidateAllKeys();
+									}
+								}
+
 								public void ChangeKeyboard() {
 									// Called when bringing up the keyboard
 									// or pressing one of the special keyboard keys that change the layout (eg "123...")
@@ -170,12 +243,12 @@ public class ScummVMActivity extends Activity implements OnKeyboardVisibilityLis
 									setKeyboard(new CustomKeyboard(ScummVMActivity.this, TextInputKeyboardList[idx][keyboard]));
 									setPreviewEnabled(false);
 									setProximityCorrectionEnabled(false);
-									for (CustomKeyboard.CustomKey k: getKeyboard().getKeys()) {
-										if (stickyKeys.contains(k.codes[0])) {
-											k.on = true;
-											invalidateAllKeys();
-										}
-									}
+
+									// setKeyboard() already invalidates all keys,
+									// here we check for our memory of sticky keys state (and any that changed to on and were added to stickyKeys Set)
+									recheckStickyKeys();
+									//ScummVMActivity.this._scummvm.displayMessageOnOSD ("NEW KEYBOARD LAYOUT: QWERTY"
+									//	+ (alt ? " ALT " : "") + (shift? " SHIFT" : ""));
 								}
 							}
 
@@ -185,93 +258,131 @@ public class ScummVMActivity extends Activity implements OnKeyboardVisibilityLis
 							builtinKeyboard.setOnKeyboardActionListener(new CustomKeyboardView.OnKeyboardActionListener() {
 
 								public void onPress(int key) {
-									Log.d(ScummVM.LOG_TAG, "SHOW KEYBOARD - 001 - onPress key: " + key ); // CALLED
+									//Log.d(ScummVM.LOG_TAG, "SHOW KEYBOARD - 001 - onPress key: " + key ); // CALLED
 									if (key == KeyEvent.KEYCODE_BACK) {
 										return;
 									}
 
-									if (key < 0) {
+									if (key <= 0) {
 										return;
 									}
 
 									for (CustomKeyboard.CustomKey k: builtinKeyboard.getKeyboard().getKeys()) {
-										if (k.sticky && key == k.codes[0])
+										if (k.sticky && key == k.codes[0]) {
 											return;
+										}
 									}
 
+									int compiledMetaState = builtinKeyboard.getCompiledMetaState();
+
+									// keys with keyCode greater than 100000, should be submitted with a LEFT_SHIFT_ modifier (and decreased by 100000 to get their proper code)
 									if (key > 100000) {
 										key -= 100000;
-										_main_surface.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_SHIFT_LEFT));
+										compiledMetaState |= KeyEvent.META_SHIFT_LEFT_ON;
 									}
-									_main_surface.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, key));
+
+									//
+									// downTime (long) - The time (in SystemClock.uptimeMillis()) at which this key code originally went down.
+									// ** Since this is a down event, this will be the same as getEventTime(). **
+									// Note that when chording keys, this value is the down time of the most recently pressed key, which may not be the same physical key of this event.
+									// eventTime (long) -  The time (in SystemClock.uptimeMillis()) at which this event happened.
+									// TODO update repeat and event time? with
+									builtinKeyboard.mEventTime = SystemClock.uptimeMillis();
+									KeyEvent compiledKeyEvent = new KeyEvent(builtinKeyboard.mEventTime,
+									                                         builtinKeyboard.mEventTime,
+									                                         KeyEvent.ACTION_DOWN,
+									                                         key,
+									                                         0,
+									                                         compiledMetaState);
+
+									_main_surface.dispatchKeyEvent(compiledKeyEvent);
 								}
 
 								public void onRelease(int key) {
-									Log.d(ScummVM.LOG_TAG, "SHOW KEYBOARD - 001 - onRelease key: " + key );
+									//Log.d(ScummVM.LOG_TAG, "SHOW KEYBOARD - 001 - onRelease key: " + key );
 									if (key == KeyEvent.KEYCODE_BACK) {
 										builtinKeyboard.setOnKeyboardActionListener(null);
 										showScreenKeyboardWithoutTextInputField(0); // Hide keyboard
 										return;
 									}
 
+									// CustomKeyboard.KEYCODE_SHIFT is a special button (negative value)
+									// which basically changes the keyboard to a another,"SHIFTED", layout (other keys)
+									// In this layout, if it's NOT also an "ALT" layout, keys are assumed to get the LEFT SHIFT modifier by default
 									if (key == CustomKeyboard.KEYCODE_SHIFT) {
-										builtinKeyboard.shift = ! builtinKeyboard.shift;
-										if (builtinKeyboard.shift && !builtinKeyboard.alt) {
-											_main_surface.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_SHIFT_LEFT));
-										} else {
-											_main_surface.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_SHIFT_LEFT));
-										}
+										builtinKeyboard.shift = !builtinKeyboard.shift;
 										builtinKeyboard.ChangeKeyboard();
 										return;
 									}
 
 									if (key == CustomKeyboard.KEYCODE_ALT) {
-										builtinKeyboard.alt = ! builtinKeyboard.alt;
-										if (builtinKeyboard.alt) {
-											_main_surface.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_SHIFT_LEFT));
-										} else {
+										builtinKeyboard.alt = !builtinKeyboard.alt;
+										if (!builtinKeyboard.alt) {
 											builtinKeyboard.shift = false;
 										}
 										builtinKeyboard.ChangeKeyboard();
 										return;
 									}
 
-									if (key < 0) {
+									if (key <= 0) {
 										return;
 									}
 
+									//
+									// TODO - Probably remove keys like caps lock, scroll lock, num lock, print etc...
+									//
 									for (CustomKeyboard.CustomKey k: builtinKeyboard.getKeyboard().getKeys()) {
 										if (k.sticky && key == k.codes[0]) {
-											if (k.on) {
-												builtinKeyboard.stickyKeys.add(key);
-												_main_surface.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, key));
-											} else {
+											if (builtinKeyboard.stickyKeys.contains(key)) {
+												// if it was "remembered" (in stickyKeys set) as ON
+												// (and it off by removing them from stickyKeys set)
 												builtinKeyboard.stickyKeys.remove(key);
-												_main_surface.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, key));
+											} else {
+												// if it was "remembered" (in stickyKeys set) as OFF
+												// (turn it on by adding them to stickyKeys set)
+												builtinKeyboard.stickyKeys.add(key);
 											}
+											builtinKeyboard.recheckStickyKeys();
 											return;
 										}
 									}
 
-									boolean shifted = false;
+									int compiledMetaState = builtinKeyboard.getCompiledMetaState();
+
+									//boolean shifted = false;
 									if (key > 100000) {
 										key -= 100000;
-										shifted = true;
+										//shifted = true;
+										compiledMetaState |= KeyEvent.META_SHIFT_LEFT_ON;
 									}
 
-									_main_surface.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, key));
-
-									if (shifted) {
-										_main_surface.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_SHIFT_LEFT));
-										builtinKeyboard.stickyKeys.remove(KeyEvent.KEYCODE_SHIFT_LEFT);
-										for (CustomKeyboard.CustomKey k: builtinKeyboard.getKeyboard().getKeys())
-										{
-											if (k.sticky && k.codes[0] == KeyEvent.KEYCODE_SHIFT_LEFT && k.on)
-											{
-												k.on = false;
-												builtinKeyboard.invalidateAllKeys();
+									// TODO properly set repeat value?
+									KeyEvent compiledKeyEvent = new KeyEvent(builtinKeyboard.mEventTime,
+										SystemClock.uptimeMillis(),
+										KeyEvent.ACTION_UP,
+										key,
+										0,
+										compiledMetaState);
+
+									_main_surface.dispatchKeyEvent(compiledKeyEvent);
+									builtinKeyboard.mEventTime = -1; // reset event time
+
+									// Excluding the CAPS LOCK NUM LOCK AND SCROLL LOCK keys,
+									// clear the state of all other sticky keys that are used in a key combo
+									// when we reach this part of the code
+									if (builtinKeyboard.stickyKeys.size() > 0) {
+										HashSet<Integer> stickiesToReleaseSet = new HashSet<>();
+										for (int tmpKeyCode : builtinKeyboard.stickyKeys) {
+											if (tmpKeyCode != KeyEvent.KEYCODE_CAPS_LOCK
+												&& tmpKeyCode != KeyEvent.KEYCODE_NUM_LOCK
+												&& tmpKeyCode != KeyEvent.KEYCODE_SCROLL_LOCK) {
+												stickiesToReleaseSet.add(tmpKeyCode);
 											}
 										}
+										if (stickiesToReleaseSet.size() > 0) {
+											builtinKeyboard.stickyKeys.removeAll(stickiesToReleaseSet);
+											builtinKeyboard.recheckStickyKeys();
+										}
 									}
 								}
 
@@ -324,11 +435,11 @@ public class ScummVMActivity extends Activity implements OnKeyboardVisibilityLis
 
 			if (bGlobalsCompatibilityHacksTextInputEmulatesHwKeyboard) {
 				showScreenKeyboardWithoutTextInputField(dGlobalsTextInputKeyboard);
-				Log.d(ScummVM.LOG_TAG, "showScreenKeyboard - showScreenKeyboardWithoutTextInputField()");
+				//Log.d(ScummVM.LOG_TAG, "showScreenKeyboard - showScreenKeyboardWithoutTextInputField()");
 				_main_surface.captureMouse(false);
 				return;
 			}
-			Log.d(ScummVM.LOG_TAG, "showScreenKeyboard: YOU SHOULD NOT SEE ME!!!");
+			//Log.d(ScummVM.LOG_TAG, "showScreenKeyboard: YOU SHOULD NOT SEE ME!!!");
 
 //			// TODO redundant ?
 //			if (_screenKeyboard != null) {
diff --git a/backends/platform/android/org/scummvm/scummvm/ScummVMEventsBase.java b/backends/platform/android/org/scummvm/scummvm/ScummVMEventsBase.java
index fcade59735..c9905c45ff 100644
--- a/backends/platform/android/org/scummvm/scummvm/ScummVMEventsBase.java
+++ b/backends/platform/android/org/scummvm/scummvm/ScummVMEventsBase.java
@@ -289,6 +289,7 @@ public class ScummVMEventsBase implements
 			break;
 		}
 
+		// look in events.cpp for how this is handled
 		_scummvm.pushEvent(type, action, keyCode,
 					e.getUnicodeChar() & KeyCharacterMap.COMBINING_ACCENT_MASK,
 					e.getMetaState(), e.getRepeatCount(),
diff --git a/dists/android/res/xml/qwerty.xml b/dists/android/res/xml/qwerty.xml
index d47c174746..6aa7f5130e 100644
--- a/dists/android/res/xml/qwerty.xml
+++ b/dists/android/res/xml/qwerty.xml
@@ -6,7 +6,7 @@
 	scummvm:verticalGap="0px"
 	scummvm:keyHeight="10%p">
 	<CustomRow>
-		<CustomKey scummvm:codes="45" scummvm:keyLabel="q" scummvm:keyEdgeFlags="left" scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="45" scummvm:keyLabel="q" scummvm:isRepeatable="true" scummvm:keyEdgeFlags="left"/>
 		<CustomKey scummvm:codes="51" scummvm:keyLabel="w" scummvm:isRepeatable="true"/>
 		<CustomKey scummvm:codes="33" scummvm:keyLabel="e" scummvm:isRepeatable="true"/>
 		<CustomKey scummvm:codes="46" scummvm:keyLabel="r" scummvm:isRepeatable="true"/>
@@ -15,10 +15,10 @@
 		<CustomKey scummvm:codes="49" scummvm:keyLabel="u" scummvm:isRepeatable="true"/>
 		<CustomKey scummvm:codes="37" scummvm:keyLabel="i" scummvm:isRepeatable="true"/>
 		<CustomKey scummvm:codes="43" scummvm:keyLabel="o" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="44" scummvm:keyLabel="p" scummvm:keyEdgeFlags="right" scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="44" scummvm:keyLabel="p" scummvm:isRepeatable="true" scummvm:keyEdgeFlags="right"/>
 	</CustomRow>
 	<CustomRow>
-		<CustomKey scummvm:codes="29" scummvm:keyLabel="a" scummvm:keyEdgeFlags="left" scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="29" scummvm:keyLabel="a" scummvm:isRepeatable="true" scummvm:keyEdgeFlags="left"/>
 		<CustomKey scummvm:codes="47" scummvm:keyLabel="s" scummvm:isRepeatable="true"/>
 		<CustomKey scummvm:codes="32" scummvm:keyLabel="d" scummvm:isRepeatable="true"/>
 		<CustomKey scummvm:codes="34" scummvm:keyLabel="f" scummvm:isRepeatable="true"/>
@@ -27,7 +27,7 @@
 		<CustomKey scummvm:codes="38" scummvm:keyLabel="j" scummvm:isRepeatable="true"/>
 		<CustomKey scummvm:codes="39" scummvm:keyLabel="k" scummvm:isRepeatable="true"/>
 		<CustomKey scummvm:codes="40" scummvm:keyLabel="l" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="74" scummvm:keyLabel=";" scummvm:keyEdgeFlags="right" scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="74" scummvm:keyLabel=";" scummvm:isRepeatable="true" scummvm:keyEdgeFlags="right"/>
 	</CustomRow>
 	<CustomRow>
 		<CustomKey scummvm:codes="-1" scummvm:keyLabel="⇪" scummvm:keyEdgeFlags="left"/>
@@ -38,16 +38,16 @@
 		<CustomKey scummvm:codes="30" scummvm:keyLabel="b" scummvm:isRepeatable="true"/>
 		<CustomKey scummvm:codes="42" scummvm:keyLabel="n" scummvm:isRepeatable="true"/>
 		<CustomKey scummvm:codes="41" scummvm:keyLabel="m" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="67" scummvm:keyLabel="⬅" scummvm:keyWidth="20%p" scummvm:keyEdgeFlags="right" scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="67" scummvm:keyLabel="⬅" scummvm:isRepeatable="true" scummvm:keyWidth="20%p" scummvm:keyEdgeFlags="right"/>
 	</CustomRow>
 	<CustomRow rowEdgeFlags="bottom">
-		<CustomKey scummvm:codes="-6" scummvm:keyLabel="123…" scummvm:keyEdgeFlags="left"/>
-		<CustomKey scummvm:codes="71" scummvm:keyLabel="[" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="72" scummvm:keyLabel="]" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="76" scummvm:keyLabel="/" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="62" scummvm:keyLabel="Space" scummvm:keyWidth="20%p" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="55" scummvm:keyLabel="," scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="56" scummvm:keyLabel="." scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="66" scummvm:keyLabel="Enter" scummvm:keyWidth="20%p" scummvm:keyEdgeFlags="right" scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="-6" scummvm:keyLabel="123…"  scummvm:keyEdgeFlags="left"/>
+		<CustomKey scummvm:codes="71" scummvm:keyLabel="["     scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="72" scummvm:keyLabel="]"     scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="76" scummvm:keyLabel="/"     scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="62" scummvm:keyLabel="Space" scummvm:isRepeatable="true" scummvm:keyWidth="20%p"/>
+		<CustomKey scummvm:codes="55" scummvm:keyLabel=","     scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="56" scummvm:keyLabel="."     scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="66" scummvm:keyLabel="Enter" scummvm:isRepeatable="true" scummvm:keyWidth="20%p" scummvm:keyEdgeFlags="right"/>
 	</CustomRow>
 </CustomKeyboard>
diff --git a/dists/android/res/xml/qwerty_alt.xml b/dists/android/res/xml/qwerty_alt.xml
index b7dacc70f1..bb32bf8702 100644
--- a/dists/android/res/xml/qwerty_alt.xml
+++ b/dists/android/res/xml/qwerty_alt.xml
@@ -6,7 +6,7 @@
 	scummvm:verticalGap="0px"
 	scummvm:keyHeight="10%p">
 	<CustomRow>
-		<CustomKey scummvm:codes="8"  scummvm:keyLabel="1" scummvm:keyEdgeFlags="left" scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="8"  scummvm:keyLabel="1" scummvm:isRepeatable="true" scummvm:keyEdgeFlags="left"/>
 		<CustomKey scummvm:codes="9"  scummvm:keyLabel="2" scummvm:isRepeatable="true"/>
 		<CustomKey scummvm:codes="10" scummvm:keyLabel="3" scummvm:isRepeatable="true"/>
 		<CustomKey scummvm:codes="11" scummvm:keyLabel="4" scummvm:isRepeatable="true"/>
@@ -15,41 +15,44 @@
 		<CustomKey scummvm:codes="14" scummvm:keyLabel="7" scummvm:isRepeatable="true"/>
 		<CustomKey scummvm:codes="15" scummvm:keyLabel="8" scummvm:isRepeatable="true"/>
 		<CustomKey scummvm:codes="16" scummvm:keyLabel="9" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="7"  scummvm:keyLabel="0" scummvm:keyEdgeFlags="right" scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="7"  scummvm:keyLabel="0" scummvm:isRepeatable="true" scummvm:keyEdgeFlags="right"/>
 	</CustomRow>
 	<CustomRow>
-		<CustomKey scummvm:codes="111"  scummvm:keyLabel="Esc" scummvm:keyEdgeFlags="left" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="68"  scummvm:keyLabel="`" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="69"  scummvm:keyLabel="-" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="70"  scummvm:keyLabel="=" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="73"  scummvm:keyLabel="\\" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="124" scummvm:keyLabel="Ins" scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="111" scummvm:keyLabel="Esc"  scummvm:isRepeatable="true" scummvm:keyEdgeFlags="left"/>
+		<CustomKey scummvm:codes="68"  scummvm:keyLabel="`"    scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="69"  scummvm:keyLabel="-"    scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="70"  scummvm:keyLabel="="    scummvm:isRepeatable="true"/>
+		<!-- The "\" character is used as a special key to fix a bug with backspace usage,
+			so it's ignored in the input and thus we don't show it on the virtual keyboard either -->
+<!--		<CustomKey scummvm:codes="73"  scummvm:keyLabel="\\"   scummvm:isRepeatable="true"/>  -->
+		<CustomKey scummvm:codes="76"  scummvm:keyLabel="/"    scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="124" scummvm:keyLabel="Ins"  scummvm:isRepeatable="true"/>
 		<CustomKey scummvm:codes="92"  scummvm:keyLabel="PgUp" scummvm:isRepeatable="true"/>
 		<CustomKey scummvm:codes="122" scummvm:keyLabel="Home" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="19"  scummvm:keyLabel="↑" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="123" scummvm:keyLabel="End" scummvm:isRepeatable="true" scummvm:keyEdgeFlags="right" />
+		<CustomKey scummvm:codes="19"  scummvm:keyLabel="↑"    scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="123" scummvm:keyLabel="End"  scummvm:isRepeatable="true" scummvm:keyEdgeFlags="right" />
 	</CustomRow>
 	<CustomRow>
-		<CustomKey scummvm:codes="-1"  scummvm:keyLabel="!@#…" scummvm:keyEdgeFlags="left"/>
-		<CustomKey scummvm:codes="75"  scummvm:keyLabel="'" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="100075"  scummvm:keyLabel=""" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="61"  scummvm:keyLabel="Tab" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="115" scummvm:keyLabel="CapsLk" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="112" scummvm:keyLabel="Del" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="93"  scummvm:keyLabel="PgDn" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="21"  scummvm:keyLabel="←" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="20"  scummvm:keyLabel="↓" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="22"  scummvm:keyLabel="→" scummvm:keyEdgeFlags="right" scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="-1"     scummvm:keyLabel="!@#…"   scummvm:keyEdgeFlags="left"/>
+		<CustomKey scummvm:codes="75"     scummvm:keyLabel="'"      scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="100075" scummvm:keyLabel=""" scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="61"     scummvm:keyLabel="Tab"    scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="115"    scummvm:keyLabel="CapsLk" scummvm:isSticky="true" />
+		<CustomKey scummvm:codes="112"    scummvm:keyLabel="Del"    scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="93"     scummvm:keyLabel="PgDn"   scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="21"     scummvm:keyLabel="←"      scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="20"     scummvm:keyLabel="↓"      scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="22"     scummvm:keyLabel="→"      scummvm:isRepeatable="true" scummvm:keyEdgeFlags="right"/>
 	</CustomRow>
 	<CustomRow rowEdgeFlags="bottom">
 		<CustomKey scummvm:codes="-6"  scummvm:keyLabel="abc…"  scummvm:keyEdgeFlags="left"/>
 		<CustomKey scummvm:codes="59"  scummvm:keyLabel="Shift" scummvm:isSticky="true"/>
 		<CustomKey scummvm:codes="113" scummvm:keyLabel="Ctrl"  scummvm:isSticky="true"/>
-		<CustomKey scummvm:codes="117" scummvm:keyLabel="Meta"     scummvm:isSticky="true"/>
+		<CustomKey scummvm:codes="117" scummvm:keyLabel="Meta"  scummvm:isSticky="true"/>
 		<CustomKey scummvm:codes="57"  scummvm:keyLabel="Alt"   scummvm:isSticky="true"/>
 		<CustomKey scummvm:codes="58"  scummvm:keyLabel="Alt"   scummvm:isSticky="true"/>
-		<CustomKey scummvm:codes="118" scummvm:keyLabel="Meta"     scummvm:isSticky="true"/>
-		<CustomKey scummvm:codes="226" scummvm:keyLabel="Menu"   scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="118" scummvm:keyLabel="Meta"  scummvm:isSticky="true"/>
+		<CustomKey scummvm:codes="226" scummvm:keyLabel="Menu"  scummvm:isRepeatable="true"/>
 		<CustomKey scummvm:codes="114" scummvm:keyLabel="Ctrl"  scummvm:isSticky="true"/>
 		<CustomKey scummvm:codes="60"  scummvm:keyLabel="Shift" scummvm:isSticky="true"/>
 	</CustomRow>
diff --git a/dists/android/res/xml/qwerty_alt_shift.xml b/dists/android/res/xml/qwerty_alt_shift.xml
index eec092eeac..92d4149fa0 100644
--- a/dists/android/res/xml/qwerty_alt_shift.xml
+++ b/dists/android/res/xml/qwerty_alt_shift.xml
@@ -6,40 +6,40 @@
 	scummvm:verticalGap="0px"
 	scummvm:keyHeight="10%p">
 	<CustomRow>
-		<CustomKey scummvm:codes="100008" scummvm:keyLabel="!" scummvm:keyEdgeFlags="left" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="100009" scummvm:keyLabel="\@" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="100010" scummvm:keyLabel="#" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="100011" scummvm:keyLabel="$" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="100012" scummvm:keyLabel="%" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="100013" scummvm:keyLabel="^" scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="100008" scummvm:keyLabel="!"     scummvm:isRepeatable="true" scummvm:keyEdgeFlags="left"/>
+		<CustomKey scummvm:codes="100009" scummvm:keyLabel="\@"    scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="100010" scummvm:keyLabel="#"     scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="100011" scummvm:keyLabel="$"     scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="100012" scummvm:keyLabel="%"     scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="100013" scummvm:keyLabel="^"     scummvm:isRepeatable="true"/>
 		<CustomKey scummvm:codes="100014" scummvm:keyLabel="&" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="100015" scummvm:keyLabel="*" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="100016" scummvm:keyLabel="(" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="100007" scummvm:keyLabel=")" scummvm:keyEdgeFlags="right" scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="100015" scummvm:keyLabel="*"     scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="100016" scummvm:keyLabel="("     scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="100007" scummvm:keyLabel=")"     scummvm:isRepeatable="true" scummvm:keyEdgeFlags="right"/>
 	</CustomRow>
 	<CustomRow>
-		<CustomKey scummvm:codes="111"  scummvm:keyLabel="Esc" scummvm:keyEdgeFlags="left" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="100068"  scummvm:keyLabel="~" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="100069"  scummvm:keyLabel="_" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="100070"  scummvm:keyLabel="+" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="100073"  scummvm:keyLabel="|" scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="111"     scummvm:keyLabel="Esc"    scummvm:isRepeatable="true" scummvm:keyEdgeFlags="left"/>
+		<CustomKey scummvm:codes="100068"  scummvm:keyLabel="~"      scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="100069"  scummvm:keyLabel="_"      scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="100070"  scummvm:keyLabel="+"      scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="100073"  scummvm:keyLabel="|"      scummvm:isRepeatable="true"/>
 		<CustomKey scummvm:codes="100075"  scummvm:keyLabel=""" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="131" scummvm:keyLabel="F1" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="132" scummvm:keyLabel="F2" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="133" scummvm:keyLabel="F3" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="134" scummvm:keyLabel="F4" scummvm:isRepeatable="true" scummvm:keyEdgeFlags="right" />
+		<CustomKey scummvm:codes="131"     scummvm:keyLabel="F1"     scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="132"     scummvm:keyLabel="F2"     scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="133"     scummvm:keyLabel="F3"     scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="134"     scummvm:keyLabel="F4"     scummvm:isRepeatable="true" scummvm:keyEdgeFlags="right"/>
 	</CustomRow>
 	<CustomRow>
-		<CustomKey scummvm:codes="-1"  scummvm:keyLabel="123…" scummvm:keyEdgeFlags="left"/>
-		<CustomKey scummvm:codes="143" scummvm:keyLabel="NumLk" scummvm:isSticky="true"/>
-		<CustomKey scummvm:codes="120" scummvm:keyLabel="Print" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="116" scummvm:keyLabel="ScrollLk" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="121" scummvm:keyLabel="Pause" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="158" scummvm:keyLabel="Kp ." scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="135" scummvm:keyLabel="F5" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="136" scummvm:keyLabel="F6" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="137" scummvm:keyLabel="F7" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="138" scummvm:keyLabel="F8" scummvm:keyEdgeFlags="right" scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="-1"  scummvm:keyLabel="123…"     scummvm:keyEdgeFlags="left"/>
+		<CustomKey scummvm:codes="143" scummvm:keyLabel="NumLk"    scummvm:isSticky="true"/>
+		<CustomKey scummvm:codes="120" scummvm:keyLabel="Print"    scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="116" scummvm:keyLabel="ScrollLk" scummvm:isSticky="true"/>
+		<CustomKey scummvm:codes="121" scummvm:keyLabel="Pause"    scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="158" scummvm:keyLabel="Kp ."     scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="135" scummvm:keyLabel="F5"       scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="136" scummvm:keyLabel="F6"       scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="137" scummvm:keyLabel="F7"       scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="138" scummvm:keyLabel="F8"       scummvm:isRepeatable="true" scummvm:keyEdgeFlags="right"/>
 	</CustomRow>
 	<CustomRow rowEdgeFlags="bottom">
 		<CustomKey scummvm:codes="-6"  scummvm:keyLabel="abc…" scummvm:keyEdgeFlags="left"/>
@@ -48,9 +48,9 @@
 		<CustomKey scummvm:codes="156" scummvm:keyLabel="Kp -" scummvm:isRepeatable="true"/>
 		<CustomKey scummvm:codes="157" scummvm:keyLabel="Kp +" scummvm:isRepeatable="true"/>
 		<CustomKey scummvm:codes="160" scummvm:keyLabel="Kp ↵" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="139" scummvm:keyLabel="F9"  scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="140" scummvm:keyLabel="F10" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="141" scummvm:keyLabel="F11" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="142" scummvm:keyLabel="F12" scummvm:keyEdgeFlags="right" scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="139" scummvm:keyLabel="F9"   scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="140" scummvm:keyLabel="F10"  scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="141" scummvm:keyLabel="F11"  scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="142" scummvm:keyLabel="F12"  scummvm:isRepeatable="true" scummvm:keyEdgeFlags="right" />
 	</CustomRow>
 </CustomKeyboard>
diff --git a/dists/android/res/xml/qwerty_shift.xml b/dists/android/res/xml/qwerty_shift.xml
index 5a740437b8..77c4ea0329 100644
--- a/dists/android/res/xml/qwerty_shift.xml
+++ b/dists/android/res/xml/qwerty_shift.xml
@@ -6,7 +6,7 @@
 	scummvm:verticalGap="0px"
 	scummvm:keyHeight="10%p">
 	<CustomRow>
-		<CustomKey scummvm:codes="45" scummvm:keyLabel="Q" scummvm:keyEdgeFlags="left" scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="45" scummvm:keyLabel="Q" scummvm:isRepeatable="true" scummvm:keyEdgeFlags="left"/>
 		<CustomKey scummvm:codes="51" scummvm:keyLabel="W" scummvm:isRepeatable="true"/>
 		<CustomKey scummvm:codes="33" scummvm:keyLabel="E" scummvm:isRepeatable="true"/>
 		<CustomKey scummvm:codes="46" scummvm:keyLabel="R" scummvm:isRepeatable="true"/>
@@ -15,10 +15,10 @@
 		<CustomKey scummvm:codes="49" scummvm:keyLabel="U" scummvm:isRepeatable="true"/>
 		<CustomKey scummvm:codes="37" scummvm:keyLabel="I" scummvm:isRepeatable="true"/>
 		<CustomKey scummvm:codes="43" scummvm:keyLabel="O" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="44" scummvm:keyLabel="P" scummvm:keyEdgeFlags="right" scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="44" scummvm:keyLabel="P" scummvm:isRepeatable="true" scummvm:keyEdgeFlags="right"/>
 	</CustomRow>
 	<CustomRow>
-		<CustomKey scummvm:codes="29" scummvm:keyLabel="A" scummvm:keyEdgeFlags="left" scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="29" scummvm:keyLabel="A" scummvm:isRepeatable="true" scummvm:keyEdgeFlags="left"/>
 		<CustomKey scummvm:codes="47" scummvm:keyLabel="S" scummvm:isRepeatable="true"/>
 		<CustomKey scummvm:codes="32" scummvm:keyLabel="D" scummvm:isRepeatable="true"/>
 		<CustomKey scummvm:codes="34" scummvm:keyLabel="F" scummvm:isRepeatable="true"/>
@@ -27,7 +27,7 @@
 		<CustomKey scummvm:codes="38" scummvm:keyLabel="J" scummvm:isRepeatable="true"/>
 		<CustomKey scummvm:codes="39" scummvm:keyLabel="K" scummvm:isRepeatable="true"/>
 		<CustomKey scummvm:codes="40" scummvm:keyLabel="L" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="74" scummvm:keyLabel=":" scummvm:keyEdgeFlags="right" scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="74" scummvm:keyLabel=":" scummvm:isRepeatable="true" scummvm:keyEdgeFlags="right"/>
 	</CustomRow>
 	<CustomRow>
 		<CustomKey scummvm:codes="-1" scummvm:keyLabel="⇫" scummvm:keyEdgeFlags="left"/>
@@ -38,16 +38,16 @@
 		<CustomKey scummvm:codes="30" scummvm:keyLabel="B" scummvm:isRepeatable="true"/>
 		<CustomKey scummvm:codes="42" scummvm:keyLabel="N" scummvm:isRepeatable="true"/>
 		<CustomKey scummvm:codes="41" scummvm:keyLabel="M" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="67" scummvm:keyLabel="⬅" scummvm:keyWidth="20%p" scummvm:keyEdgeFlags="right" scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="67" scummvm:keyLabel="⬅" scummvm:isRepeatable="true" scummvm:keyWidth="20%p" scummvm:keyEdgeFlags="right"/>
 	</CustomRow>
 	<CustomRow rowEdgeFlags="bottom">
-		<CustomKey scummvm:codes="-6" scummvm:keyLabel="!@#…" scummvm:keyEdgeFlags="left"/>
-		<CustomKey scummvm:codes="71" scummvm:keyLabel="{" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="72" scummvm:keyLabel="}" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="76" scummvm:keyLabel="\?" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="62" scummvm:keyLabel="Space" scummvm:keyWidth="20%p" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="55" scummvm:keyLabel="<" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="56" scummvm:keyLabel=">" scummvm:isRepeatable="true"/>
-		<CustomKey scummvm:codes="66" scummvm:keyLabel="Enter" scummvm:keyWidth="20%p" scummvm:keyEdgeFlags="right" scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="-6" scummvm:keyLabel="!@#…"  scummvm:keyEdgeFlags="left"/>
+		<CustomKey scummvm:codes="71" scummvm:keyLabel="{"     scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="72" scummvm:keyLabel="}"     scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="76" scummvm:keyLabel="\?"    scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="62" scummvm:keyLabel="Space" scummvm:isRepeatable="true" scummvm:keyWidth="20%p"/>
+		<CustomKey scummvm:codes="55" scummvm:keyLabel="<"  scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="56" scummvm:keyLabel=">"  scummvm:isRepeatable="true"/>
+		<CustomKey scummvm:codes="66" scummvm:keyLabel="Enter" scummvm:isRepeatable="true" scummvm:keyWidth="20%p" scummvm:keyEdgeFlags="right"/>
 	</CustomRow>
 </CustomKeyboard>




More information about the Scummvm-git-logs mailing list