Fix releasing buttons when dragged
This commit is contained in:
		@ -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);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user