Merge branch 'functioning-views' into 'master'
Basic functioning views See merge request Librem5/squeekboard!57
This commit is contained in:
@ -103,7 +103,7 @@
|
|||||||
<section angle="0">
|
<section angle="0">
|
||||||
<bounds x="0" y="0" width="608.7804" height="201.3658"/>
|
<bounds x="0" y="0" width="608.7804" height="201.3658"/>
|
||||||
<row orientation="1">
|
<row orientation="1">
|
||||||
<key keycode="66" name="ALTGR" oref="altline">
|
<key keycode="0" name="ABC123" oref="altline">
|
||||||
<bounds x="62.43902" y="162.3414" width="48.39024" height="37.46341"/>
|
<bounds x="62.43902" y="162.3414" width="48.39024" height="37.46341"/>
|
||||||
</key>
|
</key>
|
||||||
<key keycode="150" name="I150" oref="altline">
|
<key keycode="150" name="I150" oref="altline">
|
||||||
|
|||||||
@ -165,11 +165,11 @@
|
|||||||
<keysym keyval="92">backslash</keysym>
|
<keysym keyval="92">backslash</keysym>
|
||||||
<keysym keyval="124">bar</keysym>
|
<keysym keyval="124">bar</keysym>
|
||||||
</key>
|
</key>
|
||||||
<key keycode="66" name="ALTGR">
|
<key keycode="0" name="ABC123">
|
||||||
<keysym keyval="65027">ISO_Level3_Shift</keysym>
|
<symbol label="123">show-numbers</symbol>
|
||||||
<keysym keyval="65027">ISO_Level3_Shift</keysym>
|
<symbol label="123">show-numbers</symbol>
|
||||||
<keysym keyval="65027" label="ABC">ISO_Level3_Shift</keysym>
|
<symbol label="ABC">show-letters</symbol>
|
||||||
<keysym keyval="65027" label="ABC">ISO_Level3_Shift</keysym>
|
<symbol label="ABC">show-letters</symbol>
|
||||||
</key>
|
</key>
|
||||||
<key keycode="38" name="AC01">
|
<key keycode="38" name="AC01">
|
||||||
<keysym keyval="97">a</keysym>
|
<keysym keyval="97">a</keysym>
|
||||||
|
|||||||
@ -211,13 +211,23 @@ eek_keyboard_get_property (GObject *object,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
set_level_from_modifiers (EekKeyboard *self)
|
set_level_from_modifiers (EekKeyboard *self, EekKey *key)
|
||||||
{
|
{
|
||||||
EekKeyboardPrivate *priv = EEK_KEYBOARD_GET_PRIVATE(self);
|
EekKeyboardPrivate *priv = EEK_KEYBOARD_GET_PRIVATE(self);
|
||||||
|
|
||||||
/* The levels are: 0 Letters, 1 Upper case letters, 2 Numbers, 3 Symbols */
|
/* The levels are: 0 Letters, 1 Upper case letters, 2 Numbers, 3 Symbols */
|
||||||
gint level = ((priv->modifiers & priv->alt_gr_mask) ? 2 : 0) |
|
|
||||||
((priv->modifiers & EEK_SHIFT_MASK) ? 1 : 0);
|
/* Use the numbers/letters bit from the old level */
|
||||||
|
gint level = priv->old_level & 2;
|
||||||
|
|
||||||
|
/* Handle non-emitting keys */
|
||||||
|
if (key && (eek_key_get_keycode(key) == 0)) {
|
||||||
|
const gchar *name = eek_element_get_name(EEK_ELEMENT(key));
|
||||||
|
if (g_strcmp0(name, "ABC123") == 0)
|
||||||
|
level ^= 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
level |= ((priv->modifiers & EEK_SHIFT_MASK) ? 1 : 0);
|
||||||
|
|
||||||
switch (priv->old_level) {
|
switch (priv->old_level) {
|
||||||
case VIEW_LETTERS_UPPER:
|
case VIEW_LETTERS_UPPER:
|
||||||
@ -249,6 +259,8 @@ set_level_from_modifiers (EekKeyboard *self)
|
|||||||
|
|
||||||
if (level == VIEW_NUMBERS || level == VIEW_SYMBOLS)
|
if (level == VIEW_NUMBERS || level == VIEW_SYMBOLS)
|
||||||
priv->modifier_behavior = EEK_MODIFIER_BEHAVIOR_LOCK;
|
priv->modifier_behavior = EEK_MODIFIER_BEHAVIOR_LOCK;
|
||||||
|
else if (level == VIEW_LETTERS_UPPER)
|
||||||
|
priv->modifier_behavior = EEK_MODIFIER_BEHAVIOR_LATCH;
|
||||||
|
|
||||||
priv->old_level = level;
|
priv->old_level = level;
|
||||||
eek_element_set_level (EEK_ELEMENT(self), level);
|
eek_element_set_level (EEK_ELEMENT(self), level);
|
||||||
@ -306,7 +318,7 @@ void eek_keyboard_press_key(EekKeyboard *keyboard, EekKey *key, guint32 timestam
|
|||||||
EekModifierType modifier = eek_symbol_get_modifier_mask (symbol);
|
EekModifierType modifier = eek_symbol_get_modifier_mask (symbol);
|
||||||
if (priv->modifier_behavior == EEK_MODIFIER_BEHAVIOR_NONE) {
|
if (priv->modifier_behavior == EEK_MODIFIER_BEHAVIOR_NONE) {
|
||||||
set_modifiers_with_key (keyboard, key, priv->modifiers | modifier);
|
set_modifiers_with_key (keyboard, key, priv->modifiers | modifier);
|
||||||
set_level_from_modifiers (keyboard);
|
set_level_from_modifiers (keyboard, key);
|
||||||
}
|
}
|
||||||
|
|
||||||
// "Borrowed" from eek-context-service; doesn't influence the state but forwards the event
|
// "Borrowed" from eek-context-service; doesn't influence the state but forwards the event
|
||||||
@ -355,7 +367,7 @@ void eek_keyboard_release_key( EekKeyboard *keyboard,
|
|||||||
(priv->modifiers ^ modifier) & modifier);
|
(priv->modifiers ^ modifier) & modifier);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
set_level_from_modifiers (keyboard);
|
set_level_from_modifiers (keyboard, key);
|
||||||
|
|
||||||
// "Borrowed" from eek-context-service; doesn't influence the state but forwards the event
|
// "Borrowed" from eek-context-service; doesn't influence the state but forwards the event
|
||||||
|
|
||||||
@ -621,7 +633,7 @@ eek_keyboard_set_modifiers (EekKeyboard *keyboard,
|
|||||||
{
|
{
|
||||||
g_return_if_fail (EEK_IS_KEYBOARD(keyboard));
|
g_return_if_fail (EEK_IS_KEYBOARD(keyboard));
|
||||||
keyboard->priv->modifiers = modifiers;
|
keyboard->priv->modifiers = modifiers;
|
||||||
set_level_from_modifiers (keyboard);
|
set_level_from_modifiers (keyboard, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user