This commit is contained in:
Enrico Weigelt, metux IT consult 2024-09-05 16:43:35 +02:00
parent e7b358e174
commit c56c11574d
3 changed files with 48 additions and 9 deletions

View File

@ -64,8 +64,21 @@ SetTimeSinceLastInputEvent(void)
} }
void void
xnestQueueKeyEvent(int type, unsigned int keycode) xnestQueueKeyEvent(
int type,
unsigned int keycode,
xcb_window_t root,
xcb_window_t event,
xcb_window_t child,
int16_t root_x,
int16_t root_y,
int16_t event_x,
int16_t event_y)
{ {
fprintf(stderr, "%s: keycode=%d root=%0x child=%0x event=%x R=(%d:%d) E=(%d:%d)\n",
(type == KeyPress ? "KeyPress" : (type == KeyRelease ? "KeyRelease" : "unknown")),
keycode, root, event, child, root_x, root_y, event_x, event_y);
lastEventTime = GetTimeInMillis(); lastEventTime = GetTimeInMillis();
QueueKeyboardEvents(xnestKeyboardDevice, type, keycode); QueueKeyboardEvents(xnestKeyboardDevice, type, keycode);
} }
@ -83,7 +96,15 @@ xnest_handle_event(xcb_generic_event_t *event)
{ {
EVTYPE(xcb_key_press_event_t); EVTYPE(xcb_key_press_event_t);
xnestUpdateModifierState(ev->state); xnestUpdateModifierState(ev->state);
xnestQueueKeyEvent(KeyPress, ev->detail); xnestQueueKeyEvent(KeyPress,
ev->detail,
ev->root,
ev->event,
ev->child,
ev->root_x,
ev->root_y,
ev->event_x,
ev->event_y);
break; break;
} }
@ -91,7 +112,15 @@ xnest_handle_event(xcb_generic_event_t *event)
{ {
EVTYPE(xcb_key_release_event_t); EVTYPE(xcb_key_release_event_t);
xnestUpdateModifierState(ev->state); xnestUpdateModifierState(ev->state);
xnestQueueKeyEvent(KeyRelease, ev->detail); xnestQueueKeyEvent(KeyRelease,
ev->detail,
ev->root,
ev->event,
ev->child,
ev->root_x,
ev->root_y,
ev->event_x,
ev->event_y);
break; break;
} }

View File

@ -17,10 +17,20 @@ is" without express or implied warranty.
#include <X11/Xmd.h> #include <X11/Xmd.h>
#include <xcb/xcb.h>
extern CARD32 lastEventTime; extern CARD32 lastEventTime;
void SetTimeSinceLastInputEvent(void); void SetTimeSinceLastInputEvent(void);
void xnestCollectEvents(void); void xnestCollectEvents(void);
void xnestQueueKeyEvent(int type, unsigned int keycode); void xnestQueueKeyEvent(int type,
unsigned int keycode,
xcb_window_t root,
xcb_window_t event,
xcb_window_t child,
int16_t root_x,
int16_t root_y,
int16_t event_x,
int16_t event_y);
#endif /* XNESTEVENTS_H */ #endif /* XNESTEVENTS_H */

View File

@ -289,11 +289,11 @@ xnestUpdateModifierState(unsigned int state)
for (key = 0; key < MAP_LENGTH; key++) for (key = 0; key < MAP_LENGTH; key++)
if (keyc->xkbInfo->desc->map->modmap[key] & mask) { if (keyc->xkbInfo->desc->map->modmap[key] & mask) {
if (mask == LockMask) { if (mask == LockMask) {
xnestQueueKeyEvent(KeyPress, key); xnestQueueKeyEvent(KeyPress, key, 0, 0, 0, 0, 0, 0, 0);
xnestQueueKeyEvent(KeyRelease, key); xnestQueueKeyEvent(KeyRelease, key, 0, 0, 0, 0, 0, 0, 0);
} }
else if (key_is_down(pDev, key, KEY_PROCESSED)) else if (key_is_down(pDev, key, KEY_PROCESSED))
xnestQueueKeyEvent(KeyRelease, key); xnestQueueKeyEvent(KeyRelease, key, 0, 0, 0, 0, 0, 0, 0);
if (--count == 0) if (--count == 0)
break; break;
@ -304,9 +304,9 @@ xnestUpdateModifierState(unsigned int state)
if (!(xkb_state & mask) && (state & mask)) if (!(xkb_state & mask) && (state & mask))
for (key = 0; key < MAP_LENGTH; key++) for (key = 0; key < MAP_LENGTH; key++)
if (keyc->xkbInfo->desc->map->modmap[key] & mask) { if (keyc->xkbInfo->desc->map->modmap[key] & mask) {
xnestQueueKeyEvent(KeyPress, key); xnestQueueKeyEvent(KeyPress, key, 0, 0, 0, 0, 0, 0, 0);
if (mask == LockMask) if (mask == LockMask)
xnestQueueKeyEvent(KeyRelease, key); xnestQueueKeyEvent(KeyRelease, key, 0, 0, 0, 0, 0, 0, 0);
break; break;
} }
} }