Merge branch 'functioning-views' into 'master'

Basic functioning views

See merge request Librem5/squeekboard!57
This commit is contained in:
David Boddie
2019-07-11 22:58:50 +00:00
3 changed files with 24 additions and 12 deletions

View File

@ -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">

View File

@ -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>

View File

@ -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);
} }
/** /**