Fix releasing buttons when dragged

This commit is contained in:
Dorota Czaplejewicz
2019-04-06 18:46:33 +00:00
parent 5cc407986b
commit 70fda8ba64

View File

@ -77,6 +77,7 @@ struct _EekboardContextServicePrivate {
gulong key_pressed_handler; gulong key_pressed_handler;
gulong key_released_handler; gulong key_released_handler;
gulong key_cancelled_handler;
EekKey *repeat_key; EekKey *repeat_key;
guint repeat_timeout_id; guint repeat_timeout_id;
@ -621,6 +622,12 @@ disconnect_keyboard_signals (EekboardContextService *context)
context->priv->key_released_handler)) context->priv->key_released_handler))
g_signal_handler_disconnect (context->priv->keyboard, g_signal_handler_disconnect (context->priv->keyboard,
context->priv->key_released_handler); context->priv->key_released_handler);
if (g_signal_handler_is_connected (context->priv->keyboard,
context->priv->key_cancelled_handler)) {
g_signal_handler_disconnect (context->priv->keyboard,
context->priv->key_cancelled_handler);
}
} }
static void static void
@ -749,6 +756,15 @@ on_key_released (EekKeyboard *keyboard,
on_key_activated(keyboard, key, context, FALSE); on_key_activated(keyboard, key, context, FALSE);
} }
static void
on_key_cancelled (EekKeyboard *keyboard,
EekKey *key,
gpointer user_data)
{
on_key_released(keyboard, key, user_data);
// TODO: special handling when composing text via text-input? text may not be committed until button released
}
static void static void
connect_keyboard_signals (EekboardContextService *context) connect_keyboard_signals (EekboardContextService *context)
{ {
@ -760,6 +776,10 @@ connect_keyboard_signals (EekboardContextService *context)
g_signal_connect (context->priv->keyboard, "key-released", g_signal_connect (context->priv->keyboard, "key-released",
G_CALLBACK(on_key_released), G_CALLBACK(on_key_released),
context); context);
context->priv->key_cancelled_handler =
g_signal_connect (context->priv->keyboard, "key-cancelled",
G_CALLBACK(on_key_cancelled),
context);
} }
/** /**