From e5648a82a3f01fab0fcac066bb1129cd33893515 Mon Sep 17 00:00:00 2001 From: David Boddie Date: Sun, 14 Jul 2019 00:09:22 +0200 Subject: [PATCH 01/13] Remove explicit keycodes in XML, auto-generate them instead This makes it easier to keep the geometry and symbols files in sync. --- data/keyboards/geometry/compact.xml | 66 +++++------ data/keyboards/symbols/us.xml | 172 ++++++---------------------- eek/eek-keyboard.c | 36 +++--- eek/eek-keyboard.h | 12 +- eek/eek-section.c | 9 +- eek/eek-section.h | 6 +- eek/eek-xml-layout.c | 33 +++--- 7 files changed, 119 insertions(+), 215 deletions(-) diff --git a/data/keyboards/geometry/compact.xml b/data/keyboards/geometry/compact.xml index 128e047c..f8dc5afe 100644 --- a/data/keyboards/geometry/compact.xml +++ b/data/keyboards/geometry/compact.xml @@ -3,51 +3,51 @@
- - - - - - - - - - + + + + + + + + + +
- - - - - - - - - + + + + + + + + +
- - - - - - - - - + + + + + + + + +
- - - - - + + + + +
diff --git a/data/keyboards/symbols/us.xml b/data/keyboards/symbols/us.xml index db6ef5f1..66d8f0ba 100644 --- a/data/keyboards/symbols/us.xml +++ b/data/keyboards/symbols/us.xml @@ -1,276 +1,180 @@ - - Escape - - - F1 - - - F2 - - - F3 - - - F4 - - - F5 - - - F6 - - - F7 - - - F8 - - - F9 - - - F10 - - - F11 - - - F12 - - - backspace - - - Tab - ISO_Left_Tab - - + q Q 1 asciitilde - + w W 2 quoteleft - + e E 3 bar - + r R 4 middledot - + t T 5 - + y Y 6 - + u U 7 - + i I 8 - + o O 9 - + p P 0 - - bracketleft - braceleft - - - bracketright - braceright - - - backslash - bar - - - show-numbers - show-numbers - show-letters - show-letters - - + a A at copyright - + s S numbersign registeredtrademark - + d D dollar poundsign - + f F percent - + g G ampersand yensign - + h H minus asciicircum - + j J plus degreesign - + k K parenleft braceleft - + l L parenright braceright - - semicolon - colon - - - quoteright - quotedbl - - + Return - + Shift_L Shift_L Shift_L Shift_L - + z Z comma backslash - + x X quotedbl slash - + c C quoteright less - + v V colon greater - + b B semicolon equal - + n N exclam bracketleft - + m M question bracketright - - comma - less - - + period - - slash - question + + show-numbers + show-numbers + show-letters + show-letters - - Shift_R - - - cycle-keyboard - - + preferences - - Control_L - - - Alt_L - Meta_L - - + space - - Left - - - Up - - - Down - - - Right + + backspace diff --git a/eek/eek-keyboard.c b/eek/eek-keyboard.c index dfe03662..4a7229c0 100644 --- a/eek/eek-keyboard.c +++ b/eek/eek-keyboard.c @@ -74,7 +74,7 @@ struct _EekKeyboardPrivate GList *pressed_keys; GList *locked_keys; GArray *outline_array; - GHashTable *keycodes; + GHashTable *names; /* modifiers dynamically assigned at run time */ EekModifierType num_lock_mask; @@ -129,9 +129,9 @@ section_child_added_cb (EekContainer *container, EekElement *element, EekKeyboard *keyboard) { - guint keycode = eek_key_get_keycode (EEK_KEY(element)); - g_hash_table_insert (keyboard->priv->keycodes, - GUINT_TO_POINTER(keycode), + const gchar *name = eek_element_get_name(element); + g_hash_table_insert (keyboard->priv->names, + (gpointer)name, element); } @@ -140,9 +140,9 @@ section_child_removed_cb (EekContainer *container, EekElement *element, EekKeyboard *keyboard) { - guint keycode = eek_key_get_keycode (EEK_KEY(element)); - g_hash_table_remove (keyboard->priv->keycodes, - GUINT_TO_POINTER(keycode)); + const gchar *name = eek_element_get_name(element); + g_hash_table_remove (keyboard->priv->names, + name); } static EekSection * @@ -221,7 +221,7 @@ set_level_from_modifiers (EekKeyboard *self, EekKey *key) gint level = priv->old_level & 2; /* Handle non-emitting keys */ - if (key && (eek_key_get_keycode(key) == 0)) { + if (key) { const gchar *name = eek_element_get_name(EEK_ELEMENT(key)); if (g_strcmp0(name, "ABC123") == 0) level ^= 2; @@ -400,7 +400,7 @@ eek_keyboard_finalize (GObject *object) g_list_free_full (priv->locked_keys, (GDestroyNotify) eek_modifier_key_free); - g_hash_table_destroy (priv->keycodes); + g_hash_table_destroy (priv->names); for (i = 0; i < priv->outline_array->len; i++) { EekOutline *outline = &g_array_index (priv->outline_array, @@ -528,7 +528,7 @@ eek_keyboard_init (EekKeyboard *self) self->priv = EEK_KEYBOARD_GET_PRIVATE(self); self->priv->modifier_behavior = EEK_MODIFIER_BEHAVIOR_NONE; self->priv->outline_array = g_array_new (FALSE, TRUE, sizeof (EekOutline)); - self->priv->keycodes = g_hash_table_new (g_direct_hash, g_direct_equal); + self->priv->names = g_hash_table_new (g_str_hash, g_str_equal); eek_element_set_symbol_index (EEK_ELEMENT(self), 0, 0); } @@ -548,20 +548,20 @@ eek_keyboard_create_section (EekKeyboard *keyboard) } /** - * eek_keyboard_find_key_by_keycode: + * eek_keyboard_find_key_by_name: * @keyboard: an #EekKeyboard - * @keycode: a keycode + * @name: a key name * - * Find an #EekKey whose keycode is @keycode. - * Return value: (transfer none): #EekKey whose keycode is @keycode + * Find an #EekKey whose name is @name. + * Return value: (transfer none): #EekKey whose name is @name */ EekKey * -eek_keyboard_find_key_by_keycode (EekKeyboard *keyboard, - guint keycode) +eek_keyboard_find_key_by_name (EekKeyboard *keyboard, + const gchar *name) { g_return_val_if_fail (EEK_IS_KEYBOARD(keyboard), NULL); - return g_hash_table_lookup (keyboard->priv->keycodes, - GUINT_TO_POINTER(keycode)); + return g_hash_table_lookup (keyboard->priv->names, + name); } /** diff --git a/eek/eek-keyboard.h b/eek/eek-keyboard.h index afe72c27..9091282e 100644 --- a/eek/eek-keyboard.h +++ b/eek/eek-keyboard.h @@ -69,8 +69,8 @@ struct _EekKeyboard /** * EekKeyboardClass: * @create_section: virtual function for creating a section - * @find_key_by_keycode: virtual function for finding a key in the - * keyboard by keycode + * @find_key_by_name: virtual function for finding a key in the + * keyboard by name * @key_pressed: class handler for #EekKeyboard::key-pressed signal * @key_released: class handler for #EekKeyboard::key-released signal * @key_locked: class handler for #EekKeyboard::key-locked signal @@ -89,8 +89,8 @@ struct _EekKeyboardClass /*< public >*/ EekSection *(* create_section) (EekKeyboard *self); - EekKey *(* find_key_by_keycode) (EekKeyboard *self, - guint keycode); + EekKey *(* find_key_by_name) (EekKeyboard *self, + const gchar *name); /*< private >*/ /* obsolete members moved to EekElement */ @@ -155,9 +155,9 @@ EekModifierType eek_keyboard_get_modifiers EekSection *eek_keyboard_create_section (EekKeyboard *keyboard); -EekKey *eek_keyboard_find_key_by_keycode +EekKey *eek_keyboard_find_key_by_name (EekKeyboard *keyboard, - guint keycode); + const gchar *name); guint eek_keyboard_add_outline (EekKeyboard *keyboard, diff --git a/eek/eek-section.c b/eek/eek-section.c index 5a04619c..4743bfed 100644 --- a/eek/eek-section.c +++ b/eek/eek-section.c @@ -124,7 +124,8 @@ on_unlocked (EekKey *key, static EekKey * eek_section_real_create_key (EekSection *self, - guint keycode, + const gchar *name, + gint keycode, gint column_index, gint row_index) { @@ -142,6 +143,7 @@ eek_section_real_create_key (EekSection *self, row->num_columns = column_index + 1; key = g_object_new (EEK_TYPE_KEY, + "name", name, "keycode", keycode, "column", column_index, "row", row_index, @@ -463,6 +465,7 @@ eek_section_get_row (EekSection *section, /** * eek_section_create_key: * @section: an #EekSection + * @name: a name * @keycode: a keycode * @column: the column index of the key * @row: the row index of the key @@ -473,12 +476,14 @@ eek_section_get_row (EekSection *section, */ EekKey * eek_section_create_key (EekSection *section, - guint keycode, + const gchar *name, + gint keycode, gint column, gint row) { g_return_val_if_fail (EEK_IS_SECTION(section), NULL); return EEK_SECTION_GET_CLASS(section)->create_key (section, + name, keycode, column, row); diff --git a/eek/eek-section.h b/eek/eek-section.h index f4335ade..50baac80 100644 --- a/eek/eek-section.h +++ b/eek/eek-section.h @@ -62,7 +62,8 @@ struct _EekSectionClass EekOrientation *orientation); EekKey *(* create_key) (EekSection *self, - guint keycode, + const gchar *name, + gint keycode, gint row, gint column); @@ -99,7 +100,8 @@ void eek_section_get_row (EekSection *section, EekOrientation *orientation); EekKey *eek_section_create_key (EekSection *section, - guint keycode, + const gchar *name, + gint keycode, gint column, gint row); diff --git a/eek/eek-xml-layout.c b/eek/eek-xml-layout.c index 158b58bf..0c4edc8a 100644 --- a/eek/eek-xml-layout.c +++ b/eek/eek-xml-layout.c @@ -249,6 +249,7 @@ struct _GeometryParseData { gchar *name; EekOutline outline; gchar *oref; + gint keycode; GHashTable *key_oref_hash; GHashTable *oref_outline_hash; @@ -271,6 +272,7 @@ geometry_parse_data_new (EekKeyboard *keyboard) g_str_equal, g_free, (GDestroyNotify)eek_outline_free); + data->keycode = 1; return data; } @@ -396,29 +398,23 @@ geometry_start_element_callback (GMarkupParseContext *pcontext, } if (g_strcmp0 (element_name, "key") == 0) { - guint keycode; attribute = get_attribute (attribute_names, attribute_values, - "keycode"); + "name"); if (attribute == NULL) { g_set_error (error, G_MARKUP_ERROR, G_MARKUP_ERROR_MISSING_ATTRIBUTE, - "no \"keycode\" attribute for \"key\""); + "no \"name\" attribute for \"key\""); return; } - keycode = strtoul (attribute, NULL, 10); data->key = eek_section_create_key (data->section, - keycode, + g_strdup (attribute), + data->keycode++, data->num_columns, data->num_rows - 1); - attribute = get_attribute (attribute_names, attribute_values, - "name"); - if (attribute != NULL) - eek_element_set_name (EEK_ELEMENT(data->key), attribute); - attribute = get_attribute (attribute_names, attribute_values, "oref"); if (attribute == NULL) { @@ -622,28 +618,25 @@ symbols_start_element_callback (GMarkupParseContext *pcontext, return; if (g_strcmp0 (element_name, "key") == 0) { - guint keycode; attribute = get_attribute (attribute_names, attribute_values, - "keycode"); + "name"); if (attribute == NULL) { g_set_error (error, G_MARKUP_ERROR, G_MARKUP_ERROR_MISSING_ATTRIBUTE, - "no \"keycode\" attribute for \"key\""); + "no \"name\" attribute for \"key\""); return; } - keycode = strtoul (attribute, NULL, 10); - data->key = eek_keyboard_find_key_by_keycode (data->keyboard, - keycode); - /*if (data->key == NULL) { + data->key = eek_keyboard_find_key_by_name (data->keyboard, + attribute); + if (data->key == NULL) { g_set_error (error, G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT, - "no such keycode %u", keycode); - return; - }*/ + "no such key %s", attribute); + } attribute = get_attribute (attribute_names, attribute_values, "groups"); From fbdc5f4a93ac2780def1130451a73c3e51d257b0 Mon Sep 17 00:00:00 2001 From: David Boddie Date: Sun, 14 Jul 2019 19:16:34 +0200 Subject: [PATCH 02/13] Stash for sharing --- data/keyboards/geometry/extended.xml | 123 +++++++++++++++++ data/keyboards/keyboards.xml | 3 + data/keyboards/symbols/nb.xml | 192 +++++++++++++++++++++++++++ data/squeekboard.gresources.xml | 2 + eek/eek-xml-layout.c | 16 ++- eekboard/eekboard-context-service.c | 2 + 6 files changed, 335 insertions(+), 3 deletions(-) create mode 100644 data/keyboards/geometry/extended.xml create mode 100644 data/keyboards/symbols/nb.xml diff --git a/data/keyboards/geometry/extended.xml b/data/keyboards/geometry/extended.xml new file mode 100644 index 00000000..c73217e0 --- /dev/null +++ b/data/keyboards/geometry/extended.xml @@ -0,0 +1,123 @@ + + + + +
+ + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + +
+
+ + + + + + + + + + + +
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/data/keyboards/keyboards.xml b/data/keyboards/keyboards.xml index 8b71cb48..87ad1843 100644 --- a/data/keyboards/keyboards.xml +++ b/data/keyboards/keyboards.xml @@ -24,6 +24,9 @@ + diff --git a/data/keyboards/symbols/nb.xml b/data/keyboards/symbols/nb.xml new file mode 100644 index 00000000..8915bde1 --- /dev/null +++ b/data/keyboards/symbols/nb.xml @@ -0,0 +1,192 @@ + + + + q + Q + 1 + asciitilde + + + w + W + 2 + quoteleft + + + e + E + 3 + bar + + + r + R + 4 + middledot + + + t + T + 5 + + + y + Y + 6 + + + u + U + 7 + + + i + I + 8 + + + o + O + 9 + + + p + P + 0 + + + å + Å + + + a + A + at + copyright + + + s + S + numbersign + registeredtrademark + + + d + D + dollar + poundsign + + + f + F + percent + + + + g + G + ampersand + yensign + + + h + H + minus + asciicircum + + + j + J + plus + degreesign + + + k + K + parenleft + braceleft + + + l + L + parenright + braceright + + + oslash + Oslash + + + ae + AE + + + Return + + + Shift_L + Shift_L + Shift_L + Shift_L + + + z + Z + comma + backslash + + + x + X + quotedbl + slash + + + c + C + quoteright + less + + + v + V + colon + greater + + + b + B + semicolon + equal + + + n + N + exclam + bracketleft + + + m + M + question + bracketright + + + period + + + show-numbers + show-numbers + show-letters + show-letters + + + preferences + + + space + + + backspace + + diff --git a/data/squeekboard.gresources.xml b/data/squeekboard.gresources.xml index 673c1033..c5faaa70 100644 --- a/data/squeekboard.gresources.xml +++ b/data/squeekboard.gresources.xml @@ -3,6 +3,7 @@ style.css keyboards/geometry/compact.xml + keyboards/geometry/extended.xml keyboards/keyboards.xml keyboards/symbols/ar.xml keyboards/symbols/as-inscript.xml @@ -21,6 +22,7 @@ keyboards/symbols/ml-inscript.xml keyboards/symbols/mr-inscript.xml keyboards/symbols/my.xml + keyboards/symbols/nb.xml keyboards/symbols/or-inscript.xml keyboards/symbols/pa-inscript.xml keyboards/symbols/ru.xml diff --git a/eek/eek-xml-layout.c b/eek/eek-xml-layout.c index 0c4edc8a..9fccb4ab 100644 --- a/eek/eek-xml-layout.c +++ b/eek/eek-xml-layout.c @@ -249,7 +249,6 @@ struct _GeometryParseData { gchar *name; EekOutline outline; gchar *oref; - gint keycode; GHashTable *key_oref_hash; GHashTable *oref_outline_hash; @@ -272,7 +271,6 @@ geometry_parse_data_new (EekKeyboard *keyboard) g_str_equal, g_free, (GDestroyNotify)eek_outline_free); - data->keycode = 1; return data; } @@ -398,6 +396,18 @@ geometry_start_element_callback (GMarkupParseContext *pcontext, } if (g_strcmp0 (element_name, "key") == 0) { + guint keycode; + + attribute = get_attribute (attribute_names, attribute_values, + "keycode"); + if (attribute == NULL) { + g_set_error (error, + G_MARKUP_ERROR, + G_MARKUP_ERROR_MISSING_ATTRIBUTE, + "no \"keycode\" attribute for \"key\""); + return; + } + keycode = strtol (attribute, NULL, 10); attribute = get_attribute (attribute_names, attribute_values, "name"); @@ -411,7 +421,7 @@ geometry_start_element_callback (GMarkupParseContext *pcontext, data->key = eek_section_create_key (data->section, g_strdup (attribute), - data->keycode++, + keycode, data->num_columns, data->num_rows - 1); diff --git a/eekboard/eekboard-context-service.c b/eekboard/eekboard-context-service.c index 1b298223..9fc0787c 100644 --- a/eekboard/eekboard-context-service.c +++ b/eekboard/eekboard-context-service.c @@ -156,6 +156,7 @@ eekboard_context_service_real_create_keyboard (EekboardContextService *self, } keyboard->keymap = keymap; char *keymap_str = xkb_keymap_get_as_string(keymap, XKB_KEYMAP_FORMAT_TEXT_V1); + g_debug("%s", keymap_str); keyboard->keymap_len = strlen(keymap_str) + 1; g_autofree char *path = strdup("/eek_keymap-XXXXXX"); char *r = &path[strlen(path) - 6]; @@ -293,6 +294,7 @@ settings_update_layout(EekboardContextService *context) { g_autofree gchar *keyboard_type = NULL; g_autofree gchar *keyboard_layout = NULL; settings_get_layout(context->priv->settings, &keyboard_type, &keyboard_layout); + g_debug("type=%s, layout=%s", keyboard_type, keyboard_layout); if (!keyboard_type) { keyboard_type = g_strdup("us"); From 839968dc846a7ee86d1bba83b8fec504043d6e2d Mon Sep 17 00:00:00 2001 From: David Boddie Date: Sun, 14 Jul 2019 20:40:26 +0000 Subject: [PATCH 03/13] Try using a custom keymap --- eekboard/eekboard-context-service.c | 7 +- eekboard/keymap.h | 281 ++++++++++++++++++++++++++++ 2 files changed, 285 insertions(+), 3 deletions(-) diff --git a/eekboard/eekboard-context-service.c b/eekboard/eekboard-context-service.c index 9fc0787c..67c8b2d7 100644 --- a/eekboard/eekboard-context-service.c +++ b/eekboard/eekboard-context-service.c @@ -30,6 +30,7 @@ #endif /* HAVE_CONFIG_H */ #include "eekboard/eekboard-context-service.h" +#include "keymap.h" #include #include @@ -148,16 +149,16 @@ eekboard_context_service_real_create_keyboard (EekboardContextService *self, struct xkb_rule_names rules = { 0 }; rules.layout = strdup(keyboard_type); - struct xkb_keymap *keymap = xkb_keymap_new_from_names(context, &rules, - XKB_KEYMAP_COMPILE_NO_FLAGS); + struct xkb_keymap *keymap = xkb_keymap_new_from_string(context, default_keymap, + XKB_KEYMAP_FORMAT_TEXT_V1, XKB_KEYMAP_COMPILE_NO_FLAGS); xkb_context_unref(context); if (!keymap) { g_error("Bad keymap"); } keyboard->keymap = keymap; char *keymap_str = xkb_keymap_get_as_string(keymap, XKB_KEYMAP_FORMAT_TEXT_V1); - g_debug("%s", keymap_str); keyboard->keymap_len = strlen(keymap_str) + 1; + g_autofree char *path = strdup("/eek_keymap-XXXXXX"); char *r = &path[strlen(path) - 6]; getrandom(r, 6, GRND_NONBLOCK); diff --git a/eekboard/keymap.h b/eekboard/keymap.h index e33c502e..13b3cc80 100644 --- a/eekboard/keymap.h +++ b/eekboard/keymap.h @@ -6,3 +6,284 @@ squeek_keymap_get_entries_for_keyval (struct xkb_keymap *xkb_keymap, guint keyval, GdkKeymapKey **keys, guint *n_keys); + +static const char default_keymap[] = "xkb_keymap {\ +\ +xkb_keycodes \"squeekboard\" {\ + minimum = 8;\ + maximum = 255;\ + = 9;\ + = 10;\ + = 11;\ + = 12;\ + = 13;\ + = 14;\ + = 15;\ + = 16;\ + = 17;\ + = 18;\ + = 19;\ + = 20;\ + = 21;\ + = 22;\ + = 23;\ + = 24;\ + = 25;\ + = 26;\ + = 27;\ + = 28;\ + = 29;\ + = 30;\ + = 31;\ + = 32;\ + = 33;\ + = 34;\ + = 35;\ + = 36;\ + = 37;\ + = 38;\ + = 39;\ + = 40;\ + = 41;\ + = 42;\ + = 43;\ + = 44;\ + = 45;\ + = 46;\ + = 47;\ + = 48;\ + = 49;\ + = 50;\ + = 51;\ + = 52;\ + = 53;\ + = 54;\ + = 55;\ + = 56;\ + = 57;\ + = 58;\ + = 59;\ + = 60;\ + = 61;\ + = 62;\ + = 63;\ + = 64;\ + = 65;\ + = 66;\ + = 67;\ + = 68;\ + = 69;\ + = 70;\ + = 71;\ + = 72;\ + = 73;\ + = 74;\ + = 75;\ + = 76;\ + = 77;\ + = 78;\ + = 79;\ + = 80;\ + = 81;\ + = 82;\ + = 83;\ + = 84;\ + = 85;\ + = 86;\ + = 87;\ + = 88;\ + = 89;\ + = 90;\ + = 91;\ + = 92;\ + = 94;\ + = 95;\ + = 96;\ + = 97;\ + = 98;\ + = 99;\ + = 100;\ + = 101;\ + = 102;\ + = 103;\ + = 104;\ + = 105;\ + = 106;\ + = 107;\ + = 108;\ + = 109;\ + = 110;\ + = 111;\ + = 112;\ + = 113;\ + = 114;\ + = 115;\ + = 116;\ + = 117;\ + = 118;\ + = 119;\ + = 120;\ + = 121;\ + = 122;\ + = 123;\ + = 124;\ + = 125;\ + = 126;\ + = 127;\ + = 128;\ + = 129;\ + = 130;\ + = 131;\ + = 132;\ + = 133;\ + = 134;\ + = 135;\ + = 136;\ + = 137;\ + = 138;\ + = 139;\ + = 140;\ + = 141;\ + = 142;\ + = 143;\ + = 144;\ + = 145;\ + = 146;\ + = 147;\ + = 148;\ + = 149;\ + = 150;\ + = 151;\ + = 152;\ + = 153;\ + = 154;\ + = 155;\ + = 156;\ + = 157;\ + = 158;\ + = 159;\ + = 160;\ + = 161;\ + = 162;\ + = 163;\ + = 164;\ + = 165;\ + = 166;\ + = 167;\ + = 168;\ + = 169;\ + = 170;\ + = 171;\ + = 172;\ + = 173;\ + = 174;\ + = 175;\ + = 176;\ + = 177;\ + = 178;\ + = 179;\ + = 180;\ + = 181;\ + = 182;\ + = 183;\ + = 184;\ + = 185;\ + = 186;\ + = 187;\ + = 188;\ + = 189;\ + = 190;\ + = 191;\ + = 192;\ + = 193;\ + = 194;\ + = 195;\ + = 196;\ + = 197;\ + = 198;\ + = 199;\ + = 200;\ + = 201;\ + = 202;\ + = 203;\ + = 204;\ + = 205;\ + = 206;\ + = 207;\ + = 208;\ + = 209;\ + = 210;\ + = 211;\ + = 212;\ + = 213;\ + = 214;\ + = 215;\ + = 216;\ + = 217;\ + = 218;\ + = 219;\ + = 220;\ + = 221;\ + = 222;\ + = 223;\ + = 224;\ + = 225;\ + = 226;\ + = 227;\ + = 228;\ + = 229;\ + = 230;\ + = 231;\ + = 232;\ + = 233;\ + = 234;\ + = 235;\ + = 236;\ + = 237;\ + = 238;\ + = 239;\ + = 240;\ + = 241;\ + = 242;\ + = 243;\ + = 244;\ + = 245;\ + = 246;\ + = 247;\ + = 248;\ + = 249;\ + = 250;\ + = 251;\ + = 252;\ + = 253;\ + = 254;\ + = 255;\ + };\ +\ + xkb_symbols \"squeekboard\" {\ + key { [ 4, dollar, EuroSign, onequarter ] };\ + };\ +\ + xkb_types \"squeekboard\" {\ + type \"ONE_LEVEL\" {\ + modifiers= none;\ + level_name[Level1]= \"Any\";\ + };\ + type \"TWO_LEVEL\" {\ + modifiers= Shift;\ + map[Shift]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + };\ + type \"ALPHABETIC\" {\ + modifiers= Shift+Lock;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Caps\";\ + };\ + };\ +\ + xkb_compatibility \"squeekboard\" {\ + };\ +};"; From bdbbaf609952c3abc5dfee6c5a26bd32a38360af Mon Sep 17 00:00:00 2001 From: David Boddie Date: Sun, 14 Jul 2019 23:21:43 +0000 Subject: [PATCH 04/13] Use groups to reference keysyms in the keymap --- data/keyboards/geometry/extended.xml | 5 +++- eekboard/eekboard-context-service.c | 1 + eekboard/key-emitter.c | 37 +++++++++++++++++++++++++--- eekboard/keymap.h | 28 +++++++++------------ 4 files changed, 51 insertions(+), 20 deletions(-) diff --git a/data/keyboards/geometry/extended.xml b/data/keyboards/geometry/extended.xml index c73217e0..50938efb 100644 --- a/data/keyboards/geometry/extended.xml +++ b/data/keyboards/geometry/extended.xml @@ -1,7 +1,10 @@ - +
diff --git a/eekboard/eekboard-context-service.c b/eekboard/eekboard-context-service.c index 67c8b2d7..434e5756 100644 --- a/eekboard/eekboard-context-service.c +++ b/eekboard/eekboard-context-service.c @@ -156,6 +156,7 @@ eekboard_context_service_real_create_keyboard (EekboardContextService *self, g_error("Bad keymap"); } keyboard->keymap = keymap; + char *keymap_str = xkb_keymap_get_as_string(keymap, XKB_KEYMAP_FORMAT_TEXT_V1); keyboard->keymap_len = strlen(keymap_str) + 1; diff --git a/eekboard/key-emitter.c b/eekboard/key-emitter.c index 539c2331..9a07e015 100644 --- a/eekboard/key-emitter.c +++ b/eekboard/key-emitter.c @@ -137,14 +137,15 @@ int send_virtual_keyboard_key( unsigned is_press, uint32_t timestamp ) { + g_debug("send_virtual_keyboard_key: %u", keycode); zwp_virtual_keyboard_v1_key(keyboard, timestamp, keycode, (unsigned)is_press); return 0; } static void send_fake_modifiers_events (SeatEmitter *emitter, - EekModifierType modifiers, - uint32_t timestamp) + EekModifierType modifiers, + uint32_t timestamp) { (void)timestamp; @@ -158,6 +159,7 @@ send_fake_modifiers_events (SeatEmitter *emitter, if (modifiers & EEK_MOD1_MASK) { proto_modifiers |= 1<virtual_keyboard, proto_modifiers, 0, 0, emitter->group); } @@ -172,6 +174,7 @@ send_fake_key_event (SeatEmitter *emitter, guint old_keysym = xkeysym; g_return_if_fail (xkeysym > 0); + g_debug("send_fake_key_event: %i %i", xkeysym, keyboard_modifiers); guint keycode; if (!get_keycode_from_gdk_keymap (emitter, xkeysym, &keycode, &modifiers)) { @@ -214,6 +217,7 @@ send_fake_key_events (SeatEmitter *emitter, if (eek_symbol_is_modifier (symbol)) return; + g_debug("symbol: %s", eek_symbol_get_name(symbol)); /* If symbol is a text, convert chars in it to keysym */ if (EEK_IS_TEXT(symbol)) { const gchar *utf8 = eek_text_get_text (EEK_TEXT(symbol)); @@ -243,6 +247,7 @@ send_fake_key_events (SeatEmitter *emitter, } if (EEK_IS_KEYSYM(symbol)) { + g_debug("keysym: %u", eek_keysym_get_xkeysym(EEK_KEYSYM(symbol))); guint xkeysym = eek_keysym_get_xkeysym (EEK_KEYSYM(symbol)); send_fake_key_event (emitter, xkeysym, keyboard_modifiers, pressed, timestamp); } @@ -284,6 +289,30 @@ update_modifier_info (SeatEmitter *client) }*/ } +static void +send_fake_key (SeatEmitter *emitter, + EekKeyboard *keyboard, + guint keycode, + guint keyboard_modifiers, + gboolean pressed, + uint32_t timestamp) +{ + uint32_t proto_modifiers = 0; + guint level = eek_element_get_level(EEK_ELEMENT(keyboard)); + uint32_t group = (level / 2); + + g_debug("send_fake_key: %u %u", keycode, keyboard_modifiers); + g_debug("level: %u", level); + g_debug("group: %u", group); + + if (keyboard_modifiers & EEK_SHIFT_MASK) + proto_modifiers |= 1<virtual_keyboard, proto_modifiers, 0, 0, group); + send_virtual_keyboard_key (emitter->virtual_keyboard, keycode - 8, (unsigned)pressed, timestamp); + zwp_virtual_keyboard_v1_modifiers(emitter->virtual_keyboard, proto_modifiers, 0, 0, group); +} + void emit_key_activated (EekboardContextService *manager, EekKeyboard *keyboard, @@ -293,6 +322,8 @@ emit_key_activated (EekboardContextService *manager, gboolean pressed, uint32_t timestamp) { + g_debug("symbol: %s", eek_symbol_get_name(symbol)); + g_debug("keycode: %u", keycode); /* FIXME: figure out how to deal with Client after key presses go through if (g_strcmp0 (eek_symbol_get_name (symbol), "cycle-keyboard") == 0) { client->keyboards_head = g_slist_next (client->keyboards_head); @@ -324,5 +355,5 @@ emit_key_activated (EekboardContextService *manager, emitter.virtual_keyboard = manager->virtual_keyboard; emitter.keymap = keyboard->keymap; update_modifier_info (&emitter); - send_fake_key_events (&emitter, symbol, modifiers, pressed, timestamp); + send_fake_key (&emitter, keyboard, keycode, modifiers, pressed, timestamp); } diff --git a/eekboard/keymap.h b/eekboard/keymap.h index 13b3cc80..e360bd67 100644 --- a/eekboard/keymap.h +++ b/eekboard/keymap.h @@ -261,26 +261,22 @@ xkb_keycodes \"squeekboard\" {\ };\ \ xkb_symbols \"squeekboard\" {\ - key { [ 4, dollar, EuroSign, onequarter ] };\ +\ + name[Group1] = \"Letters\";\ + name[Group2] = \"Numbers/Symbols\";\ +\ + key { [ q, Q ], [ 1, asciitilde ] };\ + key { [ w, W ], [ 2, quoteleft ] };\ + key { [ 4, dollar ], [ EuroSign, onequarter ] };\ };\ \ xkb_types \"squeekboard\" {\ - type \"ONE_LEVEL\" {\ - modifiers= none;\ - level_name[Level1]= \"Any\";\ - };\ +\ type \"TWO_LEVEL\" {\ - modifiers= Shift;\ - map[Shift]= Level2;\ - level_name[Level1]= \"Base\";\ - level_name[Level2]= \"Shift\";\ - };\ - type \"ALPHABETIC\" {\ - modifiers= Shift+Lock;\ - map[Shift]= Level2;\ - map[Lock]= Level2;\ - level_name[Level1]= \"Base\";\ - level_name[Level2]= \"Caps\";\ + modifiers = Shift;\ + map[Shift] = Level2;\ + level_name[Level1] = \"Base\";\ + level_name[Level2] = \"Shift\";\ };\ };\ \ From 45f58a97b9c967240d31e7104d2e9dcc9f444361 Mon Sep 17 00:00:00 2001 From: David Boddie Date: Mon, 15 Jul 2019 00:30:11 +0000 Subject: [PATCH 05/13] Update the test keymap --- eekboard/keymap.h | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/eekboard/keymap.h b/eekboard/keymap.h index e360bd67..3c9fbcdd 100644 --- a/eekboard/keymap.h +++ b/eekboard/keymap.h @@ -267,7 +267,39 @@ xkb_keycodes \"squeekboard\" {\ \ key { [ q, Q ], [ 1, asciitilde ] };\ key { [ w, W ], [ 2, quoteleft ] };\ - key { [ 4, dollar ], [ EuroSign, onequarter ] };\ + key { [ e, E ], [ 3, bar ] };\ + key { [ r, R ], [ 4, middledot ] };\ + key { [ t, T ], [ 5, squareroot ] };\ + key { [ y, Y ], [ 6, Greek_pi ] };\ + key { [ u, U ], [ 7, division ] };\ + key { [ i, I ], [ 8, multiply ] };\ + key { [ o, O ], [ 9, paragraph ] };\ + key { [ p, P ], [ 0, 0 ] };\ + key { [ aring, Aring ], [ ] };\ + key { [ a, A ], [ at, copyright ] };\ + key { [ s, S ], [ numbersign, registeredtrademark ] };\ + key { [ d, D ], [ dollar, poundsign ] };\ + key { [ f, F ], [ percent, EuroSign ] };\ + key { [ g, G ], [ ampersand, yensign ] };\ + key { [ h, H ], [ minus, asciicircum ] };\ + key { [ j, J ], [ plus, degreesign ] };\ + key { [ k, K ], [ parenleft, braceleft ] };\ + key { [ l, L ], [ parenright, braceright ] };\ + key { [ oslash, Oslash ], [ ] };\ + key { [ ae, AE ], [ ] };\ + key { [ Return, Return ], [ ] };\ + key { [ Shift_L, Shift_L ], [ Shift_L, Shift_L ] };\ + key { [ z, Z ], [ comma, backslash ] };\ + key { [ x, X ], [ quotedbl, slash ] };\ + key { [ c, C ], [ quoteright, less ] };\ + key { [ v, V ], [ colon, greater ] };\ + key { [ b, B ], [ semicolon, equal ] };\ + key { [ n, N ], [ exclam, bracketleft ] };\ + key { [ m, M ], [ question, bracketright ] };\ + key { [ period, period ], [ ] };\ + key { [ preferences, preferences ], [ ] };\ + key { [ space, space ], [ ] };\ + key { [ BackSpace, BackSpace ], [ ] };\ };\ \ xkb_types \"squeekboard\" {\ From 268dda4da0b7f5231c669e747044e7f25442b50f Mon Sep 17 00:00:00 2001 From: David Boddie Date: Mon, 15 Jul 2019 16:11:42 +0200 Subject: [PATCH 06/13] Improve symbol mapping --- data/keyboards/symbols/nb.xml | 42 ++++++++++++++++++++++------------- eekboard/keymap.h | 34 ++++++++++++++-------------- 2 files changed, 44 insertions(+), 32 deletions(-) diff --git a/data/keyboards/symbols/nb.xml b/data/keyboards/symbols/nb.xml index 8915bde1..2f94e914 100644 --- a/data/keyboards/symbols/nb.xml +++ b/data/keyboards/symbols/nb.xml @@ -1,4 +1,4 @@ - + q @@ -22,41 +22,49 @@ r R 4 - middledot + U00B7 t T 5 + squareroot y Y 6 + Greek_pi u U 7 + division i I 8 + multiply o O 9 + paragraph p P 0 + U25B3 - å - Å + aring + Aring + U00B1 + U00A7 a @@ -68,57 +76,61 @@ s S numbersign - registeredtrademark + U00AE d D dollar - poundsign + U00A3 f F percent - + EuroSign g G ampersand - yensign + U00A5 h H minus - asciicircum + underscore j J plus - degreesign + equal k K - parenleft - braceleft + U00FC + asciicircum l L - parenright - braceright + U00F6 + degree oslash Oslash + parenleft + braceleft ae AE + parenright + braceright Return @@ -187,6 +199,6 @@ space - backspace + Backspace diff --git a/eekboard/keymap.h b/eekboard/keymap.h index 3c9fbcdd..09e66b28 100644 --- a/eekboard/keymap.h +++ b/eekboard/keymap.h @@ -268,26 +268,26 @@ xkb_keycodes \"squeekboard\" {\ key { [ q, Q ], [ 1, asciitilde ] };\ key { [ w, W ], [ 2, quoteleft ] };\ key { [ e, E ], [ 3, bar ] };\ - key { [ r, R ], [ 4, middledot ] };\ + key { [ r, R ], [ 4, U00B7 ] };\ key { [ t, T ], [ 5, squareroot ] };\ key { [ y, Y ], [ 6, Greek_pi ] };\ key { [ u, U ], [ 7, division ] };\ key { [ i, I ], [ 8, multiply ] };\ key { [ o, O ], [ 9, paragraph ] };\ - key { [ p, P ], [ 0, 0 ] };\ - key { [ aring, Aring ], [ ] };\ + key { [ p, P ], [ 0, U25B3 ] };\ + key { [ aring, Aring ], [ U00B1, U00A7 ] };\ key { [ a, A ], [ at, copyright ] };\ - key { [ s, S ], [ numbersign, registeredtrademark ] };\ - key { [ d, D ], [ dollar, poundsign ] };\ + key { [ s, S ], [ numbersign, U00AE ] };\ + key { [ d, D ], [ dollar, U00A3 ] };\ key { [ f, F ], [ percent, EuroSign ] };\ - key { [ g, G ], [ ampersand, yensign ] };\ - key { [ h, H ], [ minus, asciicircum ] };\ - key { [ j, J ], [ plus, degreesign ] };\ - key { [ k, K ], [ parenleft, braceleft ] };\ - key { [ l, L ], [ parenright, braceright ] };\ - key { [ oslash, Oslash ], [ ] };\ - key { [ ae, AE ], [ ] };\ - key { [ Return, Return ], [ ] };\ + key { [ g, G ], [ ampersand, U00A5 ] };\ + key { [ h, H ], [ minus, underscore ] };\ + key { [ j, J ], [ plus, equal ] };\ + key { [ k, K ], [ U00FC, asciicircum ] };\ + key { [ l, L ], [ U00F6, degree ] };\ + key { [ oslash, Oslash ], [ parenleft, braceleft ] };\ + key { [ ae, AE ], [ parenright, braceright ] };\ + key { [ Return, Return ], [ Return, Return ] };\ key { [ Shift_L, Shift_L ], [ Shift_L, Shift_L ] };\ key { [ z, Z ], [ comma, backslash ] };\ key { [ x, X ], [ quotedbl, slash ] };\ @@ -296,10 +296,10 @@ xkb_keycodes \"squeekboard\" {\ key { [ b, B ], [ semicolon, equal ] };\ key { [ n, N ], [ exclam, bracketleft ] };\ key { [ m, M ], [ question, bracketright ] };\ - key { [ period, period ], [ ] };\ - key { [ preferences, preferences ], [ ] };\ - key { [ space, space ], [ ] };\ - key { [ BackSpace, BackSpace ], [ ] };\ + key { [ period, period ], [ period, period ] };\ + key { [ preferences, preferences ], [ preferences, preferences ] };\ + key { [ space, space ], [ space, space ] };\ + key { [ Backspace, Backspace ], [ Backspace, Backspace ] };\ };\ \ xkb_types \"squeekboard\" {\ From 3c97a3a5921c8e66595338d77d016ada972fb04f Mon Sep 17 00:00:00 2001 From: David Boddie Date: Mon, 15 Jul 2019 17:33:10 +0200 Subject: [PATCH 07/13] Convert symbols file and update test keymap --- data/keyboards/symbols/nb.xml | 252 +++++++++++++++++----------------- eekboard/keymap.h | 70 +++++----- 2 files changed, 161 insertions(+), 161 deletions(-) diff --git a/data/keyboards/symbols/nb.xml b/data/keyboards/symbols/nb.xml index 2f94e914..ae7cb31f 100644 --- a/data/keyboards/symbols/nb.xml +++ b/data/keyboards/symbols/nb.xml @@ -1,190 +1,190 @@ - + - q - Q - 1 - asciitilde + q + Q + 1 + asciitilde - w - W - 2 - quoteleft + w + W + 2 + quoteleft - e - E - 3 - bar + e + E + 3 + bar - r - R - 4 - U00B7 + r + R + 4 + U00B7 - t - T - 5 - squareroot + t + T + 5 + squareroot - y - Y - 6 - Greek_pi + y + Y + 6 + Greek_pi - u - U - 7 - division + u + U + 7 + division - i - I - 8 - multiply + i + I + 8 + multiply - o - O - 9 - paragraph + o + O + 9 + paragraph - p - P - 0 - U25B3 + p + P + 0 + U25B3 - aring - Aring - U00B1 - U00A7 + aring + Aring + U00B1 + U00A7 - a - A - at - copyright + a + A + at + copyright - s - S - numbersign - U00AE + s + S + numbersign + U00AE - d - D - dollar - U00A3 + d + D + dollar + U00A3 - f - F - percent - EuroSign + f + F + percent + EuroSign - g - G - ampersand - U00A5 + g + G + ampersand + U00A5 - h - H - minus - underscore + h + H + minus + underscore - j - J - plus - equal + j + J + plus + equal - k - K - U00FC - asciicircum + k + K + U00FC + asciicircum - l - L - U00F6 - degree + l + L + U00F6 + degree - oslash - Oslash - parenleft - braceleft + oslash + Oslash + parenleft + braceleft - ae - AE - parenright - braceright + ae + AE + parenright + braceright - Return + Return - Shift_L - Shift_L - Shift_L - Shift_L + Shift_L + Shift_L + Shift_L + Shift_L - z - Z - comma - backslash + z + Z + comma + backslash - x - X - quotedbl - slash + x + X + quotedbl + slash - c - C - quoteright - less + c + C + quoteright + less - v - V - colon - greater + v + V + colon + greater - b - B - semicolon - equal + b + B + semicolon + equal - n - N - exclam - bracketleft + n + N + exclam + bracketleft - m - M - question - bracketright + m + M + question + bracketright - period + period show-numbers @@ -193,12 +193,12 @@ show-letters - preferences + preferences - space + space - Backspace + BackSpace diff --git a/eekboard/keymap.h b/eekboard/keymap.h index 09e66b28..82fd1f08 100644 --- a/eekboard/keymap.h +++ b/eekboard/keymap.h @@ -265,41 +265,41 @@ xkb_keycodes \"squeekboard\" {\ name[Group1] = \"Letters\";\ name[Group2] = \"Numbers/Symbols\";\ \ - key { [ q, Q ], [ 1, asciitilde ] };\ - key { [ w, W ], [ 2, quoteleft ] };\ - key { [ e, E ], [ 3, bar ] };\ - key { [ r, R ], [ 4, U00B7 ] };\ - key { [ t, T ], [ 5, squareroot ] };\ - key { [ y, Y ], [ 6, Greek_pi ] };\ - key { [ u, U ], [ 7, division ] };\ - key { [ i, I ], [ 8, multiply ] };\ - key { [ o, O ], [ 9, paragraph ] };\ - key { [ p, P ], [ 0, U25B3 ] };\ - key { [ aring, Aring ], [ U00B1, U00A7 ] };\ - key { [ a, A ], [ at, copyright ] };\ - key { [ s, S ], [ numbersign, U00AE ] };\ - key { [ d, D ], [ dollar, U00A3 ] };\ - key { [ f, F ], [ percent, EuroSign ] };\ - key { [ g, G ], [ ampersand, U00A5 ] };\ - key { [ h, H ], [ minus, underscore ] };\ - key { [ j, J ], [ plus, equal ] };\ - key { [ k, K ], [ U00FC, asciicircum ] };\ - key { [ l, L ], [ U00F6, degree ] };\ - key { [ oslash, Oslash ], [ parenleft, braceleft ] };\ - key { [ ae, AE ], [ parenright, braceright ] };\ - key { [ Return, Return ], [ Return, Return ] };\ - key { [ Shift_L, Shift_L ], [ Shift_L, Shift_L ] };\ - key { [ z, Z ], [ comma, backslash ] };\ - key { [ x, X ], [ quotedbl, slash ] };\ - key { [ c, C ], [ quoteright, less ] };\ - key { [ v, V ], [ colon, greater ] };\ - key { [ b, B ], [ semicolon, equal ] };\ - key { [ n, N ], [ exclam, bracketleft ] };\ - key { [ m, M ], [ question, bracketright ] };\ - key { [ period, period ], [ period, period ] };\ - key { [ preferences, preferences ], [ preferences, preferences ] };\ - key { [ space, space ], [ space, space ] };\ - key { [ Backspace, Backspace ], [ Backspace, Backspace ] };\ + key { [ q, Q ], [ 1, asciitilde ] };\ + key { [ w, W ], [ 2, quoteleft ] };\ + key { [ e, E ], [ 3, bar ] };\ + key { [ r, R ], [ 4, U00B7 ] };\ + key { [ t, T ], [ 5, squareroot ] };\ + key { [ y, Y ], [ 6, Greek_pi ] };\ + key { [ u, U ], [ 7, division ] };\ + key { [ i, I ], [ 8, multiply ] };\ + key { [ o, O ], [ 9, paragraph ] };\ + key { [ p, P ], [ 0, U25B3 ] };\ + key { [ aring, Aring ], [ U00B1, U00A7 ] };\ + key { [ a, A ], [ at, copyright ] };\ + key { [ s, S ], [ numbersign, U00AE ] };\ + key { [ d, D ], [ dollar, U00A3 ] };\ + key { [ f, F ], [ percent, EuroSign ] };\ + key { [ g, G ], [ ampersand, U00A5 ] };\ + key { [ h, H ], [ minus, underscore ] };\ + key { [ j, J ], [ plus, equal ] };\ + key { [ k, K ], [ U00FC, asciicircum ] };\ + key { [ l, L ], [ U00F6, degree ] };\ + key { [ oslash, Oslash ], [ parenleft, braceleft ] };\ + key { [ ae, AE ], [ parenright, braceright ] };\ + key { [ Return, Return ], [ Return, Return ] };\ + key { [ Shift_L, Shift_L ], [ Shift_L, Shift_L ] };\ + key { [ z, Z ], [ comma, backslash ] };\ + key { [ x, X ], [ quotedbl, slash ] };\ + key { [ c, C ], [ quoteright, less ] };\ + key { [ v, V ], [ colon, greater ] };\ + key { [ b, B ], [ semicolon, equal ] };\ + key { [ n, N ], [ exclam, bracketleft ] };\ + key { [ m, M ], [ question, bracketright ] };\ + key { [ period, period ], [ period, period ] };\ + key { [ preferences, preferences ], [ preferences, preferences ] };\ + key { [ space, space ], [ space, space ] };\ + key { [ BackSpace, BackSpace ], [ BackSpace, BackSpace ] };\ };\ \ xkb_types \"squeekboard\" {\ From 69986132b4e51c06fbcf1db043d9182a8725f4c6 Mon Sep 17 00:00:00 2001 From: David Boddie Date: Mon, 15 Jul 2019 18:28:06 +0200 Subject: [PATCH 08/13] Use keysyms for the Shift modifier --- data/keyboards/symbols/nb.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/data/keyboards/symbols/nb.xml b/data/keyboards/symbols/nb.xml index ae7cb31f..00a2ca3e 100644 --- a/data/keyboards/symbols/nb.xml +++ b/data/keyboards/symbols/nb.xml @@ -136,10 +136,10 @@ Return - Shift_L - Shift_L - Shift_L - Shift_L + Shift_L + Shift_L + Shift_L + Shift_L z From a7140705c4ed4f191e85afe58098d8c306e36d5e Mon Sep 17 00:00:00 2001 From: David Boddie Date: Mon, 15 Jul 2019 19:43:28 +0200 Subject: [PATCH 09/13] Search for an xkb keymap in the resources --- data/keyboards/keymaps/nb.xkb | 308 +++++++++++++++++++++++++++ data/squeekboard.gresources.xml | 1 + eekboard/eekboard-context-service.c | 49 ++++- eekboard/keymap.h | 309 ---------------------------- 4 files changed, 356 insertions(+), 311 deletions(-) create mode 100644 data/keyboards/keymaps/nb.xkb diff --git a/data/keyboards/keymaps/nb.xkb b/data/keyboards/keymaps/nb.xkb new file mode 100644 index 00000000..26036f89 --- /dev/null +++ b/data/keyboards/keymaps/nb.xkb @@ -0,0 +1,308 @@ +xkb_keymap { + + xkb_keycodes "squeekboard" { + minimum = 8; + maximum = 255; + = 9; + = 10; + = 11; + = 12; + = 13; + = 14; + = 15; + = 16; + = 17; + = 18; + = 19; + = 20; + = 21; + = 22; + = 23; + = 24; + = 25; + = 26; + = 27; + = 28; + = 29; + = 30; + = 31; + = 32; + = 33; + = 34; + = 35; + = 36; + = 37; + = 38; + = 39; + = 40; + = 41; + = 42; + = 43; + = 44; + = 45; + = 46; + = 47; + = 48; + = 49; + = 50; + = 51; + = 52; + = 53; + = 54; + = 55; + = 56; + = 57; + = 58; + = 59; + = 60; + = 61; + = 62; + = 63; + = 64; + = 65; + = 66; + = 67; + = 68; + = 69; + = 70; + = 71; + = 72; + = 73; + = 74; + = 75; + = 76; + = 77; + = 78; + = 79; + = 80; + = 81; + = 82; + = 83; + = 84; + = 85; + = 86; + = 87; + = 88; + = 89; + = 90; + = 91; + = 92; + = 94; + = 95; + = 96; + = 97; + = 98; + = 99; + = 100; + = 101; + = 102; + = 103; + = 104; + = 105; + = 106; + = 107; + = 108; + = 109; + = 110; + = 111; + = 112; + = 113; + = 114; + = 115; + = 116; + = 117; + = 118; + = 119; + = 120; + = 121; + = 122; + = 123; + = 124; + = 125; + = 126; + = 127; + = 128; + = 129; + = 130; + = 131; + = 132; + = 133; + = 134; + = 135; + = 136; + = 137; + = 138; + = 139; + = 140; + = 141; + = 142; + = 143; + = 144; + = 145; + = 146; + = 147; + = 148; + = 149; + = 150; + = 151; + = 152; + = 153; + = 154; + = 155; + = 156; + = 157; + = 158; + = 159; + = 160; + = 161; + = 162; + = 163; + = 164; + = 165; + = 166; + = 167; + = 168; + = 169; + = 170; + = 171; + = 172; + = 173; + = 174; + = 175; + = 176; + = 177; + = 178; + = 179; + = 180; + = 181; + = 182; + = 183; + = 184; + = 185; + = 186; + = 187; + = 188; + = 189; + = 190; + = 191; + = 192; + = 193; + = 194; + = 195; + = 196; + = 197; + = 198; + = 199; + = 200; + = 201; + = 202; + = 203; + = 204; + = 205; + = 206; + = 207; + = 208; + = 209; + = 210; + = 211; + = 212; + = 213; + = 214; + = 215; + = 216; + = 217; + = 218; + = 219; + = 220; + = 221; + = 222; + = 223; + = 224; + = 225; + = 226; + = 227; + = 228; + = 229; + = 230; + = 231; + = 232; + = 233; + = 234; + = 235; + = 236; + = 237; + = 238; + = 239; + = 240; + = 241; + = 242; + = 243; + = 244; + = 245; + = 246; + = 247; + = 248; + = 249; + = 250; + = 251; + = 252; + = 253; + = 254; + = 255; + }; + + xkb_symbols "squeekboard" { + + name[Group1] = "Letters"; + name[Group2] = "Numbers/Symbols"; + + key { [ q, Q ], [ 1, asciitilde ] }; + key { [ w, W ], [ 2, quoteleft ] }; + key { [ e, E ], [ 3, bar ] }; + key { [ r, R ], [ 4, U00B7 ] }; + key { [ t, T ], [ 5, squareroot ] }; + key { [ y, Y ], [ 6, Greek_pi ] }; + key { [ u, U ], [ 7, division ] }; + key { [ i, I ], [ 8, multiply ] }; + key { [ o, O ], [ 9, paragraph ] }; + key { [ p, P ], [ 0, U25B3 ] }; + key { [ aring, Aring ], [ U00B1, U00A7 ] }; + key { [ a, A ], [ at, copyright ] }; + key { [ s, S ], [ numbersign, U00AE ] }; + key { [ d, D ], [ dollar, U00A3 ] }; + key { [ f, F ], [ percent, EuroSign ] }; + key { [ g, G ], [ ampersand, U00A5 ] }; + key { [ h, H ], [ minus, underscore ] }; + key { [ j, J ], [ plus, equal ] }; + key { [ k, K ], [ U00FC, asciicircum ] }; + key { [ l, L ], [ U00F6, degree ] }; + key { [ oslash, Oslash ], [ parenleft, braceleft ] }; + key { [ ae, AE ], [ parenright, braceright ] }; + key { [ Return, Return ], [ Return, Return ] }; + key { [ Shift_L, Shift_L ], [ Shift_L, Shift_L ] }; + key { [ z, Z ], [ comma, backslash ] }; + key { [ x, X ], [ quotedbl, slash ] }; + key { [ c, C ], [ quoteright, less ] }; + key { [ v, V ], [ colon, greater ] }; + key { [ b, B ], [ semicolon, equal ] }; + key { [ n, N ], [ exclam, bracketleft ] }; + key { [ m, M ], [ question, bracketright ] }; + key { [ period, period ], [ period, period ] }; + key { [ preferences, preferences ], [ preferences, preferences ] }; + key { [ space, space ], [ space, space ] }; + key { [ BackSpace, BackSpace ], [ BackSpace, BackSpace ] }; + }; + + xkb_types "squeekboard" { + + type "TWO_LEVEL" { + modifiers = Shift; + map[Shift] = Level2; + level_name[Level1] = "Base"; + level_name[Level2] = "Shift"; + }; + }; + + xkb_compatibility "squeekboard" { + }; +}; diff --git a/data/squeekboard.gresources.xml b/data/squeekboard.gresources.xml index c5faaa70..60bc29fb 100644 --- a/data/squeekboard.gresources.xml +++ b/data/squeekboard.gresources.xml @@ -5,6 +5,7 @@ keyboards/geometry/compact.xml keyboards/geometry/extended.xml keyboards/keyboards.xml + keyboards/keymaps/nb.xkb keyboards/symbols/ar.xml keyboards/symbols/as-inscript.xml keyboards/symbols/be.xml diff --git a/eekboard/eekboard-context-service.c b/eekboard/eekboard-context-service.c index 434e5756..93c45a9b 100644 --- a/eekboard/eekboard-context-service.c +++ b/eekboard/eekboard-context-service.c @@ -86,6 +86,48 @@ struct _EekboardContextServicePrivate { G_DEFINE_TYPE_WITH_PRIVATE (EekboardContextService, eekboard_context_service, G_TYPE_OBJECT); /*static Display *display = NULL; */ +gchar * +get_keymap_from_resource(const gchar *keyboard_type) +{ + g_autoptr (GFile) file = NULL; + g_autoptr (GFileInfo) info = NULL; + g_autoptr (GFileInputStream) stream = NULL; + goffset size = 0; + gsize bytes_read = 0; + g_autofree gchar *contents = NULL; + g_autofree gchar *path = NULL; + GError *error = NULL; + + path = g_strconcat ("resource:///sm/puri/squeekboard/keyboards/keymaps/", + keyboard_type, ".xkb", NULL); + file = g_file_new_for_uri (path); + stream = g_file_read (file, NULL, &error); + + if (!stream) + goto keymap_error; + + info = g_file_input_stream_query_info (stream, + G_FILE_ATTRIBUTE_STANDARD_SIZE, + NULL, + &error); + + if (!info) + goto keymap_error; + + size = g_file_info_get_size (info); + contents = g_malloc0 (size); + + if (!g_input_stream_read_all (G_INPUT_STREAM(stream), contents, size, + &bytes_read, NULL, &error)) + goto keymap_error; + + return g_utf8_make_valid (contents, -1); + +keymap_error: + g_error ("failed to load keymap from resource: %s", error->message); + g_error_free (error); + return NULL; +} static EekKeyboard * eekboard_context_service_real_create_keyboard (EekboardContextService *self, @@ -146,11 +188,14 @@ eekboard_context_service_real_create_keyboard (EekboardContextService *self, if (!context) { g_error("No context created"); } - +/* struct xkb_rule_names rules = { 0 }; rules.layout = strdup(keyboard_type); - struct xkb_keymap *keymap = xkb_keymap_new_from_string(context, default_keymap, +*/ + struct xkb_keymap *keymap = xkb_keymap_new_from_string(context, + get_keymap_from_resource(keyboard_type), XKB_KEYMAP_FORMAT_TEXT_V1, XKB_KEYMAP_COMPILE_NO_FLAGS); + xkb_context_unref(context); if (!keymap) { g_error("Bad keymap"); diff --git a/eekboard/keymap.h b/eekboard/keymap.h index 82fd1f08..e33c502e 100644 --- a/eekboard/keymap.h +++ b/eekboard/keymap.h @@ -6,312 +6,3 @@ squeek_keymap_get_entries_for_keyval (struct xkb_keymap *xkb_keymap, guint keyval, GdkKeymapKey **keys, guint *n_keys); - -static const char default_keymap[] = "xkb_keymap {\ -\ -xkb_keycodes \"squeekboard\" {\ - minimum = 8;\ - maximum = 255;\ - = 9;\ - = 10;\ - = 11;\ - = 12;\ - = 13;\ - = 14;\ - = 15;\ - = 16;\ - = 17;\ - = 18;\ - = 19;\ - = 20;\ - = 21;\ - = 22;\ - = 23;\ - = 24;\ - = 25;\ - = 26;\ - = 27;\ - = 28;\ - = 29;\ - = 30;\ - = 31;\ - = 32;\ - = 33;\ - = 34;\ - = 35;\ - = 36;\ - = 37;\ - = 38;\ - = 39;\ - = 40;\ - = 41;\ - = 42;\ - = 43;\ - = 44;\ - = 45;\ - = 46;\ - = 47;\ - = 48;\ - = 49;\ - = 50;\ - = 51;\ - = 52;\ - = 53;\ - = 54;\ - = 55;\ - = 56;\ - = 57;\ - = 58;\ - = 59;\ - = 60;\ - = 61;\ - = 62;\ - = 63;\ - = 64;\ - = 65;\ - = 66;\ - = 67;\ - = 68;\ - = 69;\ - = 70;\ - = 71;\ - = 72;\ - = 73;\ - = 74;\ - = 75;\ - = 76;\ - = 77;\ - = 78;\ - = 79;\ - = 80;\ - = 81;\ - = 82;\ - = 83;\ - = 84;\ - = 85;\ - = 86;\ - = 87;\ - = 88;\ - = 89;\ - = 90;\ - = 91;\ - = 92;\ - = 94;\ - = 95;\ - = 96;\ - = 97;\ - = 98;\ - = 99;\ - = 100;\ - = 101;\ - = 102;\ - = 103;\ - = 104;\ - = 105;\ - = 106;\ - = 107;\ - = 108;\ - = 109;\ - = 110;\ - = 111;\ - = 112;\ - = 113;\ - = 114;\ - = 115;\ - = 116;\ - = 117;\ - = 118;\ - = 119;\ - = 120;\ - = 121;\ - = 122;\ - = 123;\ - = 124;\ - = 125;\ - = 126;\ - = 127;\ - = 128;\ - = 129;\ - = 130;\ - = 131;\ - = 132;\ - = 133;\ - = 134;\ - = 135;\ - = 136;\ - = 137;\ - = 138;\ - = 139;\ - = 140;\ - = 141;\ - = 142;\ - = 143;\ - = 144;\ - = 145;\ - = 146;\ - = 147;\ - = 148;\ - = 149;\ - = 150;\ - = 151;\ - = 152;\ - = 153;\ - = 154;\ - = 155;\ - = 156;\ - = 157;\ - = 158;\ - = 159;\ - = 160;\ - = 161;\ - = 162;\ - = 163;\ - = 164;\ - = 165;\ - = 166;\ - = 167;\ - = 168;\ - = 169;\ - = 170;\ - = 171;\ - = 172;\ - = 173;\ - = 174;\ - = 175;\ - = 176;\ - = 177;\ - = 178;\ - = 179;\ - = 180;\ - = 181;\ - = 182;\ - = 183;\ - = 184;\ - = 185;\ - = 186;\ - = 187;\ - = 188;\ - = 189;\ - = 190;\ - = 191;\ - = 192;\ - = 193;\ - = 194;\ - = 195;\ - = 196;\ - = 197;\ - = 198;\ - = 199;\ - = 200;\ - = 201;\ - = 202;\ - = 203;\ - = 204;\ - = 205;\ - = 206;\ - = 207;\ - = 208;\ - = 209;\ - = 210;\ - = 211;\ - = 212;\ - = 213;\ - = 214;\ - = 215;\ - = 216;\ - = 217;\ - = 218;\ - = 219;\ - = 220;\ - = 221;\ - = 222;\ - = 223;\ - = 224;\ - = 225;\ - = 226;\ - = 227;\ - = 228;\ - = 229;\ - = 230;\ - = 231;\ - = 232;\ - = 233;\ - = 234;\ - = 235;\ - = 236;\ - = 237;\ - = 238;\ - = 239;\ - = 240;\ - = 241;\ - = 242;\ - = 243;\ - = 244;\ - = 245;\ - = 246;\ - = 247;\ - = 248;\ - = 249;\ - = 250;\ - = 251;\ - = 252;\ - = 253;\ - = 254;\ - = 255;\ - };\ -\ - xkb_symbols \"squeekboard\" {\ -\ - name[Group1] = \"Letters\";\ - name[Group2] = \"Numbers/Symbols\";\ -\ - key { [ q, Q ], [ 1, asciitilde ] };\ - key { [ w, W ], [ 2, quoteleft ] };\ - key { [ e, E ], [ 3, bar ] };\ - key { [ r, R ], [ 4, U00B7 ] };\ - key { [ t, T ], [ 5, squareroot ] };\ - key { [ y, Y ], [ 6, Greek_pi ] };\ - key { [ u, U ], [ 7, division ] };\ - key { [ i, I ], [ 8, multiply ] };\ - key { [ o, O ], [ 9, paragraph ] };\ - key { [ p, P ], [ 0, U25B3 ] };\ - key { [ aring, Aring ], [ U00B1, U00A7 ] };\ - key { [ a, A ], [ at, copyright ] };\ - key { [ s, S ], [ numbersign, U00AE ] };\ - key { [ d, D ], [ dollar, U00A3 ] };\ - key { [ f, F ], [ percent, EuroSign ] };\ - key { [ g, G ], [ ampersand, U00A5 ] };\ - key { [ h, H ], [ minus, underscore ] };\ - key { [ j, J ], [ plus, equal ] };\ - key { [ k, K ], [ U00FC, asciicircum ] };\ - key { [ l, L ], [ U00F6, degree ] };\ - key { [ oslash, Oslash ], [ parenleft, braceleft ] };\ - key { [ ae, AE ], [ parenright, braceright ] };\ - key { [ Return, Return ], [ Return, Return ] };\ - key { [ Shift_L, Shift_L ], [ Shift_L, Shift_L ] };\ - key { [ z, Z ], [ comma, backslash ] };\ - key { [ x, X ], [ quotedbl, slash ] };\ - key { [ c, C ], [ quoteright, less ] };\ - key { [ v, V ], [ colon, greater ] };\ - key { [ b, B ], [ semicolon, equal ] };\ - key { [ n, N ], [ exclam, bracketleft ] };\ - key { [ m, M ], [ question, bracketright ] };\ - key { [ period, period ], [ period, period ] };\ - key { [ preferences, preferences ], [ preferences, preferences ] };\ - key { [ space, space ], [ space, space ] };\ - key { [ BackSpace, BackSpace ], [ BackSpace, BackSpace ] };\ - };\ -\ - xkb_types \"squeekboard\" {\ -\ - type \"TWO_LEVEL\" {\ - modifiers = Shift;\ - map[Shift] = Level2;\ - level_name[Level1] = \"Base\";\ - level_name[Level2] = \"Shift\";\ - };\ - };\ -\ - xkb_compatibility \"squeekboard\" {\ - };\ -};"; From 4e11d071d9a16efbb1b1d2928921dd71fddc172a Mon Sep 17 00:00:00 2001 From: David Boddie Date: Mon, 15 Jul 2019 21:02:52 +0200 Subject: [PATCH 10/13] Add a keymap for the US layout, update the US symbols --- data/keyboards/geometry/compact.xml | 66 +++--- data/keyboards/keymaps/us.xkb | 305 ++++++++++++++++++++++++++++ data/keyboards/symbols/us.xml | 216 ++++++++++---------- data/squeekboard.gresources.xml | 1 + 4 files changed, 450 insertions(+), 138 deletions(-) create mode 100644 data/keyboards/keymaps/us.xkb diff --git a/data/keyboards/geometry/compact.xml b/data/keyboards/geometry/compact.xml index f8dc5afe..141aafe7 100644 --- a/data/keyboards/geometry/compact.xml +++ b/data/keyboards/geometry/compact.xml @@ -3,51 +3,51 @@
- - - - - - - - - - + + + + + + + + + +
- - - - - - - - - + + + + + + + + +
- - - - - - - - - + + + + + + + + +
- - - - - + + + + +
diff --git a/data/keyboards/keymaps/us.xkb b/data/keyboards/keymaps/us.xkb new file mode 100644 index 00000000..44efcbb7 --- /dev/null +++ b/data/keyboards/keymaps/us.xkb @@ -0,0 +1,305 @@ +xkb_keymap { + + xkb_keycodes "squeekboard" { + minimum = 8; + maximum = 255; + = 9; + = 10; + = 11; + = 12; + = 13; + = 14; + = 15; + = 16; + = 17; + = 18; + = 19; + = 20; + = 21; + = 22; + = 23; + = 24; + = 25; + = 26; + = 27; + = 28; + = 29; + = 30; + = 31; + = 32; + = 33; + = 34; + = 35; + = 36; + = 37; + = 38; + = 39; + = 40; + = 41; + = 42; + = 43; + = 44; + = 45; + = 46; + = 47; + = 48; + = 49; + = 50; + = 51; + = 52; + = 53; + = 54; + = 55; + = 56; + = 57; + = 58; + = 59; + = 60; + = 61; + = 62; + = 63; + = 64; + = 65; + = 66; + = 67; + = 68; + = 69; + = 70; + = 71; + = 72; + = 73; + = 74; + = 75; + = 76; + = 77; + = 78; + = 79; + = 80; + = 81; + = 82; + = 83; + = 84; + = 85; + = 86; + = 87; + = 88; + = 89; + = 90; + = 91; + = 92; + = 94; + = 95; + = 96; + = 97; + = 98; + = 99; + = 100; + = 101; + = 102; + = 103; + = 104; + = 105; + = 106; + = 107; + = 108; + = 109; + = 110; + = 111; + = 112; + = 113; + = 114; + = 115; + = 116; + = 117; + = 118; + = 119; + = 120; + = 121; + = 122; + = 123; + = 124; + = 125; + = 126; + = 127; + = 128; + = 129; + = 130; + = 131; + = 132; + = 133; + = 134; + = 135; + = 136; + = 137; + = 138; + = 139; + = 140; + = 141; + = 142; + = 143; + = 144; + = 145; + = 146; + = 147; + = 148; + = 149; + = 150; + = 151; + = 152; + = 153; + = 154; + = 155; + = 156; + = 157; + = 158; + = 159; + = 160; + = 161; + = 162; + = 163; + = 164; + = 165; + = 166; + = 167; + = 168; + = 169; + = 170; + = 171; + = 172; + = 173; + = 174; + = 175; + = 176; + = 177; + = 178; + = 179; + = 180; + = 181; + = 182; + = 183; + = 184; + = 185; + = 186; + = 187; + = 188; + = 189; + = 190; + = 191; + = 192; + = 193; + = 194; + = 195; + = 196; + = 197; + = 198; + = 199; + = 200; + = 201; + = 202; + = 203; + = 204; + = 205; + = 206; + = 207; + = 208; + = 209; + = 210; + = 211; + = 212; + = 213; + = 214; + = 215; + = 216; + = 217; + = 218; + = 219; + = 220; + = 221; + = 222; + = 223; + = 224; + = 225; + = 226; + = 227; + = 228; + = 229; + = 230; + = 231; + = 232; + = 233; + = 234; + = 235; + = 236; + = 237; + = 238; + = 239; + = 240; + = 241; + = 242; + = 243; + = 244; + = 245; + = 246; + = 247; + = 248; + = 249; + = 250; + = 251; + = 252; + = 253; + = 254; + = 255; + }; + + xkb_symbols "squeekboard" { + + name[Group1] = "Letters"; + name[Group2] = "Numbers/Symbols"; + + key { [ q, Q ], [ 1, asciitilde ] }; + key { [ w, W ], [ 2, quoteleft ] }; + key { [ e, E ], [ 3, bar ] }; + key { [ r, R ], [ 4, U00B7 ] }; + key { [ t, T ], [ 5, squareroot ] }; + key { [ y, Y ], [ 6, Greek_pi ] }; + key { [ u, U ], [ 7, division ] }; + key { [ i, I ], [ 8, multiply ] }; + key { [ o, O ], [ 9, paragraph ] }; + key { [ p, P ], [ 0, U25B3 ] }; + key { [ a, A ], [ at, copyright ] }; + key { [ s, S ], [ numbersign, U00AE ] }; + key { [ d, D ], [ dollar, U00A3 ] }; + key { [ f, F ], [ percent, EuroSign ] }; + key { [ g, G ], [ ampersand, U00A5 ] }; + key { [ h, H ], [ minus, underscore ] }; + key { [ j, J ], [ plus, equal ] }; + key { [ k, K ], [ U00FC, asciicircum ] }; + key { [ l, L ], [ U00F6, degree ] }; + key { [ Return, Return ], [ Return, Return ] }; + key { [ Shift_L, Shift_L ], [ Shift_L, Shift_L ] }; + key { [ z, Z ], [ comma, backslash ] }; + key { [ x, X ], [ quotedbl, slash ] }; + key { [ c, C ], [ quoteright, less ] }; + key { [ v, V ], [ colon, greater ] }; + key { [ b, B ], [ semicolon, equal ] }; + key { [ n, N ], [ exclam, bracketleft ] }; + key { [ m, M ], [ question, bracketright ] }; + key { [ period, period ], [ period, period ] }; + key { [ preferences, preferences ], [ preferences, preferences ] }; + key { [ space, space ], [ space, space ] }; + key { [ BackSpace, BackSpace ], [ BackSpace, BackSpace ] }; + }; + + xkb_types "squeekboard" { + + type "TWO_LEVEL" { + modifiers = Shift; + map[Shift] = Level2; + level_name[Level1] = "Base"; + level_name[Level2] = "Shift"; + }; + }; + + xkb_compatibility "squeekboard" { + }; +}; diff --git a/data/keyboards/symbols/us.xml b/data/keyboards/symbols/us.xml index 66d8f0ba..047e968d 100644 --- a/data/keyboards/symbols/us.xml +++ b/data/keyboards/symbols/us.xml @@ -1,115 +1,121 @@ - + - q - Q - 1 - asciitilde + q + Q + 1 + asciitilde - w - W - 2 - quoteleft + w + W + 2 + quoteleft - e - E - 3 - bar + e + E + 3 + bar - r - R - 4 - middledot + r + R + 4 + U00B7 - t - T - 5 + t + T + 5 + squareroot - y - Y - 6 + y + Y + 6 + Greek_pi - u - U - 7 + u + U + 7 + division - i - I - 8 + i + I + 8 + multiply - o - O - 9 + o + O + 9 + paragraph - p - P - 0 + p + P + 0 + U25B3 - a - A - at - copyright + a + A + at + copyright - s - S - numbersign - registeredtrademark + s + S + numbersign + U00AE - d - D - dollar - poundsign + d + D + dollar + U00A3 - f - F - percent - + f + F + percent + EuroSign - g - G - ampersand - yensign + g + G + ampersand + U00A5 - h - H - minus - asciicircum + h + H + minus + underscore - j - J - plus - degreesign + j + J + plus + equal - k - K - parenleft - braceleft + k + K + parenleft + braceleft - l - L - parenright - braceright + l + L + parenright + braceright - Return + Return Shift_L @@ -118,49 +124,49 @@ Shift_L - z - Z - comma - backslash + z + Z + comma + backslash - x - X - quotedbl - slash + x + X + quotedbl + slash - c - C - quoteright - less + c + C + quoteright + less - v - V - colon - greater + v + V + colon + greater - b - B - semicolon - equal + b + B + semicolon + equal - n - N - exclam - bracketleft + n + N + exclam + bracketleft - m - M - question - bracketright + m + M + question + bracketright - period + period show-numbers @@ -168,13 +174,13 @@ show-letters show-letters - - preferences + + preferences - space + space - backspace + backspace diff --git a/data/squeekboard.gresources.xml b/data/squeekboard.gresources.xml index 60bc29fb..b53dc6a1 100644 --- a/data/squeekboard.gresources.xml +++ b/data/squeekboard.gresources.xml @@ -6,6 +6,7 @@ keyboards/geometry/extended.xml keyboards/keyboards.xml keyboards/keymaps/nb.xkb + keyboards/keymaps/us.xkb keyboards/symbols/ar.xml keyboards/symbols/as-inscript.xml keyboards/symbols/be.xml From a8371af9c0c8f2451117034329e47740acaedf63 Mon Sep 17 00:00:00 2001 From: David Boddie Date: Mon, 15 Jul 2019 21:03:17 +0200 Subject: [PATCH 11/13] Fall back to US layout and keymap if needed --- eekboard/eekboard-context-service.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/eekboard/eekboard-context-service.c b/eekboard/eekboard-context-service.c index 93c45a9b..15a722b8 100644 --- a/eekboard/eekboard-context-service.c +++ b/eekboard/eekboard-context-service.c @@ -87,7 +87,7 @@ G_DEFINE_TYPE_WITH_PRIVATE (EekboardContextService, eekboard_context_service, G_ /*static Display *display = NULL; */ gchar * -get_keymap_from_resource(const gchar *keyboard_type) +get_keymap_from_resource(const gchar *keyboard_type, gboolean fallback) { g_autoptr (GFile) file = NULL; g_autoptr (GFileInfo) info = NULL; @@ -98,6 +98,9 @@ get_keymap_from_resource(const gchar *keyboard_type) g_autofree gchar *path = NULL; GError *error = NULL; + if (fallback) + g_debug ("falling back to loading a %s keymap", keyboard_type); + path = g_strconcat ("resource:///sm/puri/squeekboard/keyboards/keymaps/", keyboard_type, ".xkb", NULL); file = g_file_new_for_uri (path); @@ -124,7 +127,9 @@ get_keymap_from_resource(const gchar *keyboard_type) return g_utf8_make_valid (contents, -1); keymap_error: - g_error ("failed to load keymap from resource: %s", error->message); + if (fallback) + g_error ("failed to load keymap from resource: %s", error->message); + g_error_free (error); return NULL; } @@ -192,17 +197,22 @@ eekboard_context_service_real_create_keyboard (EekboardContextService *self, struct xkb_rule_names rules = { 0 }; rules.layout = strdup(keyboard_type); */ - struct xkb_keymap *keymap = xkb_keymap_new_from_string(context, - get_keymap_from_resource(keyboard_type), + char *keymap_str = get_keymap_from_resource(keyboard_type, FALSE); + if (!keymap_str) + keymap_str = get_keymap_from_resource("us", TRUE); + + struct xkb_keymap *keymap = xkb_keymap_new_from_string(context, keymap_str, XKB_KEYMAP_FORMAT_TEXT_V1, XKB_KEYMAP_COMPILE_NO_FLAGS); + free(keymap_str); + xkb_context_unref(context); if (!keymap) { g_error("Bad keymap"); } keyboard->keymap = keymap; - char *keymap_str = xkb_keymap_get_as_string(keymap, XKB_KEYMAP_FORMAT_TEXT_V1); + keymap_str = xkb_keymap_get_as_string(keymap, XKB_KEYMAP_FORMAT_TEXT_V1); keyboard->keymap_len = strlen(keymap_str) + 1; g_autofree char *path = strdup("/eek_keymap-XXXXXX"); From 7e9c3b40bbfe3d068b4bffabcc1e5128ef7f84d4 Mon Sep 17 00:00:00 2001 From: David Boddie Date: Mon, 15 Jul 2019 21:06:23 +0200 Subject: [PATCH 12/13] Remove debugging code --- eekboard/key-emitter.c | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/eekboard/key-emitter.c b/eekboard/key-emitter.c index 9a07e015..d960c223 100644 --- a/eekboard/key-emitter.c +++ b/eekboard/key-emitter.c @@ -137,7 +137,6 @@ int send_virtual_keyboard_key( unsigned is_press, uint32_t timestamp ) { - g_debug("send_virtual_keyboard_key: %u", keycode); zwp_virtual_keyboard_v1_key(keyboard, timestamp, keycode, (unsigned)is_press); return 0; } @@ -159,7 +158,6 @@ send_fake_modifiers_events (SeatEmitter *emitter, if (modifiers & EEK_MOD1_MASK) { proto_modifiers |= 1<virtual_keyboard, proto_modifiers, 0, 0, emitter->group); } @@ -174,7 +172,6 @@ send_fake_key_event (SeatEmitter *emitter, guint old_keysym = xkeysym; g_return_if_fail (xkeysym > 0); - g_debug("send_fake_key_event: %i %i", xkeysym, keyboard_modifiers); guint keycode; if (!get_keycode_from_gdk_keymap (emitter, xkeysym, &keycode, &modifiers)) { @@ -217,7 +214,6 @@ send_fake_key_events (SeatEmitter *emitter, if (eek_symbol_is_modifier (symbol)) return; - g_debug("symbol: %s", eek_symbol_get_name(symbol)); /* If symbol is a text, convert chars in it to keysym */ if (EEK_IS_TEXT(symbol)) { const gchar *utf8 = eek_text_get_text (EEK_TEXT(symbol)); @@ -247,7 +243,6 @@ send_fake_key_events (SeatEmitter *emitter, } if (EEK_IS_KEYSYM(symbol)) { - g_debug("keysym: %u", eek_keysym_get_xkeysym(EEK_KEYSYM(symbol))); guint xkeysym = eek_keysym_get_xkeysym (EEK_KEYSYM(symbol)); send_fake_key_event (emitter, xkeysym, keyboard_modifiers, pressed, timestamp); } @@ -301,10 +296,6 @@ send_fake_key (SeatEmitter *emitter, guint level = eek_element_get_level(EEK_ELEMENT(keyboard)); uint32_t group = (level / 2); - g_debug("send_fake_key: %u %u", keycode, keyboard_modifiers); - g_debug("level: %u", level); - g_debug("group: %u", group); - if (keyboard_modifiers & EEK_SHIFT_MASK) proto_modifiers |= 1<keyboards_head = g_slist_next (client->keyboards_head); From f72ddc81298f2d80b00ef4c3e70315f14079e2b0 Mon Sep 17 00:00:00 2001 From: David Boddie Date: Tue, 16 Jul 2019 14:06:49 +0200 Subject: [PATCH 13/13] Undo formatting changes --- data/keyboards/geometry/compact.xml | 66 ++++++++++++------------- data/keyboards/geometry/extended.xml | 72 ++++++++++++++-------------- 2 files changed, 69 insertions(+), 69 deletions(-) diff --git a/data/keyboards/geometry/compact.xml b/data/keyboards/geometry/compact.xml index 141aafe7..d2ef4914 100644 --- a/data/keyboards/geometry/compact.xml +++ b/data/keyboards/geometry/compact.xml @@ -3,51 +3,51 @@
- - - - - - - - - - + + + + + + + + + +
- - - - - - - - - + + + + + + + + +
- - - - - - - - - + + + + + + + + +
- - - - - + + + + +
diff --git a/data/keyboards/geometry/extended.xml b/data/keyboards/geometry/extended.xml index 50938efb..f855cebc 100644 --- a/data/keyboards/geometry/extended.xml +++ b/data/keyboards/geometry/extended.xml @@ -7,54 +7,54 @@ values in the range from 8 to 255. -->
- - - - - - - - - - - + + + + + + + + + + +
- - - - - - - - - - - + + + + + + + + + + +
- - - - - - - - - + + + + + + + + +
- - - - - + + + + +