aboutsummaryrefslogtreecommitdiffstats
path: root/android/main.c
diff options
context:
space:
mode:
authorDavid 'Digit' Turner <digit@android.com>2011-05-19 20:51:01 +0200
committerDavid 'Digit' Turner <digit@android.com>2011-07-07 00:57:08 +0200
commitc803400d45535925fb35c373e2d610fde522c546 (patch)
tree9828bdc85e8a86b1f94a10a4291c2d3d70abfff9 /android/main.c
parentd02b30ee5bfc925dd8e031c193c17672e500fd18 (diff)
downloadexternal_qemu-c803400d45535925fb35c373e2d610fde522c546.zip
external_qemu-c803400d45535925fb35c373e2d610fde522c546.tar.gz
external_qemu-c803400d45535925fb35c373e2d610fde522c546.tar.bz2
Move charmap to hardware properties
The name of the emulated charmap must be passed to the guest kernel because it is used by the guest input handling code to load the proper charmap files from the system partition. This mandates that the name becomes a hardware property for the sake of supporting proper snapshotting and ui/core separation. From now on, the charmap name found in a skin will be ignored completely. This shouldn't be a problem in practice because all skins used the default name (qwerty2) anyway. The only reason to change the default value would be if emulating a guest system image that depends on a different charmap during emulation. Change-Id: If571684000b159ae9e9849661c9ff18e19b4cc75
Diffstat (limited to 'android/main.c')
-rw-r--r--android/main.c25
1 files changed, 23 insertions, 2 deletions
diff --git a/android/main.c b/android/main.c
index 29fc079..cd3fd08 100644
--- a/android/main.c
+++ b/android/main.c
@@ -1032,9 +1032,30 @@ int main(int argc, char **argv)
args[n++] = opts->http_proxy;
}
+ if (!opts->charmap) {
+ /* Try to find a valid charmap name */
+ char* charmap = avdInfo_getCharmapFile(avd, hw->hw_keyboard_charmap);
+ if (charmap != NULL) {
+ D("autoconfig: -charmap %s", charmap);
+ opts->charmap = charmap;
+ }
+ }
+
if (opts->charmap) {
- args[n++] = "-charmap";
- args[n++] = opts->charmap;
+ char charmap_name[AKEYCHARMAP_NAME_SIZE];
+
+ if (!path_exists(opts->charmap)) {
+ derror("Charmap file does not exist: %s", opts->charmap);
+ exit(1);
+ }
+ /* We need to store the charmap name in the hardware configuration.
+ * However, the charmap file itself is only used by the UI component
+ * and doesn't need to be set to the emulation engine.
+ */
+ kcm_extract_charmap_name(opts->charmap, charmap_name,
+ sizeof(charmap_name));
+ AFREE(hw->hw_keyboard_charmap);
+ hw->hw_keyboard_charmap = ASTRDUP(charmap_name);
}
if (opts->memcheck) {