Release buttons directly when unmapping the keyboard

This commit is contained in:
David Boddie
2019-08-27 20:04:11 +00:00
parent 531a87825c
commit 1ae8d072a6

View File

@ -284,18 +284,15 @@ eek_gtk_keyboard_real_unmap (GtkWidget *self)
eek_gtk_keyboard_get_instance_private (EEK_GTK_KEYBOARD (self)); eek_gtk_keyboard_get_instance_private (EEK_GTK_KEYBOARD (self));
if (priv->keyboard) { if (priv->keyboard) {
GList *list, *head; GList *head;
/* Make a copy of HEAD before sending "released" signal on for (head = priv->keyboard->pressed_buttons; head; head = g_list_next (head)) {
elements, so that the default handler of /* Unlike other places where we call this, we don't call
EekKeyboard::key-released signal can remove elements from its on_button_released afterwards since we don't want to queue a
internal copy */ redraw. */
list = g_list_copy(priv->keyboard->pressed_buttons); eek_keyboard_release_button(priv->keyboard, head->data,
for (head = list; head; head = g_list_next (head)) { gdk_event_get_time(NULL));
g_log("squeek", G_LOG_LEVEL_DEBUG, "emit EekKey released");
g_signal_emit_by_name (head->data, "released");
} }
g_list_free (list);
} }
GTK_WIDGET_CLASS (eek_gtk_keyboard_parent_class)->unmap (self); GTK_WIDGET_CLASS (eek_gtk_keyboard_parent_class)->unmap (self);
@ -352,14 +349,12 @@ eek_gtk_keyboard_dispose (GObject *object)
} }
if (priv->keyboard) { if (priv->keyboard) {
GList *list, *head; GList *head;
list = g_list_copy(priv->keyboard->pressed_buttons); for (head = priv->keyboard->pressed_buttons; head; head = g_list_next (head)) {
for (head = list; head; head = g_list_next (head)) { eek_keyboard_release_button(priv->keyboard, head->data,
g_log("squeek", G_LOG_LEVEL_DEBUG, "emit EekKey pressed"); gdk_event_get_time(NULL));
g_signal_emit_by_name (head->data, "released", level_keyboard_current(priv->keyboard));
} }
g_list_free (list);
priv->keyboard = NULL; priv->keyboard = NULL;
} }