Fixed handling of DGA2.0 keyboard events.
diff --git a/windows/x11drv/event.c b/windows/x11drv/event.c index 59989a1..590ee1d 100644 --- a/windows/x11drv/event.c +++ b/windows/x11drv/event.c
@@ -30,6 +30,7 @@ #include "debugtools.h" #include "drive.h" #include "heap.h" +#include "input.h" #include "keyboard.h" #include "message.h" #include "mouse.h" @@ -270,14 +271,32 @@ } if ((event->type == DGAKeyPressEventType) || (event->type == DGAKeyReleaseEventType)) { - /* Out of laziness, use the helper function to do the conversion :-) */ + /* Fill a XKeyEvent to send to EVENT_Key */ XKeyEvent ke; + XDGAKeyEvent *evt = (XDGAKeyEvent *) event; TRACE("DGAKeyPress/ReleaseEvent received.\n"); - XDGAKeyEventToXKeyEvent((XDGAKeyEvent *) event, &ke); + if (evt->type == DGAKeyReleaseEventType) + ke.type = KeyRelease; + else + ke.type = KeyPress; + ke.serial = evt->serial; + ke.send_event = FALSE; + ke.display = evt->display; + ke.window = 0; + ke.root = 0; + ke.subwindow = 0; + ke.time = evt->time; + ke.x = PosX; + ke.y = PosY; + ke.x_root = -1; + ke.y_root = -1; + ke.state = evt->state; + ke.keycode = evt->keycode; + ke.same_screen = TRUE; - EVENT_Key( DGAhwnd, &ke ); + X11DRV_KEYBOARD_HandleEvent(NULL, &ke); return; } }