Merge branch 'release-keys-when-focus-is-lost' into 'master'

Release pressed keys when dragging outside the keyboard

See merge request Librem5/squeekboard!119
This commit is contained in:
Dorota Czaplejewicz
2019-08-04 11:00:20 +00:00

View File

@ -172,16 +172,17 @@ static void drag(EekGtkKeyboard *self,
gdouble x, gdouble y, guint32 time) { gdouble x, gdouble y, guint32 time) {
EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (self); EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (self);
EekKey *key = eek_renderer_find_key_by_position (priv->renderer, x, y); EekKey *key = eek_renderer_find_key_by_position (priv->renderer, x, y);
if (key) {
GList *list, *head; GList *list, *head;
gboolean found = FALSE;
list = eek_keyboard_get_pressed_keys (priv->keyboard); list = eek_keyboard_get_pressed_keys (priv->keyboard);
if (key) {
gboolean found = FALSE;
for (head = list; head; head = g_list_next (head)) { for (head = list; head; head = g_list_next (head)) {
if (head->data == key) if (head->data == key) {
found = TRUE; found = TRUE;
else { } else {
eek_keyboard_release_key(priv->keyboard, EEK_KEY(head->data), time); eek_keyboard_release_key(priv->keyboard, EEK_KEY(head->data), time);
on_key_released(key, self); on_key_released(key, self);
} }
@ -192,6 +193,12 @@ static void drag(EekGtkKeyboard *self,
eek_keyboard_press_key(priv->keyboard, key, time); eek_keyboard_press_key(priv->keyboard, key, time);
on_key_pressed(key, self); on_key_pressed(key, self);
} }
} else {
for (head = list; head; head = g_list_next (head)) {
eek_keyboard_release_key(priv->keyboard, EEK_KEY(head->data), time);
on_key_released(key, self);
}
g_list_free (list);
} }
} }