Resolve AltGr modifier at run time.
This commit is contained in:
@ -68,7 +68,10 @@ struct _EekKeyboardPrivate
|
|||||||
EekModifierBehavior modifier_behavior;
|
EekModifierBehavior modifier_behavior;
|
||||||
EekModifierType modifiers;
|
EekModifierType modifiers;
|
||||||
GArray *outline_array;
|
GArray *outline_array;
|
||||||
|
|
||||||
|
/* modifiers dynamically assigned at run time */
|
||||||
EekModifierType num_lock_mask;
|
EekModifierType num_lock_mask;
|
||||||
|
EekModifierType alt_gr_mask;
|
||||||
};
|
};
|
||||||
|
|
||||||
static EekSerializableIface *eek_keyboard_parent_serializable_iface;
|
static EekSerializableIface *eek_keyboard_parent_serializable_iface;
|
||||||
@ -309,7 +312,7 @@ set_level_from_modifiers (EekKeyboard *self)
|
|||||||
EekKeyboardPrivate *priv = EEK_KEYBOARD_GET_PRIVATE(self);
|
EekKeyboardPrivate *priv = EEK_KEYBOARD_GET_PRIVATE(self);
|
||||||
gint level = 0;
|
gint level = 0;
|
||||||
|
|
||||||
if (priv->modifiers & EEK_MOD5_MASK)
|
if (priv->modifiers & priv->alt_gr_mask)
|
||||||
level |= 2;
|
level |= 2;
|
||||||
if (priv->modifiers & EEK_SHIFT_MASK)
|
if (priv->modifiers & EEK_SHIFT_MASK)
|
||||||
level |= 1;
|
level |= 1;
|
||||||
@ -805,6 +808,13 @@ eek_keyboard_get_outline (EekKeyboard *keyboard,
|
|||||||
return &g_array_index (priv->outline_array, EekOutline, oref - 1);
|
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
|
void
|
||||||
eek_keyboard_set_num_lock_mask (EekKeyboard *keyboard,
|
eek_keyboard_set_num_lock_mask (EekKeyboard *keyboard,
|
||||||
EekModifierType num_lock_mask)
|
EekModifierType num_lock_mask)
|
||||||
@ -817,6 +827,13 @@ eek_keyboard_set_num_lock_mask (EekKeyboard *keyboard,
|
|||||||
priv->num_lock_mask = num_lock_mask;
|
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
|
EekModifierType
|
||||||
eek_keyboard_get_num_lock_mask (EekKeyboard *keyboard)
|
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;
|
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;
|
||||||
|
}
|
||||||
|
|||||||
@ -153,5 +153,11 @@ void eek_keyboard_set_num_lock_mask
|
|||||||
EekModifierType eek_keyboard_get_num_lock_mask
|
EekModifierType eek_keyboard_get_num_lock_mask
|
||||||
(EekKeyboard *keyboard);
|
(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
|
G_END_DECLS
|
||||||
#endif /* EEK_KEYBOARD_H */
|
#endif /* EEK_KEYBOARD_H */
|
||||||
|
|||||||
@ -325,9 +325,13 @@ eek_xkb_layout_real_create_keyboard (EekLayout *self,
|
|||||||
bounds.height = initial_height;
|
bounds.height = initial_height;
|
||||||
eek_element_set_bounds (EEK_ELEMENT(keyboard), &bounds);
|
eek_element_set_bounds (EEK_ELEMENT(keyboard), &bounds);
|
||||||
|
|
||||||
|
/* resolve modifiers dynamically assigned at run time */
|
||||||
eek_keyboard_set_num_lock_mask (keyboard,
|
eek_keyboard_set_num_lock_mask (keyboard,
|
||||||
XkbKeysymToModifiers (priv->display,
|
XkbKeysymToModifiers (priv->display,
|
||||||
XK_Num_Lock));
|
XK_Num_Lock));
|
||||||
|
eek_keyboard_set_alt_gr_mask (keyboard,
|
||||||
|
XkbKeysymToModifiers (priv->display,
|
||||||
|
XK_ISO_Level3_Shift));
|
||||||
|
|
||||||
if (priv->shape_oref_hash)
|
if (priv->shape_oref_hash)
|
||||||
g_hash_table_destroy (priv->shape_oref_hash);
|
g_hash_table_destroy (priv->shape_oref_hash);
|
||||||
|
|||||||
Reference in New Issue
Block a user