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