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:
		@ -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);
 | 
				
			||||||
 | 
					    GList *list, *head;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    list = eek_keyboard_get_pressed_keys (priv->keyboard);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (key) {
 | 
					    if (key) {
 | 
				
			||||||
        GList *list, *head;
 | 
					 | 
				
			||||||
        gboolean found = FALSE;
 | 
					        gboolean found = FALSE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        list = eek_keyboard_get_pressed_keys (priv->keyboard);
 | 
					 | 
				
			||||||
        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);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user