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");