Forward press timestamps

This commit is contained in:
Dorota Czaplejewicz
2019-06-19 15:49:51 +00:00
parent a3d745edd0
commit 260ab42b9e
9 changed files with 44 additions and 36 deletions

View File

@ -72,7 +72,7 @@ struct _EekGtkKeyboardPrivate
static EekColor * color_from_gdk_color (GdkColor *gdk_color); static EekColor * color_from_gdk_color (GdkColor *gdk_color);
static void on_key_pressed (EekKeyboard *keyboard, static void on_key_pressed (EekKeyboard *keyboard,
EekKey *key, EekKey *key, guint32 timestamp,
gpointer user_data); gpointer user_data);
static void on_key_released (EekKeyboard *keyboard, static void on_key_released (EekKeyboard *keyboard,
EekKey *key, EekKey *key,
@ -212,7 +212,7 @@ eek_gtk_keyboard_real_button_press_event (GtkWidget *self,
if (key) { if (key) {
g_log("squeek", G_LOG_LEVEL_DEBUG, "emit EekKey pressed"); g_log("squeek", G_LOG_LEVEL_DEBUG, "emit EekKey pressed");
g_signal_emit_by_name (key, "pressed"); // TODO: set the pressed property on the key instead g_signal_emit_by_name (key, "pressed"); // TODO: set the pressed property on the key instead
eek_keyboard_press_key(priv->keyboard, key); eek_keyboard_press_key(priv->keyboard, key, event->time);
} }
// TODO: send time // TODO: send time
return TRUE; return TRUE;
@ -584,8 +584,11 @@ render_released_key (GtkWidget *widget,
static void static void
on_key_pressed (EekKeyboard *keyboard, on_key_pressed (EekKeyboard *keyboard,
EekKey *key, EekKey *key,
guint32 timestamp,
gpointer user_data) gpointer user_data)
{ {
(void)keyboard;
(void)timestamp;
GtkWidget *widget = user_data; GtkWidget *widget = user_data;
EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(widget); EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(widget);

View File

@ -30,10 +30,6 @@
#endif /* HAVE_CONFIG_H */ #endif /* HAVE_CONFIG_H */
#include <string.h> #include <string.h>
#define DEBUG 0
#if DEBUG
#include <stdio.h>
#endif
#include "eek-key.h" #include "eek-key.h"
#include "eek-section.h" #include "eek-section.h"

View File

@ -32,6 +32,7 @@
#endif /* HAVE_CONFIG_H */ #endif /* HAVE_CONFIG_H */
#include "eek-keyboard.h" #include "eek-keyboard.h"
#include "eek-marshalers.h"
#include "eek-section.h" #include "eek-section.h"
#include "eek-key.h" #include "eek-key.h"
#include "eek-symbol.h" #include "eek-symbol.h"
@ -92,9 +93,9 @@ eek_modifier_key_free (EekModifierKey *modkey)
g_slice_free (EekModifierKey, modkey); g_slice_free (EekModifierKey, modkey);
} }
void eek_keyboard_press_key(EekKeyboard *keyboard, EekKey *key) { void eek_keyboard_press_key(EekKeyboard *keyboard, EekKey *key, guint32 timestamp) {
g_log("squeek", G_LOG_LEVEL_DEBUG, "emit EekKeyboard key-pressed"); g_log("squeek", G_LOG_LEVEL_DEBUG, "emit EekKeyboard key-pressed");
g_signal_emit (keyboard, signals[KEY_PRESSED], 0, key); g_signal_emit (keyboard, signals[KEY_PRESSED], 0, key, timestamp);
} }
static void static void
@ -279,7 +280,8 @@ set_modifiers_with_key (EekKeyboard *self,
static void static void
eek_keyboard_real_key_pressed (EekKeyboard *self, eek_keyboard_real_key_pressed (EekKeyboard *self,
EekKey *key) EekKey *key,
guint32 timestamp)
{ {
EekKeyboardPrivate *priv = EEK_KEYBOARD_GET_PRIVATE(self); EekKeyboardPrivate *priv = EEK_KEYBOARD_GET_PRIVATE(self);
EekSymbol *symbol; EekSymbol *symbol;
@ -305,7 +307,7 @@ eek_keyboard_real_key_pressed (EekKeyboard *self,
EekboardContext ec = {0}; EekboardContext ec = {0};
Client c = {&ec, 0, {0}}; Client c = {&ec, 0, {0}};
emit_key_activated(&ec, keycode, symbol, modifiers, &c, TRUE); emit_key_activated(&ec, keycode, symbol, modifiers, &c, TRUE, timestamp);
} }
static void static void
@ -489,10 +491,11 @@ eek_keyboard_class_init (EekKeyboardClass *klass)
G_STRUCT_OFFSET(EekKeyboardClass, key_pressed), G_STRUCT_OFFSET(EekKeyboardClass, key_pressed),
NULL, NULL,
NULL, NULL,
g_cclosure_marshal_VOID__OBJECT, _eek_marshal_VOID__OBJECT_UINT,
G_TYPE_NONE, G_TYPE_NONE,
1, 2,
EEK_TYPE_KEY); EEK_TYPE_KEY,
G_TYPE_UINT);
/** /**
* EekKeyboard::key-released: * EekKeyboard::key-released:

View File

@ -86,7 +86,8 @@ struct _EekKeyboardClass
/* signals */ /* signals */
void (* key_pressed) (EekKeyboard *self, void (* key_pressed) (EekKeyboard *self,
EekKey *key); EekKey *key,
guint32 timestamp);
void (* key_released) (EekKeyboard *self, void (* key_released) (EekKeyboard *self,
EekKey *key); EekKey *key);
@ -190,7 +191,7 @@ EekModifierKey *eek_modifier_key_copy
void eek_modifier_key_free void eek_modifier_key_free
(EekModifierKey *modkey); (EekModifierKey *modkey);
void eek_keyboard_press_key(EekKeyboard *keyboard, EekKey *key); void eek_keyboard_press_key(EekKeyboard *keyboard, EekKey *key, guint32 timestamp);
G_END_DECLS G_END_DECLS
#endif /* EEK_KEYBOARD_H */ #endif /* EEK_KEYBOARD_H */

View File

@ -1 +1,2 @@
VOID:INT,INT VOID:INT,INT
VOID:OBJECT,UINT

View File

@ -715,7 +715,7 @@ on_key_activated(EekKeyboard *keyboard,
EekboardContext ec = {0}; EekboardContext ec = {0};
Client c = {&ec, 0, {0}}; Client c = {&ec, 0, {0}};
emit_key_activated(&ec, keycode, symbol, modifiers, &c, pressed); emit_key_activated(&ec, keycode, symbol, modifiers, &c, pressed, 0);
} }
static void static void

View File

@ -1 +0,0 @@
VOID:UINT,OBJECT,UINT

View File

@ -119,16 +119,17 @@ int WaylandFakeKeyEvent(
Display* dpy, Display* dpy,
unsigned int keycode, unsigned int keycode,
Bool is_press, Bool is_press,
unsigned long delay uint32_t timestamp
) { ) {
printf("Sending fake event %d press %d delay %ld\n", keycode, is_press, delay); printf("%d: Sending fake event %d press %d\n", timestamp, keycode, is_press);
return 0; return 0;
} }
static void static void
send_fake_modifier_key_event (Client *client, send_fake_modifier_key_event (Client *client,
EekModifierType modifiers, EekModifierType modifiers,
gboolean is_pressed) gboolean is_pressed,
uint32_t timestamp)
{ {
GdkDisplay *display = gdk_display_get_default (); GdkDisplay *display = gdk_display_get_default ();
Display *xdisplay = NULL; //GDK_DISPLAY_XDISPLAY (display); Display *xdisplay = NULL; //GDK_DISPLAY_XDISPLAY (display);
@ -143,7 +144,7 @@ send_fake_modifier_key_event (Client *client,
WaylandFakeKeyEvent (xdisplay, WaylandFakeKeyEvent (xdisplay,
keycode, keycode,
is_pressed, is_pressed,
CurrentTime); timestamp);
} }
} }
} }
@ -152,7 +153,8 @@ static void
send_fake_key_event (Client *client, send_fake_key_event (Client *client,
guint xkeysym, guint xkeysym,
guint keyboard_modifiers, guint keyboard_modifiers,
gboolean pressed) gboolean pressed,
uint32_t timestamp)
{ {
GdkDisplay *display = gdk_display_get_default (); GdkDisplay *display = gdk_display_get_default ();
Display *xdisplay = NULL; // GDK_DISPLAY_XDISPLAY (display); Display *xdisplay = NULL; // GDK_DISPLAY_XDISPLAY (display);
@ -188,9 +190,9 @@ send_fake_key_event (Client *client,
modifiers |= keyboard_modifiers; modifiers |= keyboard_modifiers;
send_fake_modifier_key_event (client, modifiers, TRUE); send_fake_modifier_key_event (client, modifiers, TRUE, timestamp);
WaylandFakeKeyEvent (xdisplay, keycode, pressed, 0); WaylandFakeKeyEvent (xdisplay, keycode, pressed, timestamp);
send_fake_modifier_key_event (client, modifiers, FALSE); send_fake_modifier_key_event (client, modifiers, FALSE, timestamp);
if (old_keysym != xkeysym) if (old_keysym != xkeysym)
replace_keycode (client, keycode, &old_keysym); replace_keycode (client, keycode, &old_keysym);
@ -200,7 +202,8 @@ static void
send_fake_key_events (Client *client, send_fake_key_events (Client *client,
EekSymbol *symbol, EekSymbol *symbol,
guint keyboard_modifiers, guint keyboard_modifiers,
gboolean pressed) gboolean pressed,
uint32_t timestamp)
{ {
/* Ignore modifier keys */ /* Ignore modifier keys */
if (eek_symbol_is_modifier (symbol)) if (eek_symbol_is_modifier (symbol))
@ -236,7 +239,7 @@ send_fake_key_events (Client *client,
if (EEK_IS_KEYSYM(symbol)) { if (EEK_IS_KEYSYM(symbol)) {
guint xkeysym = eek_keysym_get_xkeysym (EEK_KEYSYM(symbol)); guint xkeysym = eek_keysym_get_xkeysym (EEK_KEYSYM(symbol));
send_fake_key_event (client, xkeysym, keyboard_modifiers, pressed); send_fake_key_event (client, xkeysym, keyboard_modifiers, pressed, timestamp);
} }
} }
@ -246,7 +249,8 @@ emit_key_activated (EekboardContext *context,
EekSymbol *symbol, EekSymbol *symbol,
guint modifiers, guint modifiers,
Client *client, Client *client,
gboolean pressed) gboolean pressed,
uint32_t timestamp)
{ {
/* FIXME: figure out how to deal with Client after key presses go through /* FIXME: figure out how to deal with Client after key presses go through
if (g_strcmp0 (eek_symbol_get_name (symbol), "cycle-keyboard") == 0) { if (g_strcmp0 (eek_symbol_get_name (symbol), "cycle-keyboard") == 0) {
@ -275,7 +279,7 @@ emit_key_activated (EekboardContext *context,
return; return;
} }
*/ */
send_fake_key_events (client, symbol, modifiers, pressed); send_fake_key_events (client, symbol, modifiers, pressed, timestamp);
} }
/* Finds the first key code for each modifier and saves it in modifier_keycodes */ /* Finds the first key code for each modifier and saves it in modifier_keycodes */

View File

@ -1,6 +1,7 @@
#ifndef KEYEMITTER_H #ifndef KEYEMITTER_H
#define KEYEMITTER_H #define KEYEMITTER_H
#include <inttypes.h>
#include <glib.h> #include <glib.h>
#include <X11/XKBlib.h> #include <X11/XKBlib.h>
@ -21,7 +22,7 @@ emit_key_activated (EekboardContext *context,
guint keycode, guint keycode,
EekSymbol *symbol, EekSymbol *symbol,
guint modifiers, guint modifiers,
Client *client, gboolean pressed); Client *client, gboolean pressed, uint32_t timestamp);
gboolean gboolean
client_enable_xtest (Client *client); client_enable_xtest (Client *client);