diff --git a/data/keyboards/symbols/us.xml b/data/keyboards/symbols/us.xml
index b55f6e77..4c1ed959 100644
--- a/data/keyboards/symbols/us.xml
+++ b/data/keyboards/symbols/us.xml
@@ -167,6 +167,9 @@
ISO_Level3_Shift
+ ISO_Level3_Shift
+ ISO_Level3_Shift
+ ISO_Level3_Shift
a
@@ -235,6 +238,9 @@
Shift_L
+ Shift_L
+ Shift_L
+ Shift_L
z
diff --git a/eek/eek-keyboard.c b/eek/eek-keyboard.c
index d67a13da..313f5c38 100644
--- a/eek/eek-keyboard.c
+++ b/eek/eek-keyboard.c
@@ -208,10 +208,22 @@ set_level_from_modifiers (EekKeyboard *self)
EekKeyboardPrivate *priv = EEK_KEYBOARD_GET_PRIVATE(self);
gint level = 0;
- if (priv->modifiers & priv->alt_gr_mask)
+ if (priv->modifiers & priv->alt_gr_mask) {
+ /* Alt-Gr is the 123 and ABC keys */
+ priv->modifier_behavior = EEK_MODIFIER_BEHAVIOR_LOCK;
level |= 2;
- if (priv->modifiers & EEK_SHIFT_MASK)
+ }
+
+ if (priv->modifiers & EEK_SHIFT_MASK) {
+ /* Left Shift is the Shift and =/+ keys */
level |= 1;
+
+ if (level == 1)
+ priv->modifier_behavior = EEK_MODIFIER_BEHAVIOR_LATCH;
+ else
+ priv->modifier_behavior = EEK_MODIFIER_BEHAVIOR_LOCK;
+ }
+
eek_element_set_level (EEK_ELEMENT(self), level);
}