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