diff --git a/eek/eek-keyboard.c b/eek/eek-keyboard.c index 14b11436..81e30462 100644 --- a/eek/eek-keyboard.c +++ b/eek/eek-keyboard.c @@ -68,7 +68,10 @@ struct _EekKeyboardPrivate EekModifierBehavior modifier_behavior; EekModifierType modifiers; GArray *outline_array; + + /* modifiers dynamically assigned at run time */ EekModifierType num_lock_mask; + EekModifierType alt_gr_mask; }; static EekSerializableIface *eek_keyboard_parent_serializable_iface; @@ -309,7 +312,7 @@ set_level_from_modifiers (EekKeyboard *self) EekKeyboardPrivate *priv = EEK_KEYBOARD_GET_PRIVATE(self); gint level = 0; - if (priv->modifiers & EEK_MOD5_MASK) + if (priv->modifiers & priv->alt_gr_mask) level |= 2; if (priv->modifiers & EEK_SHIFT_MASK) level |= 1; @@ -805,6 +808,13 @@ eek_keyboard_get_outline (EekKeyboard *keyboard, return &g_array_index (priv->outline_array, EekOutline, oref - 1); } +/** + * eek_keyboard_set_num_lock_mask: + * @keyboard: an #EekKeyboard + * @num_lock_mask: an #EekModifierType + * + * Set modifier mask used as Num_Lock. + */ void eek_keyboard_set_num_lock_mask (EekKeyboard *keyboard, EekModifierType num_lock_mask) @@ -817,6 +827,13 @@ eek_keyboard_set_num_lock_mask (EekKeyboard *keyboard, priv->num_lock_mask = num_lock_mask; } +/** + * eek_keyboard_get_num_lock_mask: + * @keyboard: an #EekKeyboard + * + * Get modifier mask used as Num_Lock. + * Returns: an #EekModifierType + */ EekModifierType eek_keyboard_get_num_lock_mask (EekKeyboard *keyboard) { @@ -827,3 +844,40 @@ eek_keyboard_get_num_lock_mask (EekKeyboard *keyboard) return priv->num_lock_mask; } + +/** + * eek_keyboard_set_alt_gr_mask: + * @keyboard: an #EekKeyboard + * @alt_gr_mask: an #EekModifierType + * + * Set modifier mask used as Alt_Gr. + */ +void +eek_keyboard_set_alt_gr_mask (EekKeyboard *keyboard, + EekModifierType alt_gr_mask) +{ + EekKeyboardPrivate *priv; + + g_assert (EEK_IS_KEYBOARD(keyboard)); + priv = EEK_KEYBOARD_GET_PRIVATE(keyboard); + + priv->alt_gr_mask = alt_gr_mask; +} + +/** + * eek_keyboard_get_alt_gr_mask: + * @keyboard: an #EekKeyboard + * + * Get modifier mask used as Alt_Gr. + * Returns: an #EekModifierType + */ +EekModifierType +eek_keyboard_get_alt_gr_mask (EekKeyboard *keyboard) +{ + EekKeyboardPrivate *priv; + + g_assert (EEK_IS_KEYBOARD(keyboard)); + priv = EEK_KEYBOARD_GET_PRIVATE(keyboard); + + return priv->alt_gr_mask; +} diff --git a/eek/eek-keyboard.h b/eek/eek-keyboard.h index d8f9c873..118be15f 100644 --- a/eek/eek-keyboard.h +++ b/eek/eek-keyboard.h @@ -153,5 +153,11 @@ void eek_keyboard_set_num_lock_mask EekModifierType eek_keyboard_get_num_lock_mask (EekKeyboard *keyboard); +void eek_keyboard_set_alt_gr_mask + (EekKeyboard *keyboard, + EekModifierType alt_gr_mask); +EekModifierType eek_keyboard_get_alt_gr_mask + (EekKeyboard *keyboard); + G_END_DECLS #endif /* EEK_KEYBOARD_H */ diff --git a/eek/eek-xkb-layout.c b/eek/eek-xkb-layout.c index 414a1e5d..fc8ecd9a 100644 --- a/eek/eek-xkb-layout.c +++ b/eek/eek-xkb-layout.c @@ -325,9 +325,13 @@ eek_xkb_layout_real_create_keyboard (EekLayout *self, bounds.height = initial_height; eek_element_set_bounds (EEK_ELEMENT(keyboard), &bounds); + /* resolve modifiers dynamically assigned at run time */ eek_keyboard_set_num_lock_mask (keyboard, XkbKeysymToModifiers (priv->display, XK_Num_Lock)); + eek_keyboard_set_alt_gr_mask (keyboard, + XkbKeysymToModifiers (priv->display, + XK_ISO_Level3_Shift)); if (priv->shape_oref_hash) g_hash_table_destroy (priv->shape_oref_hash);