Improve handling of certain keyboard layout properties.

Automatically choose a default value for the 'number' property
based on the characters that the key can generate.

Don't generate any character when ctrl, alt or meta is
pressed unless the behavior exactly matches the modifier keys
that are pressed.

Simplified the basic keyboard layouts taking into account the
new features.

Bug: 6110399
Change-Id: Ibc0f0b50c2dcf3f962a33ac77c24d2993b77637d
diff --git a/data/keyboards/Generic.kcm b/data/keyboards/Generic.kcm
index b5f6897..544076f 100644
--- a/data/keyboards/Generic.kcm
+++ b/data/keyboards/Generic.kcm
@@ -28,14 +28,12 @@
     label:                              'A'
     base:                               'a'
     shift, capslock:                    'A'
-    ctrl, alt, meta:                    none
 }
 
 key B {
     label:                              'B'
     base:                               'b'
     shift, capslock:                    'B'
-    ctrl, alt, meta:                    none
 }
 
 key C {
@@ -44,14 +42,12 @@
     shift, capslock:                    'C'
     alt:                                '\u00e7'
     shift+alt:                          '\u00c7'
-    ctrl, meta:                         none
 }
 
 key D {
     label:                              'D'
     base:                               'd'
     shift, capslock:                    'D'
-    ctrl, alt, meta:                    none
 }
 
 key E {
@@ -59,28 +55,24 @@
     base:                               'e'
     shift, capslock:                    'E'
     alt:                                '\u0301'
-    ctrl, meta:                         none
 }
 
 key F {
     label:                              'F'
     base:                               'f'
     shift, capslock:                    'F'
-    ctrl, alt, meta:                    none
 }
 
 key G {
     label:                              'G'
     base:                               'g'
     shift, capslock:                    'G'
-    ctrl, alt, meta:                    none
 }
 
 key H {
     label:                              'H'
     base:                               'h'
     shift, capslock:                    'H'
-    ctrl, alt, meta:                    none
 }
 
 key I {
@@ -88,35 +80,30 @@
     base:                               'i'
     shift, capslock:                    'I'
     alt:                                '\u0302'
-    ctrl, meta:                         none
 }
 
 key J {
     label:                              'J'
     base:                               'j'
     shift, capslock:                    'J'
-    ctrl, alt, meta:                    none
 }
 
 key K {
     label:                              'K'
     base:                               'k'
     shift, capslock:                    'K'
-    ctrl, alt, meta:                    none
 }
 
 key L {
     label:                              'L'
     base:                               'l'
     shift, capslock:                    'L'
-    ctrl, alt, meta:                    none
 }
 
 key M {
     label:                              'M'
     base:                               'm'
     shift, capslock:                    'M'
-    ctrl, alt, meta:                    none
 }
 
 key N {
@@ -124,35 +111,30 @@
     base:                               'n'
     shift, capslock:                    'N'
     alt:                                '\u0303'
-    ctrl, meta:                         none
 }
 
 key O {
     label:                              'O'
     base:                               'o'
     shift, capslock:                    'O'
-    ctrl, alt, meta:                    none
 }
 
 key P {
     label:                              'P'
     base:                               'p'
     shift, capslock:                    'P'
-    ctrl, alt, meta:                    none
 }
 
 key Q {
     label:                              'Q'
     base:                               'q'
     shift, capslock:                    'Q'
-    ctrl, alt, meta:                    none
 }
 
 key R {
     label:                              'R'
     base:                               'r'
     shift, capslock:                    'R'
-    ctrl, alt, meta:                    none
 }
 
 key S {
@@ -160,14 +142,12 @@
     base:                               's'
     shift, capslock:                    'S'
     alt:                                '\u00df'
-    ctrl, meta:                         none
 }
 
 key T {
     label:                              'T'
     base:                               't'
     shift, capslock:                    'T'
-    ctrl, alt, meta:                    none
 }
 
 key U {
@@ -175,338 +155,289 @@
     base:                               'u'
     shift, capslock:                    'U'
     alt:                                '\u0308'
-    ctrl, meta:                         none
 }
 
 key V {
     label:                              'V'
     base:                               'v'
     shift, capslock:                    'V'
-    ctrl, alt, meta:                    none
 }
 
 key W {
     label:                              'W'
     base:                               'w'
     shift, capslock:                    'W'
-    ctrl, alt, meta:                    none
 }
 
 key X {
     label:                              'X'
     base:                               'x'
     shift, capslock:                    'X'
-    ctrl, alt, meta:                    none
 }
 
 key Y {
     label:                              'Y'
     base:                               'y'
     shift, capslock:                    'Y'
-    ctrl, alt, meta:                    none
 }
 
 key Z {
     label:                              'Z'
     base:                               'z'
     shift, capslock:                    'Z'
-    ctrl, alt, meta:                    none
 }
 
 key 0 {
-    label, number:                      '0'
+    label:                              '0'
     base:                               '0'
     shift:                              ')'
-    ctrl, alt, meta:                    none
 }
 
 key 1 {
-    label, number:                      '1'
+    label:                              '1'
     base:                               '1'
     shift:                              '!'
-    ctrl, alt, meta:                    none
 }
 
 key 2 {
-    label, number:                      '2'
+    label:                              '2'
     base:                               '2'
     shift:                              '@'
-    ctrl, alt, meta:                    none
 }
 
 key 3 {
-    label, number:                      '3'
+    label:                              '3'
     base:                               '3'
     shift:                              '#'
-    ctrl, alt, meta:                    none
 }
 
 key 4 {
-    label, number:                      '4'
+    label:                              '4'
     base:                               '4'
     shift:                              '$'
-    ctrl, alt, meta:                    none
 }
 
 key 5 {
-    label, number:                      '5'
+    label:                              '5'
     base:                               '5'
     shift:                              '%'
-    ctrl, alt, meta:                    none
 }
 
 key 6 {
-    label, number:                      '6'
+    label:                              '6'
     base:                               '6'
     shift:                              '^'
-    ctrl, alt, meta:                    none
     alt+shift:                          '\u0302'
 }
 
 key 7 {
-    label, number:                      '7'
+    label:                              '7'
     base:                               '7'
     shift:                              '&'
-    ctrl, alt, meta:                    none
 }
 
 key 8 {
-    label, number:                      '8'
+    label:                              '8'
     base:                               '8'
     shift:                              '*'
-    ctrl, alt, meta:                    none
 }
 
 key 9 {
-    label, number:                      '9'
+    label:                              '9'
     base:                               '9'
     shift:                              '('
-    ctrl, alt, meta:                    none
 }
 
 key SPACE {
     label:                              ' '
     base:                               ' '
-    ctrl:                               none
     alt, meta:                          fallback SEARCH
 }
 
 key ENTER {
     label:                              '\n'
     base:                               '\n'
-    ctrl, alt, meta:                    none
 }
 
 key TAB {
     label:                              '\t'
     base:                               '\t'
-    ctrl, alt, meta:                    none
 }
 
 key COMMA {
-    label, number:                      ','
+    label:                              ','
     base:                               ','
     shift:                              '<'
-    ctrl, alt, meta:                    none
 }
 
 key PERIOD {
-    label, number:                      '.'
+    label:                              '.'
     base:                               '.'
     shift:                              '>'
-    ctrl, alt, meta:                    none
 }
 
 key SLASH {
-    label, number:                      '/'
+    label:                              '/'
     base:                               '/'
     shift:                              '?'
-    ctrl, alt, meta:                    none
 }
 
 key GRAVE {
-    label, number:                      '`'
+    label:                              '`'
     base:                               '`'
     shift:                              '~'
     alt:                                '\u0300'
     alt+shift:                          '\u0303'
-    ctrl, meta:                         none
 }
 
 key MINUS {
-    label, number:                      '-'
+    label:                              '-'
     base:                               '-'
     shift:                              '_'
-    ctrl, alt, meta:                    none
 }
 
 key EQUALS {
-    label, number:                      '='
+    label:                              '='
     base:                               '='
     shift:                              '+'
-    ctrl, alt, meta:                    none
 }
 
 key LEFT_BRACKET {
-    label, number:                      '['
+    label:                              '['
     base:                               '['
     shift:                              '{'
-    ctrl, alt, meta:                    none
 }
 
 key RIGHT_BRACKET {
-    label, number:                      ']'
+    label:                              ']'
     base:                               ']'
     shift:                              '}'
-    ctrl, alt, meta:                    none
 }
 
 key BACKSLASH {
-    label, number:                      '\\'
+    label:                              '\\'
     base:                               '\\'
     shift:                              '|'
-    ctrl, alt, meta:                    none
 }
 
 key SEMICOLON {
-    label, number:                      ';'
+    label:                              ';'
     base:                               ';'
     shift:                              ':'
-    ctrl, alt, meta:                    none
 }
 
 key APOSTROPHE {
-    label, number:                      '\''
+    label:                              '\''
     base:                               '\''
     shift:                              '"'
-    ctrl, alt, meta:                    none
 }
 
 ### Numeric keypad ###
 
 key NUMPAD_0 {
-    label, number:                      '0'
+    label:                              '0'
     base:                               fallback INSERT
     numlock:                            '0'
-    ctrl, alt, meta:                    none
 }
 
 key NUMPAD_1 {
-    label, number:                      '1'
+    label:                              '1'
     base:                               fallback MOVE_END
     numlock:                            '1'
-    ctrl, alt, meta:                    none
 }
 
 key NUMPAD_2 {
-    label, number:                      '2'
+    label:                              '2'
     base:                               fallback DPAD_DOWN
     numlock:                            '2'
-    ctrl, alt, meta:                    none
 }
 
 key NUMPAD_3 {
-    label, number:                      '3'
+    label:                              '3'
     base:                               fallback PAGE_DOWN
     numlock:                            '3'
-    ctrl, alt, meta:                    none
 }
 
 key NUMPAD_4 {
-    label, number:                      '4'
+    label:                              '4'
     base:                               fallback DPAD_LEFT
     numlock:                            '4'
-    ctrl, alt, meta:                    none
 }
 
 key NUMPAD_5 {
-    label, number:                      '5'
+    label:                              '5'
     base:                               fallback DPAD_CENTER
     numlock:                            '5'
-    ctrl, alt, meta:                    none
 }
 
 key NUMPAD_6 {
-    label, number:                      '6'
+    label:                              '6'
     base:                               fallback DPAD_RIGHT
     numlock:                            '6'
-    ctrl, alt, meta:                    none
 }
 
 key NUMPAD_7 {
-    label, number:                      '7'
+    label:                              '7'
     base:                               fallback MOVE_HOME
     numlock:                            '7'
-    ctrl, alt, meta:                    none
 }
 
 key NUMPAD_8 {
-    label, number:                      '8'
+    label:                              '8'
     base:                               fallback DPAD_UP
     numlock:                            '8'
-    ctrl, alt, meta:                    none
 }
 
 key NUMPAD_9 {
-    label, number:                      '9'
+    label:                              '9'
     base:                               fallback PAGE_UP
     numlock:                            '9'
-    ctrl, alt, meta:                    none
 }
 
 key NUMPAD_LEFT_PAREN {
-    label, number:                      '('
+    label:                              '('
     base:                               '('
-    ctrl, alt, meta:                    none
 }
 
 key NUMPAD_RIGHT_PAREN {
-    label, number:                      ')'
+    label:                              ')'
     base:                               ')'
-    ctrl, alt, meta:                    none
 }
 
 key NUMPAD_DIVIDE {
-    label, number:                      '/'
+    label:                              '/'
     base:                               '/'
-    ctrl, alt, meta:                    none
 }
 
 key NUMPAD_MULTIPLY {
-    label, number:                      '*'
+    label:                              '*'
     base:                               '*'
-    ctrl, alt, meta:                    none
 }
 
 key NUMPAD_SUBTRACT {
-    label, number:                      '-'
+    label:                              '-'
     base:                               '-'
-    ctrl, alt, meta:                    none
 }
 
 key NUMPAD_ADD {
-    label, number:                      '+'
+    label:                              '+'
     base:                               '+'
-    ctrl, alt, meta:                    none
 }
 
 key NUMPAD_DOT {
-    label, number:                      '.'
+    label:                              '.'
     base:                               fallback FORWARD_DEL
     numlock:                            '.'
-    ctrl, alt, meta:                    none
 }
 
 key NUMPAD_COMMA {
-    label, number:                      ','
+    label:                              ','
     base:                               ','
-    ctrl, alt, meta:                    none
 }
 
 key NUMPAD_EQUALS {
-    label, number:                      '='
+    label:                              '='
     base:                               '='
-    ctrl, alt, meta:                    none
 }
 
 key NUMPAD_ENTER {
@@ -518,22 +449,22 @@
 ### Special keys on phones ###
 
 key AT {
-    label, number:                      '@'
+    label:                              '@'
     base:                               '@'
 }
 
 key STAR {
-    label, number:                      '*'
+    label:                              '*'
     base:                               '*'
 }
 
 key POUND {
-    label, number:                      '#'
+    label:                              '#'
     base:                               '#'
 }
 
 key PLUS {
-    label, number:                      '+'
+    label:                              '+'
     base:                               '+'
 }