From 53af829f46f111649a7c4320ed335e3386b4eb3e Mon Sep 17 00:00:00 2001 From: Dorota Czaplejewicz Date: Sat, 6 Apr 2019 17:45:06 +0000 Subject: [PATCH] Send both press and release events --- eekboard/eekboard-context-service.c | 33 +++++++++++++++++------------ eekboard/key-emitter.c | 24 ++++++++++----------- eekboard/key-emitter.h | 2 +- 3 files changed, 33 insertions(+), 26 deletions(-) diff --git a/eekboard/eekboard-context-service.c b/eekboard/eekboard-context-service.c index 3a4e1865..571c4a31 100644 --- a/eekboard/eekboard-context-service.c +++ b/eekboard/eekboard-context-service.c @@ -693,6 +693,24 @@ on_repeat_timeout_init (EekboardContextService *context) return FALSE; } +static void +on_key_activated(EekKeyboard *keyboard, + EekKey *key, + EekboardContextService *context, + gboolean pressed) +{ + guint keycode = eek_key_get_keycode (key); + EekSymbol *symbol = eek_key_get_symbol_with_fallback (key, 0, 0); + + guint modifiers = eek_keyboard_get_modifiers (context->priv->keyboard); + + // Insert + EekboardContext ec = {0}; + Client c = {&ec, 0, {0}}; + + emit_key_activated(&ec, keycode, symbol, modifiers, &c, pressed); +} + static void on_key_pressed (EekKeyboard *keyboard, EekKey *key, @@ -714,6 +732,7 @@ on_key_pressed (EekKeyboard *keyboard, g_timeout_add (delay, (GSourceFunc)on_repeat_timeout_init, context); + on_key_activated(keyboard, key, context, TRUE); } static void @@ -726,20 +745,8 @@ on_key_released (EekKeyboard *keyboard, if (context->priv->repeat_timeout_id > 0) { g_source_remove (context->priv->repeat_timeout_id); context->priv->repeat_timeout_id = 0; - - guint keycode = eek_key_get_keycode (key); - EekSymbol *symbol = eek_key_get_symbol_with_fallback (key, 0, 0); - - guint modifiers = eek_keyboard_get_modifiers (context->priv->keyboard); - /* KeyActivated signal has not been emitted in repeat handler */ - - - // Insert - EekboardContext ec = {0}; - Client c = {&ec, 0, {0}}; - - emit_key_activated(&ec, keycode, symbol, modifiers, &c); } + on_key_activated(keyboard, key, context, FALSE); } static void diff --git a/eekboard/key-emitter.c b/eekboard/key-emitter.c index aa8f1811..f470de45 100644 --- a/eekboard/key-emitter.c +++ b/eekboard/key-emitter.c @@ -151,7 +151,8 @@ send_fake_modifier_key_event (Client *client, static void send_fake_key_event (Client *client, guint xkeysym, - guint keyboard_modifiers) + guint keyboard_modifiers, + gboolean pressed) { GdkDisplay *display = gdk_display_get_default (); Display *xdisplay = NULL; // GDK_DISPLAY_XDISPLAY (display); @@ -188,10 +189,7 @@ send_fake_key_event (Client *client, modifiers |= keyboard_modifiers; send_fake_modifier_key_event (client, modifiers, TRUE); - WaylandFakeKeyEvent (xdisplay, keycode, TRUE, 20); - //XSync (xdisplay, False); - WaylandFakeKeyEvent (xdisplay, keycode, FALSE, 20); - // XSync (xdisplay, False); + WaylandFakeKeyEvent (xdisplay, keycode, pressed, 0); send_fake_modifier_key_event (client, modifiers, FALSE); if (old_keysym != xkeysym) @@ -201,7 +199,8 @@ send_fake_key_event (Client *client, static void send_fake_key_events (Client *client, EekSymbol *symbol, - guint keyboard_modifiers) + guint keyboard_modifiers, + gboolean pressed) { /* Ignore modifier keys */ if (eek_symbol_is_modifier (symbol)) @@ -237,16 +236,17 @@ send_fake_key_events (Client *client, if (EEK_IS_KEYSYM(symbol)) { guint xkeysym = eek_keysym_get_xkeysym (EEK_KEYSYM(symbol)); - send_fake_key_event (client, xkeysym, keyboard_modifiers); + send_fake_key_event (client, xkeysym, keyboard_modifiers, pressed); } } void emit_key_activated (EekboardContext *context, - guint keycode, - EekSymbol *symbol, - guint modifiers, - Client *client) + guint keycode, + EekSymbol *symbol, + guint modifiers, + Client *client, + gboolean pressed) { /* FIXME: figure out how to deal with Client after key presses go through if (g_strcmp0 (eek_symbol_get_name (symbol), "cycle-keyboard") == 0) { @@ -275,7 +275,7 @@ emit_key_activated (EekboardContext *context, return; } */ - send_fake_key_events (client, symbol, modifiers); + send_fake_key_events (client, symbol, modifiers, pressed); } /* Finds the first key code for each modifier and saves it in modifier_keycodes */ diff --git a/eekboard/key-emitter.h b/eekboard/key-emitter.h index 74df8e5c..12b9717b 100644 --- a/eekboard/key-emitter.h +++ b/eekboard/key-emitter.h @@ -21,7 +21,7 @@ emit_key_activated (EekboardContext *context, guint keycode, EekSymbol *symbol, guint modifiers, - Client *client); + Client *client, gboolean pressed); gboolean client_enable_xtest (Client *client);