diff --git a/eek/eek-gtk-keyboard.c b/eek/eek-gtk-keyboard.c index ab8c81f9..7bea9161 100644 --- a/eek/eek-gtk-keyboard.c +++ b/eek/eek-gtk-keyboard.c @@ -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); diff --git a/src/system-client.c b/src/system-client.c index c086b842..cb4f7c7d 100644 --- a/src/system-client.c +++ b/src/system-client.c @@ -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;