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)
|
||||
g_signal_emit_by_name (priv->dragged_key, "released", priv->keyboard);
|
||||
if (key) {
|
||||
if (key && !eek_key_is_pressed (key)) {
|
||||
priv->dragged_key = key;
|
||||
g_signal_emit_by_name (key, "pressed", priv->keyboard);
|
||||
}
|
||||
@ -188,11 +188,6 @@ eek_gtk_keyboard_real_button_release_event (GtkWidget *self,
|
||||
GdkEventButton *event)
|
||||
{
|
||||
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) {
|
||||
g_signal_emit_by_name (priv->dragged_key, "released", priv->keyboard);
|
||||
|
||||
@ -468,52 +468,37 @@ get_fakekey_modifiers (EekModifierType modifiers)
|
||||
}
|
||||
|
||||
static void
|
||||
on_key_pressed (EekboardKeyboard *keyboard,
|
||||
guint keycode,
|
||||
gpointer user_data)
|
||||
on_key_pressed (EekKeyboard *keyboard,
|
||||
EekKey *key,
|
||||
gpointer user_data)
|
||||
{
|
||||
EekboardSystemClient *client = user_data;
|
||||
EekKey *key;
|
||||
EekSymbol *symbol;
|
||||
EekModifierType modifiers;
|
||||
FakeKeyModifier fakekey_modefiers;
|
||||
guint keycode;
|
||||
|
||||
g_assert (client->fakekey);
|
||||
|
||||
modifiers = eek_keyboard_get_modifiers (client->description);
|
||||
key = eek_keyboard_find_key_by_keycode (client->description, keycode);
|
||||
if (!key) {
|
||||
// g_debug ("Can't find key for keycode %u", keycode);
|
||||
return;
|
||||
}
|
||||
|
||||
fakekey_modefiers = get_fakekey_modifiers (modifiers);
|
||||
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)) {
|
||||
fakekey_send_keyevent (client->fakekey,
|
||||
keycode,
|
||||
True,
|
||||
get_fakekey_modifiers (modifiers));
|
||||
fakekey_send_keyevent (client->fakekey,
|
||||
keycode,
|
||||
False,
|
||||
get_fakekey_modifiers (modifiers));
|
||||
fakekey_send_keyevent (client->fakekey, keycode, True, modifiers);
|
||||
fakekey_send_keyevent (client->fakekey, keycode, False, modifiers);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
on_key_released (EekboardKeyboard *keyboard,
|
||||
guint keycode,
|
||||
gpointer user_data)
|
||||
on_key_released (EekKeyboard *keyboard,
|
||||
EekKey *key,
|
||||
gpointer user_data)
|
||||
{
|
||||
EekboardSystemClient *client = user_data;
|
||||
EekKey *key;
|
||||
|
||||
g_assert (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
|
||||
@ -530,10 +515,10 @@ eekboard_system_client_enable_fakekey (EekboardSystemClient *client)
|
||||
g_assert (client->fakekey);
|
||||
|
||||
client->key_pressed_handler =
|
||||
g_signal_connect (client->keyboard, "key-pressed",
|
||||
g_signal_connect (client->description, "key-pressed",
|
||||
G_CALLBACK(on_key_pressed), client);
|
||||
client->key_released_handler =
|
||||
g_signal_connect (client->keyboard, "key-released",
|
||||
g_signal_connect (client->description, "key-released",
|
||||
G_CALLBACK(on_key_released), client);
|
||||
|
||||
return TRUE;
|
||||
|
||||
Reference in New Issue
Block a user