Make sure that a key is not pressed when sending new "pressed" event of it.
This commit is contained in:
@ -175,7 +175,7 @@ eek_gtk_keyboard_real_button_press_event (GtkWidget *self,
|
|||||||
|
|
||||||
if (priv->dragged_key && priv->dragged_key != key)
|
if (priv->dragged_key && priv->dragged_key != key)
|
||||||
g_signal_emit_by_name (priv->dragged_key, "released", priv->keyboard);
|
g_signal_emit_by_name (priv->dragged_key, "released", priv->keyboard);
|
||||||
if (key) {
|
if (key && !eek_key_is_pressed (key)) {
|
||||||
priv->dragged_key = key;
|
priv->dragged_key = key;
|
||||||
g_signal_emit_by_name (key, "pressed", priv->keyboard);
|
g_signal_emit_by_name (key, "pressed", priv->keyboard);
|
||||||
}
|
}
|
||||||
@ -188,11 +188,6 @@ eek_gtk_keyboard_real_button_release_event (GtkWidget *self,
|
|||||||
GdkEventButton *event)
|
GdkEventButton *event)
|
||||||
{
|
{
|
||||||
EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(self);
|
EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(self);
|
||||||
EekKey *key;
|
|
||||||
|
|
||||||
key = eek_renderer_find_key_by_position (priv->renderer,
|
|
||||||
(gdouble)event->x,
|
|
||||||
(gdouble)event->y);
|
|
||||||
|
|
||||||
if (priv->dragged_key) {
|
if (priv->dragged_key) {
|
||||||
g_signal_emit_by_name (priv->dragged_key, "released", priv->keyboard);
|
g_signal_emit_by_name (priv->dragged_key, "released", priv->keyboard);
|
||||||
|
|||||||
@ -468,52 +468,37 @@ get_fakekey_modifiers (EekModifierType modifiers)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
on_key_pressed (EekboardKeyboard *keyboard,
|
on_key_pressed (EekKeyboard *keyboard,
|
||||||
guint keycode,
|
EekKey *key,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
EekboardSystemClient *client = user_data;
|
EekboardSystemClient *client = user_data;
|
||||||
EekKey *key;
|
|
||||||
EekSymbol *symbol;
|
EekSymbol *symbol;
|
||||||
EekModifierType modifiers;
|
EekModifierType modifiers;
|
||||||
|
FakeKeyModifier fakekey_modefiers;
|
||||||
|
guint keycode;
|
||||||
|
|
||||||
g_assert (client->fakekey);
|
g_assert (client->fakekey);
|
||||||
|
|
||||||
modifiers = eek_keyboard_get_modifiers (client->description);
|
modifiers = eek_keyboard_get_modifiers (client->description);
|
||||||
key = eek_keyboard_find_key_by_keycode (client->description, keycode);
|
fakekey_modefiers = get_fakekey_modifiers (modifiers);
|
||||||
if (!key) {
|
|
||||||
// g_debug ("Can't find key for keycode %u", keycode);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
symbol = eek_key_get_symbol_with_fallback (key, 0, 0);
|
symbol = eek_key_get_symbol_with_fallback (key, 0, 0);
|
||||||
|
keycode = eek_key_get_keycode (key);
|
||||||
if (EEK_IS_KEYSYM(symbol) && !eek_symbol_is_modifier (symbol)) {
|
if (EEK_IS_KEYSYM(symbol) && !eek_symbol_is_modifier (symbol)) {
|
||||||
fakekey_send_keyevent (client->fakekey,
|
fakekey_send_keyevent (client->fakekey, keycode, True, modifiers);
|
||||||
keycode,
|
fakekey_send_keyevent (client->fakekey, keycode, False, modifiers);
|
||||||
True,
|
|
||||||
get_fakekey_modifiers (modifiers));
|
|
||||||
fakekey_send_keyevent (client->fakekey,
|
|
||||||
keycode,
|
|
||||||
False,
|
|
||||||
get_fakekey_modifiers (modifiers));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
on_key_released (EekboardKeyboard *keyboard,
|
on_key_released (EekKeyboard *keyboard,
|
||||||
guint keycode,
|
EekKey *key,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
EekboardSystemClient *client = user_data;
|
EekboardSystemClient *client = user_data;
|
||||||
EekKey *key;
|
|
||||||
|
|
||||||
g_assert (client->fakekey);
|
g_assert (client->fakekey);
|
||||||
fakekey_release (client->fakekey);
|
fakekey_release (client->fakekey);
|
||||||
key = eek_keyboard_find_key_by_keycode (client->description, keycode);
|
|
||||||
if (!key) {
|
|
||||||
// g_debug ("Can't find key for keycode %u", keycode);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
@ -530,10 +515,10 @@ eekboard_system_client_enable_fakekey (EekboardSystemClient *client)
|
|||||||
g_assert (client->fakekey);
|
g_assert (client->fakekey);
|
||||||
|
|
||||||
client->key_pressed_handler =
|
client->key_pressed_handler =
|
||||||
g_signal_connect (client->keyboard, "key-pressed",
|
g_signal_connect (client->description, "key-pressed",
|
||||||
G_CALLBACK(on_key_pressed), client);
|
G_CALLBACK(on_key_pressed), client);
|
||||||
client->key_released_handler =
|
client->key_released_handler =
|
||||||
g_signal_connect (client->keyboard, "key-released",
|
g_signal_connect (client->description, "key-released",
|
||||||
G_CALLBACK(on_key_released), client);
|
G_CALLBACK(on_key_released), client);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|||||||
Reference in New Issue
Block a user