Forward press timestamps
This commit is contained in:
@ -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);
|
||||||
|
|
||||||
|
|||||||
@ -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"
|
||||||
|
|||||||
@ -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:
|
||||||
|
|||||||
@ -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 */
|
||||||
|
|||||||
@ -1 +1,2 @@
|
|||||||
VOID:INT,INT
|
VOID:INT,INT
|
||||||
|
VOID:OBJECT,UINT
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -1 +0,0 @@
|
|||||||
VOID:UINT,OBJECT,UINT
|
|
||||||
@ -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 */
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user